mule esb exception(一)

mule esb 异常分类

  1. system exception
  2. message exception

系统异常出现的两种情况:

  1. 应用启动时出的异常
  2. 连接外部系统时出现的异常

    for example:读取文件,当文件正在写入时,file connector endpoint去读这个文件,出现的异常即为系统异常,stackoverflow也有相关参考

    系统异常相当于java中的Error

    由于系统异常处于应用不可用状态,重点分析 message exception

    Message Exception

    message exception适用如下情况:

    信息源–>信息处理–>…n–>信息处理时如果处理的信息发生异常,就调用异常策略处理异常,异常中也可以有多个信息处理,然后到输出端(outbound message)

    废话说了这么多,搞技术的重应用直接上例子

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:jms="http://www.mulesoft.org/schema/mule/jms"
    xmlns:smtp="http://www.mulesoft.org/schema/mule/smtp"
    xmlns:file="http://www.mulesoft.org/schema/mule/file"
    xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.6.1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd
http://www.mulesoft.org/schema/mule/smtp http://www.mulesoft.org/schema/mule/smtp/current/mule-smtp.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd">
    <!-- Typical Connector for Inbound Endpoint: Read files -->
    <file:connector name="input"  autoDelete="true" pollingFrequency="1000" fileAge="600000" moveToDirectory="D:\mule\import\backup" moveToPattern="#[message.inboundProperties[‘originalFilename‘]].backup"   doc:name="File" />
    <!-- Typical Connector for Outbound Endpoint: Write files -->
    <file:connector name="output"  doc:name="File" />
    <catch-exception-strategy name="Catch_Exception_Strategy" >
    <logger message=" 文件名:  #[message.inboundProperties[‘originalFilename‘]] 在 #[server.dateTime.format(&quot;yyyy.MM.dd   HH:mm:ss  ‘出现异常信息‘ &quot;)]  #[exception]" level="INFO" doc:name="Logger"/>
    <set-payload value="文件名: #[message.inboundProperties[‘originalFilename‘]] 在  #[server.dateTime.format(&quot;yyyy.MM.dd  HH:mm:ss ‘出现异常信息‘ &quot;)]  #[exception]" doc:name="Set Payload"/>
    <smtp:outbound-endpoint host="smtp.mailserver.com" user="host" password="*****" to="[email protected]" from="[email protected]" subject="testfile" responseTimeout="10000"  encoding="GB18030" mimeType="text/html" doc:name="SMTP"/>
    </catch-exception-strategy>
    <configuration defaultExceptionStrategy-ref="Catch_Exception_Strategy" doc:name="Configuration" doc:description="Use as implicit default exception strategy."/>
    <flow name="fileimport">
        <file:inbound-endpoint connector-ref="input"
            path="D:\mule\import\input" doc:name="File" responseTimeout="10000">
        <file:filename-wildcard-filter pattern="导出*.doc" />
        </file:inbound-endpoint>
        <!-- <null-component /> -->
        <file:outbound-endpoint connector-ref="output"
            path="D:\mule\import\output" doc:name="File" responseTimeout="10000" />

    </flow>

</mule>

以上例子测试ok,修改了发邮件部分,当然不能暴漏我的邮件服务器啦

<file:connector name="input"  autoDelete="true" pollingFrequency="1000" fileAge="600000" moveToDirectory="D:\mule\import\backup" moveToPattern="#[message.inboundProperties[‘originalFilename‘]].backup"   doc:name="File" />
<file:connector name="output"  doc:name="File" />

以上代码是 file connector inbound 参考这里

