- 浏览: 88650 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
518ts520:
03:07:24,852 INFO [ServiceInvo ...
JBoss ESB学习笔记16——第十五个ESB应用Web Service Consumer 1 -
dy.f:
你理解错误了,selector="type='fro ...
JBoss ESB学习笔记5——第四个ESB应用Hello World File Action -
xiaoshalou_2002:
错误贴上 。Exception in thread &q ...
JBoss ESB学习笔记12——第十一个ESB应用Spring Hello World -
xiaoshalou_2002:
我这边16个例子中的客户端运行都出错,是少了 ...
JBoss ESB学习笔记12——第十一个ESB应用Spring Hello World -
qianyang:
ligenhang 写道我部署也报java.lang.Runt ...
JBoss ESB学习笔记2——第一个ESB应用Hello World
续上篇介绍了第八个ESB应用,本文介绍第九个ESB应用——JMS Topic。
说明:本文及后续文章虽非百分百的原创,但毕竟包含本人的努力和付出,所以希望大家转载时务请注明出处:http://yarafa.iteye.com,谢谢合作。
1 概述
本实例主要演示了如何配置ESB服务使其从JMS消息主题中获取消息。本实例的主要操作过程是配置了两个ESB服务从JMS消息主题获取消息,并同时将接收到的消息转发给另一个ESB服务进行处理。
2 新建ESB工程
操作过程略。
3 ESB配置
3.1 创建消息队列和消息主题
<?xml version="1.0" encoding="UTF-8"?> <server> <mbean code="org.jboss.jms.server.destination.TopicService" name="jboss.messaging.destination:service=Topic,name=jmstopicTopic" xmbean-dd="xmdesc/Topic-xmbean.xml"> <depends optional-attribute-name="ServerPeer"> jboss.messaging:service=ServerPeer</depends> <depends>jboss.messaging:service=PostOffice</depends> </mbean> <mbean code="org.jboss.jms.server.destination.QueueService" name="jboss.esb.quickstart.destination:service=Queue,name=jmstopicQueue1" xmbean-dd="xmdesc/Queue-xmbean.xml"> <depends optional-attribute-name="ServerPeer"> jboss.messaging:service=ServerPeer</depends> <depends>jboss.messaging:service=PostOffice</depends> </mbean> <mbean code="org.jboss.jms.server.destination.QueueService" name="jboss.esb.quickstart.destination:service=Queue,name=jmstopicQueue2" xmbean-dd="xmdesc/Queue-xmbean.xml"> <depends optional-attribute-name="ServerPeer"> jboss.messaging:service=ServerPeer</depends> <depends>jboss.messaging:service=PostOffice</depends> </mbean> <mbean code="org.jboss.jms.server.destination.QueueService" name="jboss.esb.quickstart.destination:service=Queue,name=jmstopicQueueResponseGw" xmbean-dd="xmdesc/Queue-xmbean.xml"> <depends optional-attribute-name="ServerPeer"> jboss.messaging:service=ServerPeer</depends> <depends>jboss.messaging:service=PostOffice</depends> </mbean> <mbean code="org.jboss.jms.server.destination.QueueService" name="jboss.esb.quickstart.destination:service=Queue,name=jmstopicQueueResponseEsb" xmbean-dd="xmdesc/Queue-xmbean.xml"> <depends optional-attribute-name="ServerPeer"> jboss.messaging:service=ServerPeer</depends> <depends>jboss.messaging:service=PostOffice</depends> </mbean> </server>
配置说明:这里需要配置一个消息主题用于接收客户端发来的消息。
3.2 定义Provider
这里将定义一个JMS Provider,并定义5个消息通道,内容如下:
<jms-provider connection-factory="ConnectionFactory" name="JMS"> <jms-bus busid="jmstopicTopic"> <jms-message-filter dest-name="topic/jmstopicTopic" dest-type="TOPIC" /> </jms-bus> <jms-bus busid="jmstopicQueue1"> <jms-message-filter dest-name="queue/jmstopicQueue1" dest-type="QUEUE" /> </jms-bus> <jms-bus busid="jmstopicQueue2"> <jms-message-filter dest-name="queue/jmstopicQueue2" dest-type="QUEUE" /> </jms-bus> <jms-bus busid="jmstopicQueueResponseGw"> <jms-message-filter dest-name="queue/jmstopicQueueResponseGw" dest-type="QUEUE" /> </jms-bus> <jms-bus busid="jmstopicQueueResponseEsb"> <jms-message-filter dest-type="QUEUE" dest-name="queue/jmstopicQueueResponseEsb" /> </jms-bus> </jms-provider>
3.3 定义Action类
3.3.1 MessageAugmentor
该类是第一个服务和第二个服务的处理类,该类在实例化时,从各自服务配置信息中获取第三个服务的类别和名称,然后创建第三个服务的实例。当接收到消息后,设置消息“addition”属性的值,同时将消息转发到第三个服务进行处理。
/*********************************************************************** * <p>Project Name: jmstopic</p> * <p>File Name: com.thu.afa.esb.jbossesb.action.MessageAugmentor.java</p> * <p>Copyright: Copyright (c) 2010</p> * <p>Company: <a href="http://afa.thu.com">http://afa.thu.com</a></p> ***********************************************************************/ package com.thu.afa.esb.jbossesb.action; import org.jboss.soa.esb.ConfigurationException; import org.jboss.soa.esb.Service; import org.jboss.soa.esb.actions.AbstractActionLifecycle; import org.jboss.soa.esb.client.ServiceInvoker; import org.jboss.soa.esb.helpers.ConfigTree; import org.jboss.soa.esb.message.Message; /** * <p>Class Name: MessageAugmentor</p> * <p>Description: </p> * @author Afa * @date 2010-9-13 * @version 1.0 */ public class MessageAugmentor extends AbstractActionLifecycle { private String addition; private Service targetService; public MessageAugmentor(ConfigTree configTree) throws Exception { addition = configTree.getRequiredAttribute("addition"); String target = configTree.getRequiredAttribute("target"); String[] targetTokens = target.split(":"); if(targetTokens.length != 2) { throw new ConfigurationException("Action not configured properly - 'target' service property must be in format 'category:name'."); } targetService = new Service(targetTokens[0], targetTokens[1]); } public Message process(Message message) throws Exception { message.getProperties().setProperty("addition", addition); System.out.println("Received message on Topic. Sending '" + addition + "' to " + targetService); try { getInvoker().deliverAsync(message); } catch (Exception e) { throw new Exception("Failed to deliver message: " + e.getMessage()); } return message; } private ServiceInvoker getInvoker() throws Exception { try { return new ServiceInvoker(targetService); } catch (Exception e) { throw new Exception("Failed to create ServiceInvoker: " + e.getMessage()); } } }
3.3.2 TargetServiceAction
第三个服务的处理类,当第三个服务接收到消息后,将消息中“addition”属性打印出来,以验证消息的来源是第一个服务还是第二个服务。
/*********************************************************************** * <p>Project Name: jmstopic</p> * <p>File Name: com.thu.afa.esb.jbossesb.action.TargetServiceAction.java</p> * <p>Copyright: Copyright (c) 2010</p> * <p>Company: <a href="http://afa.thu.com">http://afa.thu.com</a></p> ***********************************************************************/ package com.thu.afa.esb.jbossesb.action; import org.jboss.soa.esb.actions.AbstractActionLifecycle; import org.jboss.soa.esb.helpers.ConfigTree; import org.jboss.soa.esb.message.Message; /** * <p>Class Name: TargetServiceAction</p> * <p>Description: </p> * @author Afa * @date 2010-9-13 * @version 1.0 */ public class TargetServiceAction extends AbstractActionLifecycle { protected ConfigTree configTree; public TargetServiceAction(ConfigTree configTree) { this.configTree = configTree; } public Message process(Message message) throws Exception { String addition = (String) message.getProperties().getProperty("addition"); System.out.println("MyService3 Received message: '" + addition + "'"); return message; } }
3.4 定义第一个Service
第一个Service监听消息主题,在接收到消息后,将消息转发给第三个Service。
<service category="JmsTopic" description="Jms Topic" name="JmsTopicService1"> <listeners> <jms-listener busidref="jmstopicTopic" is-gateway="true" name="JmsGwListener" /> <jms-listener busidref="jmstopicQueue1" name="JmsEsbListener" /> /listeners> <actions mep="OneWay"> <action name="augmentor" process="process" class="com.thu.afa.esb.jbossesb.action.MessageAugmentor"> <property name="addition" value="Service1-Received" /> <property name="target" value="JmsTopic:JmsTopicService3" /> </action> </actions> </service>
3.5定义第二个Service
第二个Service监听消息主题,在接收到消息后,将消息转发给第三个Service。与第一个服务一样监听同一个消息主题的消息。
<service category="JmsTopic" description="Jms Topic" name="JmsTopicService2"> <listeners> <jms-listener busidref="jmstopicTopic" is-gateway="true" name="JmsGwListener" /> <jms-listener busidref="jmstopicQueue1" name="JmsEsbListener" /> /listeners> <actions mep="OneWay"> <action name="augmentor" process="process" class="com.thu.afa.esb.jbossesb.action.MessageAugmentor"> <property name="addition" value="Service2-Received" /> <property name="target" value="JmsTopic:JmsTopicService3" /> </action> </actions> </service>
3.6 定义第三个Service
第三个Service接收并处理由前两个Service转发来的消息。
<service category="JmsTopic" description="Jms Topic" name="JmsTopicService3"> <listeners> <jms-listener busidref="jmstopicQueueResponseGw" is-gateway="true" name="JmsGwListener" /> <jms-listener busidref="jmstopicQueueResponseEsb" name="JmsEsbListener" /> </listeners> <actions mep="OneWay"> <action name="targetAction" class="com.thu.afa.esb.jbossesb.action.TargetServiceAction"/> </actions> </service>
3.6 配置部署文件
部署依赖文件deployment.xml内容如下:
<jbossesb-deployment> <depends>jboss.messaging.destination:service=Topic,name=jmstopicTopic </depends> <depends>jboss.esb.quickstart.destination:service=Queue,name=jmstopicQueue1 </depends> <depends>jboss.esb.quickstart.destination:service=Queue,name=jmstopicQueue2 </depends> <depends>jboss.esb.quickstart.destination:service=Queue,name=jmstopicQueueResponseGw </depends> <depends>jboss.esb.quickstart.destination:service=Queue,name=jmstopicQueueResponseEsb </depends> </jbossesb-deployment>
3.7 部署ESB
将整个工程导出成一个ESB文件,并保存至JBoss ESB Server的部署目录下,启动JBoss ESB Server即可。
4 ESB客户端
4.1 新建Java工程
这里略去操作过程以及添加所需要的Jar包,具体操作过程可参考第一个ESB实例说明。
4.2 发送消息的客户端
该客户端仅仅是向消息主题发送消息,以验证ESB服务之间的互操作。
/*********************************************************************** * <p>Project Name: helloworldclient</p> * <p>File Name: com.thu.afa.esb.jbossesb.client.JmsTopicClient.java</p> * <p>Copyright: Copyright (c) 2010</p> * <p>Company: <a href="http://afa.thu.com">http://afa.thu.com</a></p> ***********************************************************************/ package com.thu.afa.esb.jbossesb.client; import java.util.Properties; import javax.jms.ObjectMessage; import javax.jms.Topic; import javax.jms.TopicConnection; import javax.jms.TopicConnectionFactory; import javax.jms.TopicPublisher; import javax.jms.TopicSession; import javax.naming.Context; import javax.naming.InitialContext; /** * <p>Class Name: JmsTopicClient</p> * <p>Description: </p> * @author Afa * @date 2010-9-13 * @version 1.0 */ public class JmsTopicClient { private TopicConnectionFactory factory; private TopicSession session; private Topic topic; private TopicConnection connection; public void setupConnection() throws Exception { Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); properties.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); properties.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099"); InitialContext context = new InitialContext(properties); factory = (TopicConnectionFactory) context.lookup("ConnectionFactory"); topic = (Topic) context.lookup("topic/jmstopicTopic"); } public void stop() throws Exception { if(connection != null) connection.stop(); if(session != null) session.close(); if(connection != null) connection.close(); } public void sendAMessage(String text) throws Exception { connection = factory.createTopicConnection(); session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE); TopicPublisher publisher = session.createPublisher(topic); ObjectMessage message = session.createObjectMessage(text); publisher.publish(message); } /** * <p>Title: </p> * <p>Method Name: main</p> * <p>Description: </p> * @author: Afa * @date: 2010-9-13 * @param args */ public static void main(String[] args) throws Exception { JmsTopicClient client = new JmsTopicClient(); client.setupConnection(); client.sendAMessage("Llu, miss you, afa - jms topic"); client.stop(); } }
运行客户端程序即可看到以下输出结果:
-----------------------------------------------------
Stay Hungry, Stay Foolish!
http://yarafa.iteye.com
Afa
Mar 26th, 2011
-----------------------------------------------------
评论
name="JmsEsbListener" />
busidref应该设置为"jmstopicQueue2"
否则 先前定义的jmstopicQueue2没有意义
先前一共定义了5个消息通道
jmstopicTopic消息主题被service1和service2 共同监听着 作为gateway
jmstopicQueue jmstopicQueue2分别作为service1和 service2的内部esb
jmstopicQueueResponseGw jmstopicQueueResponseEsb是service3的外部和内部esb
总共5个
发表评论
-
JBoss ESB学习笔记16——第十五个ESB应用Web Service Consumer 1
2011-04-15 21:06 3259续上篇介绍了第十四个ESB应用,本文介绍第十五个ESB应用—— ... -
JBoss ESB学习笔记15——第十四个ESB应用Transform XML to POJO
2011-04-12 13:09 2068续上篇介绍了第十三个ESB应用,本文介绍第十四个ESB应用—— ... -
JBoss ESB学习笔记14——第十三个ESB应用Transform CSV to XML
2011-04-09 13:12 1989续上篇介绍了第十二个ESB应用,本文介绍第十三个ESB应用—— ... -
JBoss ESB学习笔记13——第十二个ESB应用Spring AOP
2011-04-03 11:42 1607续上篇介绍了第十一个ESB应用,本文介绍第十二个ESB应用—— ... -
JBoss ESB学习笔记12——第十一个ESB应用Spring Hello World
2011-04-01 15:27 2343续上篇介绍了第十个ESB应用,本文介绍第十一个ESB应用——S ... -
JBoss ESB学习笔记11——第十个ESB应用Message Filters
2011-03-29 20:35 1964续上篇介绍了第九个ESB应用,本文介绍第十个ESB应用——Me ... -
JBoss ESB学习笔记9——第八个ESB应用JMS Router
2011-03-11 21:16 2554续上篇介绍了第七个ESB应用,本文介绍第八个ESB应用——JM ... -
JBoss ESB学习笔记8——第七个ESB应用Https Gateway
2011-03-05 11:29 2533续上篇介绍了第六个ESB应用,本文介绍第七个ESB应用——Ht ... -
JBoss ESB学习笔记7——第六个ESB应用Http Gateway
2011-02-26 10:45 3471续上篇介绍了第五个ESB应用,本文介绍第六个ESB应用——Ht ... -
JBoss ESB学习笔记6——第五个ESB应用Custom Action
2011-01-15 10:34 2261续上篇介绍了第四个ESB应用,本文介绍第五个ESB应用——Cu ... -
JBoss ESB学习笔记5——第四个ESB应用Hello World File Action
2011-01-08 11:23 2632续上篇介绍了第三个ESB应用,本文介绍第四个ESB应用——He ... -
JBoss ESB学习笔记4——第三个ESB应用Hello World Notification
2011-01-03 15:01 3029续上篇介绍了第二个ESB应用,本文介绍第三个ESB应用——He ... -
JBoss ESB学习笔记3——第二个ESB应用Hello World Action
2010-12-21 22:20 3821续上篇介绍了第一个ESB应用,本文介绍第二个ESB应用——He ... -
JBoss ESB学习笔记2——第一个ESB应用Hello World
2010-12-13 20:34 6558续上文搭建好开发环境后就可以开发ESB应用了。本文介绍第一个E ... -
JBoss ESB学习笔记1——搭建ESB开发环境
2010-12-12 13:55 7762最近由于工作需要用到 ...
相关推荐
7. **JMS路由**:《JBoss_ESB学习笔记9——第八个ESB应用JMS_Router.doc》和《JBoss_ESB学习笔记10——第九个ESB应用JMS_Topic.doc》涉及到了JMS(Java Message Service)在ESB中的应用,讲解了如何利用ESB进行消息...
#### 十、第九个ESB应用JMS Topic - **重点**:使用JMS Topic组件实现发布订阅模式的消息传播。 - **实现**:创建Topic并配置多个订阅者,测试消息的发布与接收机制。 #### 十一、第十个ESB应用Message Filters -...
JBossESB学习笔记 收集了网上1-16系列教程,笔记详细介绍了JBossESB各个组件的特性及配置文件的说明
【JBoss ESB 学习笔记】 JBoss ESB(Enterprise Service Bus,企业服务总线)是Red Hat公司开发的一款开源服务导向架构(SOA)平台,它为分布式应用程序提供了集成和互操作性。本笔记将深入探讨JBoss ESB的核心概念...
【JBoss ESB学习笔记】 JBoss ESB(Enterprise Service Bus)是Red Hat公司开发的一款开源企业服务总线,它是企业级应用集成的核心组件,用于连接不同系统、服务和应用程序,实现服务之间的通信和交互。本学习笔记...
JBoss ESB(Enterprise Service Bus,企业服务总线)是Red Hat公司提供的一个开源中间件,用于构建服务导向架构(SOA)。它提供了一个平台,让不同系统和服务之间能够通过标准接口进行通信,实现了服务之间的解耦合...
JBoss ESB(Enterprise Service Bus)是一款开源的企业服务总线解决方案,旨在为应用程序之间的通信提供一个灵活且可扩展的基础架构。本手册旨在帮助初学者理解JBoss ESB的基本概念、搭建开发环境以及进行简单的开发...
总之,《JBoss ESB新手指南》这本书将带领读者逐步了解和掌握这个强大的中间件平台,从基础概念到实战技巧,全面解析JBoss ESB在企业级集成中的应用。通过深入学习,新手可以快速成长为能够熟练运用JBoss ESB解决...
本篇学习笔记主要围绕 JBoss ESB 的一个基础应用——“Hello World File Action”进行讲解,这个例子展示了如何利用 JBoss ESB 的 File Gateway 功能来监控文件系统变化,并通过 JMS(Java Message Service)消息...
在构建基于JBoss ESB 4.6的应用程序时,SOA(面向服务的架构)平台配置是至关重要的第一步。正确的配置能够确保服务之间高效稳定地交互。 - **环境搭建**:安装必要的软件包,如Java环境、JBoss ESB等,并进行版本...
### ESB应用JMS_Topic知识点详解 #### 一、ESB与JMS_Topic简介 **企业服务总线(Enterprise ...总之,JMS Topic为JBoss ESB中的消息传递提供了一个强大的基础,使得开发人员能够构建高度可扩展和灵活的应用程序。
jboss esb 实例及讲解,我收集的资料整理做成书
JBoss ESB 4.9需要一个特定的服务器环境,你可以从官方网站下载D:\jboss-5.1.0.GA/jbossesb-server,这是一个包含大量示例的独立运行版本。这些示例可以通过Ant脚本进行部署和测试: - 使用`ant deploy`命令来部署...
一、Jboss ESB的简介 1、 什么是ESB。 ESB的全称是Enterprise Service Bus,即企业服务总线。ESB是过去消息中间件的发展,ESB采用了“总线”这样一种模式来管理和简化应用之间的集成拓扑结构,以广为接受的开放...
11. 第九章 服务日程安排 54 11.1. 介绍 54 11.2. 简单日程表 54 11.3. Cron日程表 54 11.4. 日程监听器 55 11.5. 配置举例 55 11.6. Quartz日程调度器的属性配置 56 12. 第十章 配置 57 12.1. 概述 57 12.2. 提供者...
JBoss ESB 入门例子。主要是一个Server和一个Client。
NULL 博文链接:https://siye1982.iteye.com/blog/592400
JBoss ESB(Enterprise Service Bus)是JBoss中间件项目的一个重要组成部分,主要功能在于提供一个灵活、可扩展的平台,用于构建和部署企业级集成解决方案。它支持多种消息传输协议和数据格式,能够处理复杂的消息流...