Mule是一个基于ESB架构的消息平台,Mule 的核心是一个基于SEDA(Staged Event Driven Architecture)的服务容器,该容器管理被称为通用消息对象(Universal Message Objects /UMO)的服务对象,而这些对象都是POJO。所有UMO和其他应用之间的通信都是通过消息端点(message endpoint)来进行的。这些端点为众多独立的技术,比如Jms, Smtp, Jdbc, Tcp, Http, Xmpp, file等等,提供了简单和一致的接口。

Mule应用程序通常是通过网络由许多Mule实例组成(实际上一个应用里面只能有一个mule实例,因为实例启动之后必须占用一个tcp端口),每一个实例是由具有一个或多个UMO组件的轻量级容器所构成,每一个UMO组件都包含有一个或多个能收发事件的端点。

以上描述可以用以下图例来说明:

实际上Mule是用一个配置文件来描述以上信息的,一个典型的配置文件如下:

<

mule-descriptor

name

="Error Manager"

implementation

="errorManager"

>

<

inbound-router

>

<

endpoint

address

="file://./test-data/in"

                          transformers

="XMLToExceptionBean ExceptionBeanToErrorMessage"

/>

inbound-router

>

<

outbound-router

>

<

catch-all-strategy

className

="org.mule.routing.LoggingCatchAllStrategy"

/>

<

router

className

="org.mule.routing.outbound.FilteringOutboundRouter"

                        transformer

="ErrorMessageToException"

>

<

endpoint

address

="file://./test-data/exceptions"

                              transformers

="ErrorMessageToExceptionBean ExceptionBeanToXML"

>

<

properties

><

property

name

="outputPattern"

value

="Exception-${UUID}.xml"

/>

properties

>

endpoint

>

<

filter

className

="org.mule.routing.filters.PayloadTypeFilter"

                            expectedType

="org.mule.MuleException"

/>

router

>

<

router

className

="org.mule.routing.outbound.FilteringOutboundRouter"

                        transformer

="ErrorMessageToException"

>

<

endpoint

address

="smtp://?address=${email.toAddress}"

                              transformers

="ErrorMessageToExceptionBean ExceptionBeanToXML StringToEmailMessage"

>

<

properties

>

<

property

name

="fromAddress"

value

="${email.fromAddress}"

/>

<

property

name

="subject"

value

="${email.subject}"

/>

properties

>

endpoint

>

<

filter

className

="org.mule.routing.filters.PayloadTypeFilter"

                                        expectedType

="org.mule.umo.lifecycle.FatalException"

/>

router

>

<

router

className

="org.mule.routing.outbound.FilteringOutboundRouter"

                        transformer

="ErrorMessageToException"

>

<

endpoint

address

="jms://exception.queue"

                              transformers

="ErrorMessageToExceptionBean ExceptionBeanToXML ObjectToJMSMessage"

/>

<

filter

className

="org.mule.routing.filters.PayloadTypeFilter"

                            expectedType

="org.mule.samples.errorhandler.exceptions.BusinessException"

/>

router

>

outbound-router

>

<

interceptor

name

="default"

/>

mule-descriptor

>

<

mule-descriptor

name

="Business Error Manager"

implementation

="businessErrorManager"

>

<

inbound-router

>

<

endpoint

address

="jms://exception.queue"

                          transformers

="JMSMessageToObject XMLToExceptionBean ExceptionBeanToErrorMessage"

/>

inbound-router

>

mule-descriptor

>

以上是摘取官方网站上提供的一个叫errorhandler的例子里配置文件的一部分,mule-descriptor节点是用来描述一个UMO组件的,在这个配置文件里提供了两个UMO组件,在每一个UMO组件里有一个或多个端点(endpint)来接收或发送事件。也许你会觉得这个配置文件过于复杂,以至于无法理解。没关系,在以后的文章里将会进一步解释。

在Mule容器里面为UMO组件提供了一系列的服务,例如事务管理,事件转化,路由,事件审核和管理等,Mule将对象分开管理意味着可以将UMO组件交给当前流行的IOC容器(比如spring)去构造。虽然Mule声称与spring可以完美结合,然而在我通过一系列实验中发现,Mule与spring结合还是有许多bug的,希望Mule能在下一个版本的更新中解决。

有人可能会说,Mule只是一个Jms实现,然而Mule不仅仅是一个Jms服务器,而且可以通过配置来使用几乎所有的Jms服务,比如说ActiveMq、JBoss MQ、Joram OpenJms、Oracle AQ、SeeBeyond、Spirit Wave、 UberMQ、Weblogic Jms 和 IBM WebSphere MQ。与Spring一样,Mule不会重复造轮子,而是会使用在当今开源社区里成熟的产品。比如在webservice上,Mule支持glue、axis和xfire。对于不同类型的连接(比如说jms和webservice),Mule提供了一致的服务来管理事件的流向、联系、事务、安全和审核。

在使用Mule之前,很有必要理解一些核心的概念和专业术语。以下图表简单的描述了一个Mule服务器的组成

下面将对图表上的每一个概念进行解释。

The Mule Manager

Mule管理器是Mule实例的中心,它的主要作用是管理Mule实例中各种各样的对象,例如:连接器、端点、转换器。这些对象被用来控制在组件中消息的流转以及向组件管理的模型提供服务。

The Model