<catch-exception-strategy name="Catch_Exception_Strategy" >
    <logger message=" 文件名:  #[message.inboundProperties[‘originalFilename‘]] 在 #[server.dateTime.format(&quot;yyyy.MM.dd   HH:mm:ss  ‘出现异常信息‘ &quot;)]  #[exception]" level="INFO" doc:name="Logger"/>
    <set-payload value="文件名: #[message.inboundProperties[‘originalFilename‘]] 在  #[server.dateTime.format(&quot;yyyy.MM.dd  HH:mm:ss ‘出现异常信息‘ &quot;)]  #[exception]" doc:name="Set Payload"/>
    <smtp:outbound-endpoint host="smtp.mailserver.com" user="host" password="*****" to="[email protected]" from="[email protected]" subject="testfile" responseTimeout="10000"  encoding="GB18030" mimeType="text/html" doc:name="SMTP"/>
    </catch-exception-strategy>
    <configuration defaultExceptionStrategy-ref="Catch_Exception_Strategy" doc:name="Configuration" doc:description="Use as implicit default exception strategy."/>

以上是对应的异常处理:

<logger message=" 文件名:  #[message.inboundProperties[‘originalFilename‘]] 在 #[server.dateTime.format(&quot;yyyy.MM.dd   HH:mm:ss  ‘出现异常信息‘ &quot;)]  #[exception]" level="INFO" doc:name="Logger"/>

捕获异常后打印对应的日志信息

<set-payload value="文件名: #[message.inboundProperties[‘originalFilename‘]] 在  #[server.dateTime.format(&quot;yyyy.MM.dd  HH:mm:ss ‘出现异常信息‘ &quot;)]  #[exception]" doc:name="Set Payload"/>

邮件内容信息在 payload中显示,所有赋值payload

<smtp:outbound-endpoint host="smtp.mailserver.com" user="host" password="*****" to="[email protected]" from="[email protected]" subject="testfile" responseTimeout="10000"  encoding="GB18030" mimeType="text/html" doc:name="SMTP"/>  

发邮件输出异常日志信息

<configuration defaultExceptionStrategy-ref="Catch_Exception_Strategy" doc:name="Configuration" doc:description="Use as implicit default exception strategy."/> 

这段非常重要:上面定义的异常策略是为了后期引用,以上代码 指定默认的异常策略为 以上定义的异常:通过名称Catch_Exception_Strategy引用定义异常

以上是个完整的flow例子,一般情况下不会抛出异常,如果我想测试一下,抛出异常后是否会发邮件:

只能手工抛出异常:详细参考这里

添加如上代码

看这个类的实现:

/*
 *(c) 2003-2014 MuleSoft, Inc. This software is protected under international copyright
 *law. All use of this software is subject to MuleSoft‘s Master Subscription Agreement
 *(or other master license agreement) separately entered into in writing between you and
 *MuleSoft. If such an agreement is not in place, you may not use the software.
 */
package org.mule.component.simple;

import org.mule.api.MuleEventContext;
import org.mule.api.lifecycle.Callable;

/**
 * <code>NullComponent</code> is a service that is used as a placeholder. This
 * implementation will throw an exception if a message is received for it.
 */
public class NullComponent implements Callable
{

    public Object onCall(MuleEventContext context) throws Exception
    {
        throw new UnsupportedOperationException("This service cannot receive messages. Service is: "
                                                + context.getFlowConstruct().getName());
    }

}

会抛出:UnsupportedOperationException异常

这样就会调用邮件处理输出端发送邮件:

打印异常信息如下:

先简单写到这里,后期再谈 mule esb exception

时间: 2024-11-10 11:31:12

mule esb exception(一)的相关文章

Mule ESB 自带例子hello初体验

1 配置的流的效果图 2 应用配置文件hello.xml内容 1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <mule xmlns:vm="http://www.mulesoft.org/schema/mule/vm" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://w

mule esb 文件传输

问题:如何使用mule esb 进行文件传输 应用场景: 局域网内不同服务器之间共享文件夹的形式传入文件,采用mule esb 实现共享文件夹之间文件传递的自动化,example: 服务器一(ip:10.66.88.1)上有个input共享文件夹,服务器二(10.66.88.2)上有个output文件夹,服务器一产生生成文件到input共享文件夹,人工copy到服务器二的output文件夹,服务器二再从output文件夹读取数据,mule esb文件传输,解决服务器一上的文件夹到服务器二outp

