`
yarafa
  • 浏览: 88651 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JBoss ESB学习笔记4——第三个ESB应用Hello World Notification

阅读更多

续上篇介绍了第二个ESB应用,本文介绍第三个ESB应用——Hello World Notification。

 

 

说明:本文及后续文章虽非百分百的原创,但毕竟包含本人的努力和付出,所以希望大家转载时务请注明出处:http://yarafa.iteye.com,谢谢合作。

 

 

1 概述
该实例主要演示了Notifier的使用,当ESB接收到来自客户端的消息后,自动向指定的地址发送通知,这里的地址可以是控制台,文件,消息队列或者消息主题。
在下面的例子中,需要定义两个消息队列,一个接收来自客户端的消息,第二个用作ESB内部Message通道。此外,还有一个消息主题,用于接收ESB发来的通知。

 

2 新建ESB工程
操作过程略。

 

3 ESB配置
3.1 创建消息队列和消息主题
如概述中所描述,这里将创建两个消息队列和一消息主题。在esbcontent文件夹下创建文件jbm-queue-service.xml用于配置消息队列,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<server>
	<mbean code="org.jboss.jms.server.destination.QueueService"
		name="jboss.esb.helloworld.destination:service=Queue,name=helloworldNofityEsb"
		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.helloworld.destination:service=Queue,name=helloworldNofityGw"
		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.TopicService"
		name="jboss.esb.helloworld.destination:service=Topic,name=helloworldTopic"
		xmbean-dd="xmdesc/Topic-xmbean.xml">
		<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer
		</depends>
		<attribute name="SecurityConfig">
			<security>
				<role name="guest" read="true" write="true" create="true" />
			</security>
		</attribute>
	</mbean>	
</server>

 

3.2 定义Provider
这里将定义一个JMS Provider,同时定义两个消息通道,一个用于监听客户端发来的消息,另一个用作ESB消息通道。内容如下:

<jms-provider connection-factory="ConnectionFactory" name="JBossMQ">
	<jms-bus busid="helloworldNotifyChanel">
		<jms-message-filter dest-name="queue/helloworldNofityGw"
			dest-type="QUEUE" />
	</jms-bus>
	<jms-bus busid="helloworldNotifyEsbChanel">
		<jms-message-filter dest-name="queue/helloworldNofityEsb"
			dest-type="QUEUE" />
	</jms-bus>
</jms-provider>

 

3.3 定义Service

<service category="HelloWorldNotify" description="Hello World
Notify" name="HelloWorldNotifyService">
	<listeners />
	<actions /
</service>

 

3.4 定义Listener
这里定义两个listener,分别用于监听客户端消息和ESB内部消息。其中,前者用于监听客户端消息,因此需要将其is-gateway属性设置为true。

<jms-listener busidref="helloworldNotifyChanel" is-gateway="true"
	name="helloWorldNotifier" />
<jms-listener busidref="helloworldNotifyEsbChanel"
	name="helloWorldNotifierEsb" />

 

3.5 配置Action

<actions mep="OneWay">
	<action class="org.jboss.soa.esb.actions.Notifier"
name="notificationAction">
		<property name="okMethod" value="notifyOK" />
		<property name="notification-details">
			<NotificationList type="ok">
				<target class="NotifyConsole" />
				<target class="NotifyFiles">
					<file
URI="file:///F:\Workspace\Eclipse-JEE\helloworldtopicnitify\test.txt" append="true" />
				</target>
				<target class="NotifyTopics">
					<topic jndiName="topic/helloworldTopic" />
					</target>
			</NotificationList>
		</property>
	</action>
</actions>

配置说明:这里的action调用JBoss ESB提供的Notifier类来实现处理逻辑。这里的通知目的地有两个,一个是文件系统,另一个是消息主题topic/helloworldTopic。其中,对于文件系统通知,append属性表示是否在接收到来自客户端的消息后,将消息内容追加到文件的末尾。 

 

3.6 配置部署文件
部署依赖文件deployment.xml内容如下:

<jbossesb-deployment>
	<depends>jboss.esb.helloworld.destination:service=Queue,name=helloworldNofityGw
	</depends>
	<depends>jboss.esb.helloworld.destination:service=Topic,name=helloworldTopic
	</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.HelloWorldNotifyClient.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.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;

/**
 * <p>Class Name: HelloWorldNotifyClient</p>
 * <p>Description: </p>
 * @author Afa
 * @date 2010-9-9
 * @version 1.0
 */
public class HelloWorldNotifyClient
{
	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/helloworldRequest");
		queue = (Queue) context.lookup("queue/helloworldNofityGw");
		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(String text) throws Exception
	{
		QueueSender sender = session.createSender(queue);
		ObjectMessage message = session.createObjectMessage(text);
		sender.send(message);
		sender.close();
	}
	
	public static void main(String[] args) throws Exception
	{
		HelloWorldNotifyClient client = new HelloWorldNotifyClient();
		client.setupConnection();
		client.sendAMessage("Llu, miss you, notify, afa");
		client.stop();
	}
}

 

4.3 接收消息的客户端

/***********************************************************************
 * <p>Project Name: helloworldclient</p>
 * <p>File Name: com.thu.afa.esb.jbossesb.client.HelloWorldNotifyReceiverClient.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.Message;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import javax.naming.Context;
import javax.naming.InitialContext;

/**
 * <p>Class Name: HelloWorldNotifyReceiverClient</p>
 * <p>Description: </p>
 * @author Afa
 * @date 2010-9-9
 * @version 1.0
 */
public class HelloWorldNotifyReceiverClient
{
	private TopicConnection connection;
	private TopicSession session;
	private Topic topic;
	private TopicConnectionFactory factory;
	
	public void setup() 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://localhost:1099");
		InitialContext context = new InitialContext(properties);
		
		factory = (TopicConnectionFactory) context.lookup("ConnectionFactory");
		topic = (Topic) context.lookup("topic/helloworldTopic");
		connection = factory.createTopicConnection("guest", "guest");
		connection.setClientID("clientid");
		session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
		connection.start();
	}
	
	public void receiveMessage() throws Exception
	{
		TopicSubscriber subscriber = session.createSubscriber(topic);
		Message message = subscriber.receive();
		if(message instanceof TextMessage)
		{
			TextMessage textMessage = (TextMessage) message;
			System.out.println("Notification Infomation: " + textMessage.getText());
		}
		
		subscriber.close();
	}

	public void stop() throws Exception
	{
		if(connection != null) connection.stop();
		if(session != null) session.close();
		if(connection != null) connection.close();
	}
	
	/**
	 * <p>Title: </p>
	 * <p>Method Name: main</p>
	 * <p>Description: </p>
	 * @author: Afa
	 * @date: 2010-9-9
	 * @param args
	 */
	public static void main(String[] args) throws Exception
	{
		HelloWorldNotifyReceiverClient client = new HelloWorldNotifyReceiverClient();
		client.setup();
		client.receiveMessage();
		client.stop();
	}
}

 

首先运行接收消息的客户端,然后运行发送消息的客户端,即可在F:\Workspace\Eclipse-JEE\helloworldtopicnitify\test.txt文件中看到客户端发来的消息内容。另一方面,由于已经运行了接收消息的客户端,所以可以同时在该客户端的控制台看到通知信息,如下图所示,其中,文本文件中有三条来自客户端的消息(执行了三次发消息操作),这是在配置ESB时由append属性指定的。

JBoss ESB

JBoss ESB

 

 

上述便是ESB第三个应用实例。如有问题,欢迎指正。

 

 

-----------------------------------------------------
Stay Hungry, Stay Foolish!
http://yarafa.iteye.com
Afa
Jan 3rd, 2011
-----------------------------------------------------

分享到:
评论
5 楼 apollo211 2012-11-22  
本例子是建立在topic基础上的 topic默认不是durable的 所以要先运行接收端 然后发送 ,否则 如果先发送 默认的topic不做存储 订阅者如果不在线 就收不到消息了 而queue默认貌似是durable的 所以publisher和subscriber的运行顺序在queue时候无所谓 ,如有不对 请指教
4 楼 apollo211 2012-11-22  
有个疑问望解答 请问 为什么在本例子中的deployment.xml里面 不用定义 <depends>jboss.esb.helloworld.destination:service=Queue,name=helloworldEsb</depends> 
而上个例子中却要定义heloworldEsb ?
3 楼 hone033 2012-11-13  
运行顺序有区别
正如1楼说的一样
2 楼 yarafa 2011-08-30  
先运行或后运行没什么分别的
1 楼 hesihua 2011-08-12  
为什么这个例子是接收消息的客户端要先运行 ,而前一个例子的却不用呢

相关推荐

    JBOSS_Esb学习资料

    4. **Spring整合**:《JBoss_ESB学习笔记13——第十个ESB应用Spring_AOP.doc》和《JBoss_ESB学习笔记12——第十个ESB应用Spring_helloworld.doc》涉及到Spring框架与ESB的结合,Spring AOP(面向切面编程)在ESB中的...

    JBoss ESB 学习笔记

    #### 四、第三个ESB应用Hello World Notification - **重点**:学习如何使用Notification组件发送通知消息。 - **实现**:设置Notification组件,使其能够在特定事件发生时触发通知。 #### 五、第四个ESB应用Hello...

    JBossESB学习笔记(1-16全)

    JBossESB学习笔记 收集了网上1-16系列教程,笔记详细介绍了JBossESB各个组件的特性及配置文件的说明

    JBossESB学习笔记.rar_Jboss_ESB_esb和aop

    【JBoss ESB 学习笔记】 JBoss ESB(Enterprise Service Bus,企业服务总线)是Red Hat公司开发的一款开源服务导向架构(SOA)平台,它为分布式应用程序提供了集成和互操作性。本笔记将深入探讨JBoss ESB的核心概念...

    Jboss_ESB学习笔记

    【JBoss ESB学习笔记】 JBoss ESB(Enterprise Service Bus)是Red Hat公司开发的一款开源企业服务总线,它是企业级应用集成的核心组件,用于连接不同系统、服务和应用程序,实现服务之间的通信和交互。本学习笔记...

    JBoss ESB学习笔记1-搭建ESB开发环境.docx

    JBoss ESB(Enterprise Service Bus,企业服务总线)是Red Hat公司提供的一个开源中间件,用于构建服务导向架构(SOA)。它提供了一个平台,让不同系统和服务之间能够通过标准接口进行通信,实现了服务之间的解耦合...

    Jboss-ESB学习笔记.doc

    本篇学习笔记主要围绕 JBoss ESB 的一个基础应用——“Hello World File Action”进行讲解,这个例子展示了如何利用 JBoss ESB 的 File Gateway 功能来监控文件系统变化,并通过 JMS(Java Message Service)消息...

    jbossesb开发手册

    JBoss ESB(Enterprise Service Bus)是一款开源的企业服务总线解决方案,旨在为应用程序之间的通信提供一个灵活且可扩展的基础架构。本手册旨在帮助初学者理解JBoss ESB的基本概念、搭建开发环境以及进行简单的开发...

    JBoss ESB新手指南

    总之,《JBoss ESB新手指南》这本书将带领读者逐步了解和掌握这个强大的中间件平台,从基础概念到实战技巧,全面解析JBoss ESB在企业级集成中的应用。通过深入学习,新手可以快速成长为能够熟练运用JBoss ESB解决...

    JbossESB4.6 程序开发

    在构建基于JBoss ESB 4.6的应用程序时,SOA(面向服务的架构)平台配置是至关重要的第一步。正确的配置能够确保服务之间高效稳定地交互。 - **环境搭建**:安装必要的软件包,如Java环境、JBoss ESB等,并进行版本...

    jboss esb 实例

    jboss esb 实例及讲解,我收集的资料整理做成书

    JbossESB开发环境配置.docx

    JBoss ESB 4.9需要一个特定的服务器环境,你可以从官方网站下载D:\jboss-5.1.0.GA/jbossesb-server,这是一个包含大量示例的独立运行版本。这些示例可以通过Ant脚本进行部署和测试: - 使用`ant deploy`命令来部署...

    Jboss ESB简介及开发实例

    一、Jboss ESB的简介 1、 什么是ESB。 ESB的全称是Enterprise Service Bus,即企业服务总线。ESB是过去消息中间件的发展,ESB采用了“总线”这样一种模式来管理和简化应用之间的集成拓扑结构,以广为接受的开放...

    JBoss ESB 例子

    JBoss ESB 入门例子。主要是一个Server和一个Client。

    JBOSS ESB程序员指南

    5. 第三章 什么时候使用JBossESB 18 5.1. 介绍 18 6. 第四章 JBossESB 21 6.1. Rosetta 21 6.2. JBossESB的核心 22 6.3. JBossESB的组件 23 6.4. 配置 23 6.5. 消息存储 24 6.6. ESB-aware和ESB-unaware用户 25 6.7....

    ESB应用Hello_World_File_Action

    【ESB应用Hello_World_File_Action】是关于JBoss ESB的一个示例教程,主要讲解如何利用JBoss ESB的File Gateway功能来监控文件系统的变化,并通过JMS消息队列进行处理。在这个应用中,当指定目录下的特定扩展名文件...

    ESB应用Hello_World

    Hello_World应用作为初学者的入门案例,不仅能够帮助理解JBoss ESB的开发环境搭建,还能揭示如何创建和运行一个基本的ESB工程。 #### 二、创建ESB工程 创建ESB工程是启动任何JBoss ESB项目的首要步骤。这涉及到...

    JBOSSESB学习小结

    NULL 博文链接:https://siye1982.iteye.com/blog/592400

Global site tag (gtag.js) - Google Analytics