- 浏览: 89173 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
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应用——Message Filters。
说明:本文及后续文章虽非百分百的原创,但毕竟包含本人的努力和付出,所以希望大家转载时务请注明出处:http://yarafa.iteye.com,谢谢合作。
1 概述
本实例主要演示了如何设置基于内容的过滤器。这里通过客户端发送Order对象到ESB,在处理消息之前,过滤器将根据Order对象的quantity属性进行过滤,当该属性的值大于10时,消息将被传送到NextService服务进行处理,否则,该消息将会被过滤掉不做任何处理。
2 新建ESB工程
操作过程略。
3 ESB配置
3.1 创建消息队列和消息主题
<?xml version="1.0" encoding="UTF-8"?> <server> <mbean code="org.jboss.jms.server.destination.QueueService" name="jboss.esb.quickstart.destination:service=Queue,name=messagefilterRequestEsb" 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=messagefilterRequestGw" 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=messagefilterNextRequestEsb" 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,并定义3个消息通道,内容如下:
<jms-provider connection-factory="ConnectionFactory" name="JBossMessaging"> <jms-bus busid="gwChanel"> <jms-message-filter dest-name="queue/messagefilterRequestGw" dest-type="QUEUE" /> </jms-bus> <jms-bus busid="esbChanel"> <jms-message-filter dest-name="queue/messagefilterRequestEsb" dest-type="QUEUE" /> </jms-bus> <jms-bus busid="nextEsbChanel"> <jms-message-filter dest-type="QUEUE" dest-name="queue/messagefilterNextRequestEsb" /> </jms-bus> </jms-provider>
3.3 定义第一个Service
<service category="MessageFilter" description="Message Filter" name="MessageFilterService"> <listeners /> <actions mep="OneWay"> <action /> </actions> </service>
3.3.1 定义Listener
<listeners> <jms-listener busidref="gwChanel" is-gateway="true" name="gwListener" /> <jms-listener busidref="esbChanel" name="esbListener" /> </listeners>
3.3.2 定义Action
<actions mep="OneWay"> <action class="org.jboss.soa.esb.actions.MessageFilter" name="MessageFilter"> <property name="ruleSet" value="FilterRules.drl" /> <property name="ruleReload" value="true" /> <property name="destinations"> <route-to destination-name="DemoDestination" service-category="Test" service-name="NextService" /> </property> <property name="object-paths"> <object-path esb="body.'org.jboss.soa.esb.message.defaultEntry'" /> </property> </action> </actions>
配置说明:这里定义了一个消息过滤器,过滤规则在文件FilterRules.drl中进行定义。当满足规则的消息到来时,将会通过过滤器而被传送到NextService服务进行处理,否则,消息将会被直接过滤掉而不做任何处理。
3.3.3 定义过滤规则
在src目录下创建FilterRules.drl文件,并定义如下规则脚本:
#created on: Oct 30, 2006 package com.jboss.soa.esb.routing.cbr #list any import classes here. import org.jboss.soa.esb.message.Message; import org.jboss.soa.esb.message.format.MessageType; import com.thu.afa.esb.jbossesb.client.bean.Order; #declare any global variables here global java.util.List destinations; rule "Pricing Rule - over threshold" when m : Message () order : Order( quantity >= 10) then System.out.println(order.getQuantity() + " Makes the threshold"); #we can modify the object order.setDiscount(10); #demonstrate that we can add a new object to the message m.getBody().add("DiscountObject","10%"); destinations.add("DemoDestination"); end rule "Pricing Rule - under threshold" #adding this for debug output, the important part is to *NOT* set a destination when m : Message () order : Order( quantity < 10) then System.out.println(order.getQuantity() + " Does not make the threshold"); order.setDiscount(0); end
3.3.4 定义Order类
package com.thu.afa.esb.jbossesb.client.bean; import java.io.Serializable; import java.math.BigDecimal; public class Order implements Serializable { private static final long serialVersionUID = 1L; private int quantity; private BigDecimal unitPrice; private double discount; private BigDecimal totalPrice; // setters and getters }
3.5 定义第二个Service
<service category="Test" description="Demo Destination" name="NextService"> <listeners> <jms-listener busidref="nextEsbChanel" name="esbChanel" /> </listeners> <actions mep="OneWay"> <action class="org.jboss.soa.esb.actions.Notifier" name="notificationAction"> <property name="okMethod" value="notifyOK" /> <property name="destinations"> <NotificationList type="OK"> <target class="NotifyConsole" /> </NotificationList> </property> </action> </actions> </service>
3.6 配置部署文件
部署依赖文件deployment.xml内容如下:
<jbossesb-deployment> <depends>jboss.esb:deployment=jbrules.esb</depends> <depends>jboss.esb.quickstart.destination:service=Queue,name=messagefilterRequestEsb </depends> <depends>jboss.esb.quickstart.destination:service=Queue,name=messagefilterRequestGw </depends> <depends>jboss.esb.quickstart.destination:service=Queue,name=messagefilterNextRequestEsb </depends> </jbossesb-deployment>
3.7 部署ESB
将整个工程导出成一个ESB文件,并保存至JBoss ESB Server的部署目录下,启动JBoss ESB Server即可
4 ESB客户端
4.1 新建Java工程
这里略去操作过程以及添加所需要的Jar包,具体操作过程可参考第一个ESB实例说明。
4.2 发送消息的客户端
/*********************************************************************** * <p>Project Name: helloworldclient</p> * <p>File Name: com.thu.afa.esb.jbossesb.client.MessageFilterClient.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.io.Serializable; import java.util.Properties; import javax.jms.ObjectMessage; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSender; import javax.jms.QueueSession; import javax.naming.Context; import javax.naming.InitialContext; import com.thu.afa.esb.jbossesb.client.bean.Order; /** * <p>Class Name: MessageFilterClient</p> * <p>Description: </p> * @author Afa * @date 2010-9-14 * @version 1.0 */ public class MessageFilterClient { private QueueConnection connection; private QueueSession session; private Queue queue; 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); QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("ConnectionFactory"); connection = factory.createQueueConnection(); queue = (Queue) context.lookup("queue/messagefilterRequestGw"); session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); connection.start(); System.out.println("Connection Started"); } public void stop() throws Exception { if(connection != null) connection.stop(); if(session != null) session.close(); if(connection != null) connection.close(); } public void sendAMessage(Serializable object) throws Exception { QueueSender sender = session.createSender(queue); ObjectMessage message = session.createObjectMessage(object); sender.send(message); sender.close(); } /** * <p>Title: </p> * <p>Method Name: main</p> * <p>Description: </p> * @author: Afa * @date: 2010-9-14 * @param args */ public static void main(String[] args) throws Exception { Order order = new Order(); order.setQuantity(5); MessageFilterClient client = new MessageFilterClient(); client.setupConnection(); client.sendAMessage(order); client.stop(); } }
运行客户端程序即可看到以下输出结果,下图是分别将quantity属性设置为15和5的输出结果。
4.3 注意事项
在客户端和服务端的classpath中都必须能找到Order类,其中,类名和包路径也都必须完全一致,而且需要与规则文件中的导入信息保持一致,否则,将会出现如下异常:
No ClassLoaders found for: com.thu.afa.esb.jbossesb.client.bean.Order
-----------------------------------------------------
Stay Hungry, Stay Foolish!
http://yarafa.iteye.com
Afa
Mar 29th, 2011
-----------------------------------------------------
发表评论
-
JBoss ESB学习笔记16——第十五个ESB应用Web Service Consumer 1
2011-04-15 21:06 3268续上篇介绍了第十四个ESB应用,本文介绍第十五个ESB应用—— ... -
JBoss ESB学习笔记15——第十四个ESB应用Transform XML to POJO
2011-04-12 13:09 2086续上篇介绍了第十三个ESB应用,本文介绍第十四个ESB应用—— ... -
JBoss ESB学习笔记14——第十三个ESB应用Transform CSV to XML
2011-04-09 13:12 2002续上篇介绍了第十二个ESB应用,本文介绍第十三个ESB应用—— ... -
JBoss ESB学习笔记13——第十二个ESB应用Spring AOP
2011-04-03 11:42 1623续上篇介绍了第十一个ESB应用,本文介绍第十二个ESB应用—— ... -
JBoss ESB学习笔记12——第十一个ESB应用Spring Hello World
2011-04-01 15:27 2361续上篇介绍了第十个ESB应用,本文介绍第十一个ESB应用——S ... -
JBoss ESB学习笔记10——第九个ESB应用JMS Topic
2011-03-26 21:14 2391续上篇介绍了第八个ESB应用,本文介绍第九个ESB应用——JM ... -
JBoss ESB学习笔记9——第八个ESB应用JMS Router
2011-03-11 21:16 2563续上篇介绍了第七个ESB应用,本文介绍第八个ESB应用——JM ... -
JBoss ESB学习笔记8——第七个ESB应用Https Gateway
2011-03-05 11:29 2546续上篇介绍了第六个ESB应用,本文介绍第七个ESB应用——Ht ... -
JBoss ESB学习笔记7——第六个ESB应用Http Gateway
2011-02-26 10:45 3486续上篇介绍了第五个ESB应用,本文介绍第六个ESB应用——Ht ... -
JBoss ESB学习笔记6——第五个ESB应用Custom Action
2011-01-15 10:34 2275续上篇介绍了第四个ESB应用,本文介绍第五个ESB应用——Cu ... -
JBoss ESB学习笔记5——第四个ESB应用Hello World File Action
2011-01-08 11:23 2645续上篇介绍了第三个ESB应用,本文介绍第四个ESB应用——He ... -
JBoss ESB学习笔记4——第三个ESB应用Hello World Notification
2011-01-03 15:01 3047续上篇介绍了第二个ESB应用,本文介绍第三个ESB应用——He ... -
JBoss ESB学习笔记3——第二个ESB应用Hello World Action
2010-12-21 22:20 3832续上篇介绍了第一个ESB应用,本文介绍第二个ESB应用——He ... -
JBoss ESB学习笔记2——第一个ESB应用Hello World
2010-12-13 20:34 6572续上文搭建好开发环境后就可以开发ESB应用了。本文介绍第一个E ... -
JBoss ESB学习笔记1——搭建ESB开发环境
2010-12-12 13:55 7784最近由于工作需要用到 ...
相关推荐
5. **消息过滤**:《JBoss_ESB学习笔记11——第十个ESB应用Message_Filters.doc》介绍了消息过滤器,它是控制服务间通信流程的重要工具,用于对传递的消息进行预处理或后处理,确保消息符合预期格式或满足特定条件。...
#### 十一、第十个ESB应用Message Filters - **重点**:探索如何使用Message Filters过滤消息。 - **实现**:配置Filter规则,筛选符合条件的消息进行处理。 #### 十二、第十一个ESB应用Spring Hello World - **...
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等,并进行版本...
jboss esb 实例及讲解,我收集的资料整理做成书
1. 目录 1. 目录 2 2. 关于本指南 5 2.1. 本指南包括什么 5 2.2. 读者 5 2.3. 必要知识 5 2.4. 本指南的组织结构 5 2.5. 关于本文档的协定 5 2.6. 附件 6 2.7. 我们的联系方式 6 ...13. 第十一章 术语表 67
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采用了“总线”这样一种模式来管理和简化应用之间的集成拓扑结构,以广为接受的开放...
JBoss ESB 入门例子。主要是一个Server和一个Client。
NULL 博文链接:https://siye1982.iteye.com/blog/592400
JBoss ESB(Enterprise Service Bus)是JBoss中间件项目的一个重要组成部分,主要功能在于提供一个灵活、可扩展的平台,用于构建和部署企业级集成解决方案。它支持多种消息传输协议和数据格式,能够处理复杂的消息流...
【搭建JBoss ESB开发环境】是初学者进入JBoss ESB世界的第一步,这个过程可能会遇到各种挑战,因为相关的教程和资源相对较少。JBoss ESB,全称为JBoss Enterprise Service Bus,是一款开源的企业服务总线,它允许...
在JBoss ESB(企业服务总线)中,Message Filters用于决定哪些消息应该被传递给特定的服务进行进一步处理,而哪些应该被忽略。这种功能在实现业务逻辑和数据过滤时非常有用,可以提高系统的效率和响应速度。 在提供...