EnjoyingSoft之Mule ESB基础系列第二篇:Mule ESB基本概念

目录 1. 使用Anypoint Studio开发 2. Mule ESB Application Structure - Mule ESB应用程序结构 3. Mule ESB Application整体构造 4. Mule ESB构造元素 - Flow 5. Mule ESB构造元素 - Connector 6. Mule ESB构造元素 - Processor Mule ESB在众多开源的ESB中处于领先者的地位,MuleSoft公司也作为独角兽,2017年在纽交所上市.我们作为MuleSo

EnjoyingSoft之Mule ESB基础系列第三篇:Mule message structure - Mule message结构

目录 1. 探索Mule Message结构 2. Mule Message的Payload 3. Mule Message的Property 4. Mule Message的Attachment 5. Mule的Variable 6. 使用Java操作Mule Message Mule ESB是一个使用Java语言编写的开源企业服务总线,企业服务总线英文Enterprise Service Bus,简称ESB.其相关源代码也托管在GitHub上,可以在https://github.com/mu

mule esb standalone服务器指定JVM

问题:mule standalone 服务器 3.6.1运行需要 JDK1.7版本,目前项目运行JDK1.6,领导抠门,不愿意为ESB单独运行一个服务器,只能在原来的服务器上安装JDK1.7 解决方法:修改 mule standalone 配置文件,指定运行的JVM 为JDK1.7的JVM 修改文件文件名为:launcher.bat 和 wrapper.conf launcher.bat位置如下: 修改内容:重新指定了FOUND的值: set FOUND = C:\Program Files\J

Mule Esb实现WebService代理

基于SOA的系统开发越来越成为了分布式系统开发的提纲,在系统继承平台项目中,我们也很好的实现了这一理念.在这个项目中,各个系统之间的交互主要依赖的是webservice,由其是基础系统为考试系统,评教系统提供数据支持的情况,并且随着业务的不断扩展,我们将提供越来越多的webservice,在这种情况下如果依然让各个系统之间持有webservice的wsdl以此访问webservice在后期会造成严重的维护问题,并且考虑到继承以前遗留的异构系统我们最终选择了使用ESB来成立一个webservice

Shuttle ESB实现局域网消息推送

ESB全称Enterprise Service Bus,即企业服务总线.它是传统中间件技术与XML.Web服务等技术结合的产物. ESB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合. 看吧,ESB的功能是如此强大.在java中常用的是Mule ESB,而到了.Net,Shuttle ESB作为一种新生的ESB正在慢慢的被人们所接受.下面通过一个实例讲解Shuttle ES

智能路由——ESB

SOA之我见 SOA已然是企业级开发的必然之路.有人会问:我们有了OOP,还需要SOA吗?好吧我承认,这个问题也困扰了我很久.现如今我的出的结论是:OOP是OOP,SOA是SOA. OOP是指面向对象程序设计,是指程序开发中的编程思想或者是编程设计方法.它的产生是为了弥补面向过程开发的缺陷,用现代人的思维方式编写程序的方法. SOA(面向服务的体系结构Service Oriented Architecture)是大型分布式系统的架构模式,它让架构师站在了一个全新的角度理解企业级架构的开发.SOA

Shuttle ESB(六)——在项目中的应用

如果说你认真看了前面几篇关于ESB的介绍,我相信,在这一篇文章中,你将会找到很多共鸣. 尽管,市面上开源的ESB确实非常之多,像Java中的Mule ESB,Jboss ESB:.Net中的NServiceBus.而Shuttle ESB是一个新兴的开源框架,网络上资源也比较少.我们当初为什么会选用Shuttle ESB呢? 正所谓没有最好,只有更合适.多次调研发现,Shuttle ESB有以下几大优点:1.Shuttle ESB是基于EDA的:2.Shuttle ESB的实现以发布订阅为核心: