`

mule in action翻译16 : 3.4 使用JMS传输

    博客分类:
  • ESB
阅读更多

mule in action翻译16 : 3.4  使用JMS传输

 

 

3.4  使用JMS传输

     HTTP的流行使web service成为一种“诱人”的应用集成方式。但HTTP并不是为应用集成而生的,它不能保证传输的时间、可靠性及安全性。WS-* 规范试图在这方面做出突破,但比较复杂,且只是限制在SOAP内使用。幸运的是JMS协议是在防火墙范围内的一个“令人注目”的选择。来看mule对JMS的支持。

 

    如果你用的java技术而且网络是完全受控的,那么使用JMS是个很好的选择,它是异步的可靠的、安全的而且速度非常快。它不限制运载的数据的类型,甚至你可以通过它在不同的JVM之间传输序列化的java对象。

 

   本节我们将探索MULE对JMS的支持,先看怎么从队列或话题收发消息。而后学习如何使用过滤器筛选接受和发送的JMS消息。最后看在endpoint如何使用JMS消息执行异步操作--一般是异步的方式。

 

  JMS传输可用来与队列或话题间进行JMS消息发送和接收--使用1.0.2b 或 1.1 版的JMS规范。Mule没有实现JMS服务器,所以你要联合使用一个如ActiveMQ或HornetQ的JMS实现来使用JMS传输。

 

   有时配置JMS代理还真是有点不好办。为了能很好的与JMS实现协同工作,

mule提供了大量的关于JMS 连接器和endpoint的配置选项。

表3.3 列出了其中一些:





  

 

 

3.4.1 使用JMS outbound endpoint 发送JMS消息

    现在使用JMS outbound endpoint向队列发送JMS消息。回顾列表3.3 中配置的接收Arnor Accounting 处理完支出报表的通知的流。这个流接收通知,并保存到一个文件。一种更真实的情况是,把消息发送到一个JMS topic ,其它的相关系统来订阅这个topic,这样一旦支出报表处理完毕相关系统就会接到通知。

如下列表展示(见图 3.11)

    Listing 3.14 Publish expense reports to a JMS topic

 

<注释1  配置 activemq-connector>
<jms:activemq-connector name="jmsConnector" specification="1.1" brokerURL="${jms.url}"/>
    <!--配置HTTP inbound endpoint-->
    <flow name="dispatchExpenseReports">
        <http:inbound-endpoint exchange-pattern="one-way"
                                           host="${http.host}"
                                           path="/expenses/status"
                                         method="POST"
                                           port="${http.port}"
                                  connector-ref="httpConnector"/>
    <!--注释3 发送JMS消息到话题-->
    <jms:outbound-endpoint topic="expenses.status"/>
</flow>

    



 

    JMS 代理配置上有少许不同。你需要显性的为代理配置连接器。注释1处,是使用一个外部的ActiveMQ 实例。代理的URL设置成了属性值${jms.url}。JMS的规范版本也在这里进行了声明。如果你想使用 1.0.2b规范,你只需简单的把 1.1 改为 1.0.2b即可。HTTP inbound endpoint配置在注释2处,这里没变。

JMS endpoint配置在注释3处。来自 inbound  endpoint的的字符串将以JMS TextMessage的形式发送到expenses.status 话题。

 

 

    JMS传输将根据源数据创建特定类型的JMS 消息。byte数组将转换为 BytesMessage,map转换为

MapMessage ,输入转换为StreamMessage,对象转换为ObjectMessage,String转换为TextMessage。

 

    向队列发送消息非常简单,你只需把 topic 属性改为 queue就行。如下所示:

 

<jms:outbound-endpoint queue="expenses.status"/>

 

 

    现在通过这个endpoint发送的消息将放到 一个叫做expenses.status的队列中。

 

   在endpoint指定JMS连接器   若你使用URI指定JMS目的地(如jms://expenses.status),

   你可以通过追加 ?connector-ref=connector-name来标示这个连接器。

   例如,前例中的outbound endpoint 的URI 将是:

   jms://expenses.status?connector=jmsConnector 。当对一个传输指定多个连接器时,

   这种语法是很有用的。

   

   

 3.4.2  使用JMS inbound endpoint接受JMS消息

 

 列表3.15 描述了你向其发布消息的话题(见前一个列表),这里会对处理完的支出报表 记录日志。

(见图3.12)

   Listing 3.15 Logging JMS messages published to a topic

<flow name="logExpenseReports">
    <!--注释1 接收expenses.status topic的消息 -->
    <jms:inbound-endpoint topic="expenses.status" exchange-pattern="one-way"/>
    <logger level="INFO" message="Expense Report Processed:
     #[org.mule.util.DateUtils.getTimeStamp('dd-MM-yy_HH-mm-ss.SSS')]"/>
</flow>

 


   inbound  endpoint 配置在注释1处。它将从话题expenses.status消费消息。

   日志消息处理器通过mule日志工具记录消息。第8章详解。

 

你可以在inbound endpoint进行话题订阅的持久化。通过配置连接器实现持久化,

如下:

<jms:activemq-connector name="jmsConnector" 
               specification="1.1"
                    brokerURL="tcp://mq.prancingdonkey.com:61616" 
                      durable="true" />

 

 

 

 

3.4.3  在JMS endpoint使用过滤器

   过滤器可以用在 JMS endpoint以筛选消费的消息。JMS inbound endpoint过滤器通过使用JMS选择器设施完成来完成。根据列表3.15 修改JMS inbound endpoint只接受2012年1月1日0点之后创建的通知。

 Listing 3.16 Using a JMS selector filter to choose the messages an endpoint receives 

<jms:inbound-endpoint topic="expenses.status">
<!--定义 JMS选择器-->
<jms:selector expression="JMSTimestamp &gt;1325376000000" />
</jms:inbound-endpoint>

 

你可以在任何头属性中这样使用JMS选择器。你可能好奇注释1处 使用的  &gt;  。

这是xml对 > 的转义。不正确转义 > 将会导致mule启动时的xml解析错误。

 

 

 

3.4.4 同步的使用 JMS 

    异步是JMS固有特性,经常在inbound endpoint使用 单向的消息交换方式--发出消息并不等待回应。

但有时你想等待一个消息的响应。这可通过设置inbound endpoint 的消息交换方式为 请求-响应式来完成。

 

下面通过调用 BrewServiceImpl的 getBrews()方法来展示,见下列表(见图3.13)

Listing 3.17 Synchronously invoke a component using JMS 

<flow name="brewJmsService">
    <!--使用 jms inbound endpoint代替 HTTP -->
    <jms:inbound-endpoint queue="brews.list"
               exchange-pattern="request-response"/>
    <component class="com.prancingdonkey.service.BrewServiceImpl"/>
    <mule-xml:object-to-xml-transformer />
</flow>

 

JMS inbound endpoin的请求-响应式的消息交换方式,说明会期待返回响应。为了实现这种方式,JMS传输将对响应数据创建一个临时的队列,并把JMS响应消息的Reply-To属性设置为队列名字。

 

 

 学会在Mule中使用JMS 在应用集成中是非常重要的。你只需要知道如何使用JMS endpoint向

 JMS 队列或话题发送和接受数据即可。

 

 

   

 

 

  • 大小: 70.1 KB
  • 大小: 20.6 KB
  • 大小: 58.2 KB
  • 大小: 53.6 KB
  • 大小: 57.5 KB
分享到:
评论

相关推荐

    Mule in Action, 2nd Edition

    Mule in Action, Second Edition is a totally-revised guide covering Mule 3 fundamentals and best practices. It starts with a quick ESB overview and then dives into rich examples covering core concepts ...

    Mule in action下载(英文版)

    Mule的JMS传输支持异步消息传递,通过JMS Inbound和Outbound Endpoint,实现消息队列的读取与发送。此外,Mule还提供了remoteSync功能,允许开发者在JMS环境中实现同步消息处理。 #### FTP文件传输 对于FTP协议的...

    mule in action 说明+文档介绍

    mule in action 和doc文档详细介绍 Mule的核心组件是UMO(Universal Message Objects,从Mule2.0开始UMO这一概念已经被组件Componse所代替),UMO实现整合逻辑。UMO可以是POJO,JavaBean等等。它支持30多种传输协议...

    mule in action

    《Mule in Action》是一本专注于Mule ESB(企业服务总线)的入门教程,旨在帮助读者系统地学习和理解这一强大的集成平台。Mule ESB是开源领域中的一个重量级选手,常用于构建灵活、可扩展的企业级集成解决方案。这...

    mule in action 第二版英文正式版

    ### Mule in Action 第二版 英文正式版 关键知识点概述 #### 一、书籍简介与背景 《Mule in Action》第二版是一本详细介绍Mule ESB(Enterprise Service Bus)这一著名开源框架的书籍。该书由David Dossot、John D...

    Mule in action

    《Mule in Action》这本书是关于Mule ESB(企业服务总线)的权威指南,由David Chappell和James Strachan等作者撰写。Mule ESB是一种开源的集成平台,它允许开发者轻松地连接各种系统、服务和应用程序,实现数据的...

    Mule in Action

    Mule in Action is acomprehensive tutorial designed for working Java developers. This authoritativebook explores the architecture and the main features of version Mule 2 throughnumerous running ...

    Mule in Action, Second Edition

    总体而言,Mule in Action, Second Edition这本书是关于Mule ESB使用和集成实践的权威指南,涵盖了从基础概念到高级特性的广泛主题。本书适合于那些希望深入学习和利用Mule ESB进行企业级应用集成的开发人员和架构师...

    mule in action 即mule实战源码

    《Mule in Action》是关于Mule ESB的实战指南,该书深入浅出地介绍了如何使用Mule这一强大的企业服务总线(ESB)进行应用程序集成。Mule ESB以其用户基数庞大、文档详尽以及社区活跃而备受赞誉,是企业级集成解决...

    Mule3.4入门学习

    本文将对Mule3.4进行入门学习,涵盖Mule环境搭建、Webservice的发布、JMS消息通信、ftp、File应用、协议转换等知识点。 一、Mule环境搭建 Mule环境的搭建需要JDK的支持,包括下载、安装、配置JDK。首先,需要下载...

    mule in action mule 实战

    Mule in Action是一本关于Mule ESB(企业服务总线)的实战指南,旨在为读者提供深入的实践知识和案例分析。ESB作为一种流行的中间件技术,用于实现不同系统之间的服务集成。Mule作为一个开源的ESB解决方案,通过其...

    Mule in Action 2014

    《Mule in Action》第二版是一本全面介绍如何使用Mule ESB进行高效集成开发的书籍,由David Dossot、John D’Emic和Victor Romero共同编写。 #### 二、Mule ESB的关键特性 **1. 消息处理:** Mule ESB支持多种消息...

    mule3.4对应应用部署到tomcat7相关步骤文档

    《Mule 3.4应用部署到Tomcat 7的详细步骤》 Mule ESB是一款功能强大的企业级服务总线,它允许开发者构建、集成和管理复杂的分布式应用程序。而Tomcat作为流行的Java Servlet容器,常被用作Mule应用的部署平台。本文...

    MuleESB部署文档

    * 文件传输:使用Mule的文件传输组件进行文件传输。 * 数据库集成:使用Mule的数据库集成组件进行数据库集成。 三、Mule发布 Mule提供了多种发布方式,包括: *andalone方式:使用Mule standalone方式部署Mule。 ...

    MULE IN ACTION

    MULE IN ACTION Mule是一个企业服务总线(ESB)消息框架,它为集成不同系统和应用程序提供了一种轻量级的、易于使用的方法。Mule的设计哲学围绕着灵活性和可扩展性,通过其高度可插拔的架构,支持多种传输协议和...

Global site tag (gtag.js) - Google Analytics