模型是在你组件中被管理和执行的容器,它控制着消息在你组件里的收和发。默认的Mule模型是基于SEDA的,这意味着它使用了一种高效的基于消息队列的模型来达到最佳的性能。

UMO Components

UMO也就是Universal Message Object(通用消息对象),这是一种能从任何地方收发时间的对象。UMO对象可以是你的业务对象,在消息进来的时候执行你的业务逻辑,这是一种标准的JavaBean,没有任何特殊的Mule代码在你的组件(UMO对象)里面,Mule是如何在你的对象里进行消息收发的路由和转换取决于你在组件里的配置。

Endpoints端点是Mule通信能力的基本原理。一个端点定义在两个或者更多组件之间的通信渠道。可以通过配置消息过滤器、安全拦截器和事务处理来控制一个端点是如何将消息收与发的。

External Applications外部应用可以是任何的遗留系统。基本上,任何应用只要有一种数据传输方式能通过Mule的端点进行通信,UMO组件是不关心是哪个应用提供的数据、应用部署的地点以及是用何种传输协议的。

java mule_Mule入门简介相关推荐

  1. Java初学者入门简介

    之前一直搞C++,C#的开发,Java只在大学的时候稍了解了一点.现在工作中有用到Java,又得再来学学了啊. 要学Java首先自然得布署一个开发环境.主要是安装JDK和Eclipse. 其中JDK就 ...

  2. java从入门到精通第四版明日科技书籍简介及下载

    Java从入门到精通(第4版)(附光盘) 平装 – 2016年10月20日 <Java从入门到精通(第4版)(附光盘)>从初学者角度出发,通过通俗易懂的语言.丰富多彩的实例,详细介绍了使用 ...

  3. Java程序员Go语言入门简介

    引用:Java程序员Go语言入门简介 为什么是 Go 语言 类 C 的语法,这意味着 Java.C#.JavaScript 程序员能很快的上手 有自己的垃圾回收机制 跨平台.编译即可执行无需安装依赖环 ...

  4. opcua 入门简介 java_大二的学生自学Java有出路吗?

    这个是技术,学好了必须是有出路的,当然你喜不喜欢还得看后面的学习情况,三天热火气的情况大有人在,更有甚者就是,系统培训完,上了半年的班了,后转行到别的也有,所以兴趣是自己的最大的老师, 大学都会很迷茫 ...

  5. 双表查询java代码_什么是JDBC?Java数据库连接性简介

    JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集.JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批 ...

  6. 叮!您收到一份超值Java基础入门资料!

    摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例带领大家J ...

  7. java.util.concurrent简介

    文章目录 主要的组件 Executor ExecutorService ScheduledExecutorService Future CountDownLatch CyclicBarrier Sem ...

  8. swagger 怎么去掉get delete_自学 Java 怎么入门?

    给你推荐一个写得非常用心的Java基础教程:码邦主2020年最新的Java视频教程 这个教程将Java的入门基础知识贯穿在一个实例中,逐步深入,可以帮助你快速进入Java编程的世界.万事开头难,逐步跟 ...

  9. 视频专辑:JAVA语言入门视频教程

    为什么80%的码农都做不了架构师?>>>    专辑:JAVA语言入门视频教程 简介:该视频专辑是java的入门教程,适合初学者学习java,讲的也非常容易懂,希望能给想学习java ...

最新文章

  1. html5与原生混合模式开发,HTML5与混合模式开发与Native的关系及其实现[张振华.Jack].pdf...
  2. 查看python安装路径-在cmd中查看python的安装路径方法
  3. 题目1065:输出梯形 (直接用循环控制输出)+题目1432:叠筐 (数组控制形状,最后输出数组)...
  4. printf 宏 调试技巧
  5. #Tomcat# 本地正常但是部署到服务器后,mysql插入中文乱码问题解决!
  6. 权威可信 | 华为云云测通过中国电子技术标准院软件测试工具能力评价
  7. java object怎么拿字段_「Java面试秘籍」String不可变,如何理解
  8. webstorm与Idea禁用自动保存
  9. Python 2 即将退休,Fedora 怎么办?
  10. C++标准转换运算符:reinterpret_cast
  11. Python之路——Python3 入门教程
  12. 数据结构课程设计(学生选课管理系统)链表实现
  13. 谈程序员的职业发展前景
  14. RTX3060安装pytorch
  15. 跨国药企在中国 | 京东健康与卫材成立合资公司;西门子医疗、富士胶片参展中国国际医疗器械展...
  16. 阿里云的云端实践有哪些?
  17. SAP 客商之一次性供应商
  18. s24.基于 Kubernetes v1.25 (二进制) 和 Docker部署高可用集群
  19. 机器人的弊议论文_机器人的利弊作文800字
  20. 如何用Visio画数据库实体关系图

热门文章

  1. 【AdaBoost算法】集成学习——AdaBoost算法实例说明
  2. 博客备份工具BlogDown 软件使用感想
  3. 你梦中的嫁衣为谁而穿红装
  4. 秒杀网站系统设计详解
  5. 现在很多公司为什么热衷于招内部推荐的人呢
  6. 详解统计信号处理之克拉美罗界
  7. SwiftUI iOS 15 将如何改进可访问性accessibility WWDC2021
  8. c语言管理系统题材,C语言旅馆信息管理系统题材.doc
  9. 简述什么是蜜罐?如何分辨一个系统是不是蜜罐.
  10. C++实现十进制数向十六进制数转化