开发消息驱动bean(Queue/Topic)

 开发消息驱动bean(Queue/Topic)

 1.配置目标地址(cmcc-service.xml),Jboss使用一个XML文件配置队列地址,文件的取名格式应遵守*-service.xml

 2.编写服务器消息的发送者(QueueSender,TopicSender)

 3.编写客户端接收者(QueueMessageDriverBean,TopicMessageDriverBean1,TopicMessageDriverBean2)

 4.把QueueSender\TopicSender\QueueMessageDriverBean\TopicMessageDriverBean1\TopicMessageDriverBean2这几个java文件打成jar(MessageDriverBean.jar)包发布到jboss下,jboss-4.2.3.GA-jdk6\jboss-4.2.3.GA\server\default\deploy下

 

/*

QueueSender是PTP的发送者

TopicSender是pub/sub的发送者

QueueMessageDriverBean 是PTP的接收者,点对点(point-to-point,简称 PTP)

TopicMessageDriverBean1、TopicMessageDriverBean2是 pub/sub的接收者,发布/订阅(publish/subscribe,简称 pub/sub)

 

 

<attribute name="JNDIName">属性指定了该目标地址的全局JNDI名称。如果你不指定JNDIName属性,jboss会为你生成一个默认的全局JNDI,

其名称由“queue”+“/”+目标地址名称组成。另外在任何队列或主题被部署之前,应用服务器必须先部署Destination Manager Mbean

,所以我们通过<depends>节点声明这一依赖

*/

 cmcc-service.xml

<?xml version="1.0" encoding="UTF-8"?>

<server>  

<!--PTP-->

  <mbean code="org.jboss.mq.server.jmx.Queue"

         name="jboss.mq.destination:service=Queue,name=cmccQueue">

    <attribute name="JNDIName">queue/cmccQueue</attribute>   

    <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>

  </mbean>

<!--pub/sub-->

  <mbean code="org.jboss.mq.server.jmx.Topic"

         name="jboss.mq.destination:service=Topic,name=cmccTopic">

    <attribute name="JNDIName">topic/cmccTopic</attribute>   

    <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>

  </mbean>

 

 

</server>

 

QueueSender.java

 package cn.cmcc.app;

 

 

import javax.jms.Destination;

import javax.jms.MessageProducer;

import javax.jms.QueueConnection;

import javax.jms.QueueConnectionFactory;

import javax.jms.QueueSession;

import javax.jms.TextMessage;

import javax.naming.InitialContext;

 

 

 

 

public class QueueSender {

 

 

/**

* @param args

*/

public static void main(String[] args) {

 

try {

InitialContext ctx = new InitialContext();

//这个name到http://localhost:8080/jmx-console中的JMX MBean View选项中的list()方法--》Global JNDI Namespace下查找

QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("QueueConnectionFactory");

QueueConnection conn = factory.createQueueConnection();

QueueSession session = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);

//这个name就是cmcc-service.xml中的JNDIName节点配置的名字

Destination destination = (Destination ) ctx.lookup("queue/cmccQueue");

MessageProducer producer = session.createProducer(destination);

TextMessage msg = session.createTextMessage("您好,这是我的第一个消息驱动queue Bean");

producer.send(msg);

} catch (Exception e) {

 

e.printStackTrace();

}

 

}

 

}

 

 

 

TopicSender.java

package cn.cmcc.app;

 

 

import javax.jms.Destination;

import javax.jms.MessageProducer;

import javax.jms.TopicConnection;

import javax.jms.TopicConnectionFactory;

import javax.jms.TopicSession;

import javax.jms.TextMessage;

import javax.naming.InitialContext;

 

 

public class TopicSender {

 

 

/**

* @param args

*/

public static void main(String[] args) {

try {

InitialContext ctx = new InitialContext();

//这个name到http://localhost:8080/jmx-console中的JMX MBean View选项中的list()方法--》Global JNDI Namespace下查找

TopicConnectionFactory factory = (TopicConnectionFactory) ctx.lookup("TopicConnectionFactory");

TopicConnection conn = factory.createTopicConnection();

TopicSession session = conn.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);

//这个name就是cmcc-service.xml中的JNDIName节点配置的名字

Destination destination = (Destination ) ctx.lookup("topic/cmccTopic");

MessageProducer producer = session.createProducer(destination);

TextMessage msg = session.createTextMessage("您好,这是我的第一个消息驱动Topic Bean");

producer.send(msg);

} catch (Exception e) {

 

e.printStackTrace();

}

}

}

 

QueueMessageDriverBean.java

 

package cn.cmcc.message;

 

 

import javax.ejb.ActivationConfigProperty;

import javax.ejb.MessageDriven;

import javax.jms.JMSException;

import javax.jms.Message;

import javax.jms.MessageListener;

import javax.jms.TextMessage;

@MessageDriven(activationConfig =

{

  @ActivationConfigProperty(propertyName="destinationType",

    propertyValue="javax.jms.Queue"),

  @ActivationConfigProperty(propertyName="destination",

    propertyValue="queue/cmccQueue"), //这个propertyValue就是cmcc-service.xml中的JNDIName节点配置的名字

  @ActivationConfigProperty(propertyName="acknowledgeMode", 

    propertyValue="Auto-acknowledge")

})

 

 

public class QueueMessageDriverBean implements MessageListener {

 

 

@Override

public void onMessage(Message message) {

try {

TextMessage msg=(TextMessage)message;

System.out.println(msg.getText());

} catch (JMSException e) {

e.printStackTrace();

}

}

 

}

 

 

 

TopicMessageDriverBean1.java

package cn.cmcc.message;

 

 

import javax.ejb.ActivationConfigProperty;

import javax.ejb.MessageDriven;

import javax.jms.JMSException;

import javax.jms.Message;

import javax.jms.MessageListener;

import javax.jms.TextMessage;

@MessageDriven(activationConfig =

{

  @ActivationConfigProperty(propertyName="destinationType",

    propertyValue="javax.jms.Topic"),

  @ActivationConfigProperty(propertyName="destination",

    propertyValue="topic/cmccTopic"), //这个就是cmcc-service.xml中的JNDIName节点配置的名字

  @ActivationConfigProperty(propertyName="acknowledgeMode", 

    propertyValue="Auto-acknowledge")

})

 

 

public class TopicMessageDriverBean1 implements MessageListener {

 

 

@Override

public void onMessage(Message message) {

try {

TextMessage msg=(TextMessage)message;

System.out.println(msg.getText());

} catch (JMSException e) {

e.printStackTrace();

}

}

 

 

}

 

 

TopicMessageDriverBean2.java

package cn.cmcc.message;

 

 

import javax.ejb.ActivationConfigProperty;

import javax.ejb.MessageDriven;

import javax.jms.JMSException;

import javax.jms.Message;

import javax.jms.MessageListener;

import javax.jms.TextMessage;

@MessageDriven(activationConfig =

{

  @ActivationConfigProperty(propertyName="destinationType",

    propertyValue="javax.jms.Topic"),

  @ActivationConfigProperty(propertyName="destination",

 propertyValue="topic/cmccTopic"), //这个就是cmcc-service.xml中的JNDIName节点配置的名字

  @ActivationConfigProperty(propertyName="acknowledgeMode", 

    propertyValue="Auto-acknowledge")

})

 

 

public class TopicMessageDriverBean2 implements MessageListener {

 

 

@Override

public void onMessage(Message message) {

try {

TextMessage msg=(TextMessage)message;

System.out.println(msg.getText());

} catch (JMSException e) {

e.printStackTrace();

}

}

 

}

 

输出结果是

运行QueueSender: cn.cmcc.message.QueueMessageDriverBean您好,这是我的第一个消息驱动queue Bean

运行TopicSender: 

cn.cmcc.message.TopicMessageDriverBean1您好,这是我的第一个消息驱动Topic Bean

cn.cmcc.message.TopicMessageDriverBean2您好,这是我的第一个消息驱动Topic Bean

 

【系统分析师】2025年下半年真题:论文及解题思路 摘要 本文探讨软件测试技术的应用,重点关注静态测试与动态测试的比较。静态测试在不运行程序的情况下,通过审查、走查等方式分析需求、设计文档和代码,能早期发现高层次缺陷,降低修复成本。动态测试通过实际运行程序,使用单元测试、集成测试等方法验证功能性能,是发现运行时错误的唯一途径。二者在缺陷类型、介入阶段和修复成本上具有互补性,建议项目实践中结合使用以提升软件质量。 阅读详情

相关推荐

消息驱动Bean(Message Driven Bean

消息驱动Bean(MDB) 是设计用来专门处理基于消息请求的组件。一个MDB类必须实现MessageListener 接口。当容器检测到bean守候的队列一条消息时,就调用onMessage()方法,将消息作为参数传入。MDB在OnMessage()中决定如何处理该消息。你可以用注释来配置MDB 监听哪一条队列。当MDB 部署时,容器将会用到其中的注释信息。

ejb3.0学习之四:(1)消息驱动bean开发(Queue)

1、说明:EJB提供了基于jms的消息驱动bean(MDB),来处理消息服务的业务bean。比如我们在jd网上买东西,确认订单后会想服务器发送一消息(订单生成),但是在服务器处理该消息是异步的,客户端不必等待服务器的处理结果。这里只是打个比方,易于大家理解。 2.进入正题:ejb3.0消息驱动bean主要有两种:一种是基于发布/订阅(pub/sub);第二种是基于点对点(PTP)。 a.发布/

zhenlai2012的专栏 897

VB6.0开发的财务管理软件【源码】.rar

VB6.0开发的财务管理软件【源码】,数据库基于dat格式,哈尔滨工业大学软件工程专业的学生作品,功能模块:凭证管理、明细帐、总帐、现金流量、损益、资产负债、科目管理、科目汇兑等。用到有第三方控件,已附在压缩包内。本系统源码可作为你VB毕业论文或课程设计的参考资料。

如何使用消息队列进行事件驱动开发

1.背景介绍 事件驱动架构是一种异步处理事件的架构,它使用消息队列来实现事件的传输和处理。在这种架构中,系统的各个组件通过发布和订阅消息的方式来进行通信。这种架构可以提高系统的可扩展性、可靠性和性能。在本文中,我们将讨论如何使用消息队列进行事件驱动开发。 1. 背景介绍 事件驱动架构是一种非常流行的架构模式,它在各种应用中得到了广泛的应用。例如,在微服务架构中,事件驱动架构可以帮助实现系统的...

AI天才研究院 1046

消息队列使用的四种场景介绍

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性架构使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ二、消息队列应用场景以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景2.1异步处理场景说明:用户注册后,需要发注册邮件和注...

qq_42039607的博客 352

基于Bean的方法声明交换机队列以绑定

创建交换机以及队列可以手动实现,但在生产环境中不太合适,故用java代码生成更为方便一些。配置完该配置类后启动该项目,登录rabbitmq后便可发现已经生成并绑定。

qq_45706306的博客 347

EJB3.0开发消息驱动bean

EJB3.0开发消息驱动bean      晚上学习了EJB3.0开发消息驱动bean(Message Driven Bean),MDB是JMS(Java Message Service)的实现基础。消息驱动bean主要分为两类:Point  to Point(PTP)也即点对点的发送方式和Publish Subscribe(发布/订阅式的方式)。其中PTP是一对一的发送方式:而且其对发送方没什

caolipeng_918的专栏 800

J2EE学习笔记八:消息驱动bean

消息驱动bean的主要用于接受和处理异步消息,这些信息可能来自一个外部的系统或者同一个应用中的其它组件,之所以称它们为异步,那时因为这些消息可以在任何时候到达,而不同于一般的远程方法调用的结果,是立马直接得到的。同UI的事件处理工作方式类似,消息驱动bean用于监听发送给它的异步消息。值得注意的是,与远程调用方法不同,异步消息的发送者不会停下来去等待对方的响应。消息驱动bean是J2EE中的一

鱼与飞鸟 6146

在JBoss中开发自己的消息驱动Bean

JBoss中先用xml文件定义我们的消息管道 定义规则是后最为XXXXXX-service.xml文件, 我定义为snailteam-service.xml   定义我们的Queue消息管道 name=snailteamQueue JNDIName  queue/snailteam   定义我们的 Topic消息管道 name=snailteamTopic JNDINam...

xiaofancn的专栏 182

EJB消息驱动bean开发

1,编写jndi文件,位于src目录下java.naming.factory.initial=org.jnp.interfaces.NamingContextFactoryjava.naming.provider.url=localhost:10992,编写*-server.xml,(这里为MyMessageBean-server.xml)到 jboss-4.2.3.GA/server/default/deploy下         name="jboss.mq.destination:service=Qu

651

EJB3.0消息驱动bean(MDB)

EJB3.0中的消息驱动beanjava消息服务技术(JMS)是用于访问企业消息系统的开发商中立的API。企业消息系统可以协助应用软件通过网络进行消息交互。JMS的编程过程很简单,概括为:应用程序A发送一条消息到消息服务器的某个目的地(Destination),然后消息服务器把消息转发给应用程序B。因为应用程序A和应用程序B没有直接的代码关联,所以两者实现了解耦,如下图:消息的传递模

天空的云 1746

(j2ee)消息驱动bean

消息驱动bean的主要用于接受和处理异步消息,这些信息可能来自一个外部的系统或者同一个应用中的其它组件,之所以称它们为异步,那时因为这些消息可以在任何时候到达,而不同于一般的远程方法调用的结果,是立马直接得到的。同UI的事件处理工作方式类似,消息驱动bean用于监听发送给它的异步消息。值得注意...

chiyingliao3565的博客 237

消息驱动bean的应用

JMS中的信息分为头(header),属性(property)和主体(body)消息有以下几种类型,他们都是派生自message接口StreamMessage,MapMessage,TextMessage,ObjectMessage,BytesMessageJMS支持两种消息传递方式,点对点(point-to-point,简称PTP)和发布/订阅)publish/subscribe,简称pub

gaoge19861207的专栏 979

EJB_开发消息驱动bean

开发消息驱动bean Java消息服务(Java MessageService)          Java 消息服务(Java Message Service,简称 JMS)是用于访问企业消息系统的开发商中立的API。企业消息系统可以协助应用软件通过网络进行消息交互。 JMS的编程过程很简单,概括为:应用程序A发送一条消息到消息服务器的某个目地(Destination),然后消息服务器把消

jerome 1859

Ejb消息驱动bean使用

接下来对Ejb中的消息驱动bean做一个简单使用总结: 首先我们需要对消息的目标地址在jboss中做一个配置(资料) 开始JMS编程前,我们需要先配置消息到达的目标地址(Destination),因为只有目标地址存在了,我们才能发送消息到这个地址。由于每个应用服务器关于目标地址的配置方式都有所不同,下面以jboss为例,配置一个queue类型的目标地址。 -黑色字体配置不用修改 ...

青年IT男 207

EJB整理3-消息驱动Bean(MDB)

1 消息驱动Bean(MDB)1.1 JMS(Java Message Service)1.1.1 JMS概念<br />JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输,JMS支持两种消息模型:Point-to- Point和Publish/Subscribe(pub/sub),即点对点和发布/订阅模式。这两种消息传递模型非常相似,但有以下区别:<br /> PTP  消息传递模型规定了一条消息只能传递给一个接收方。Pub/sub  消息传递模型允许一条消息传递给多个接收

崇尚狼性的专栏 3425

EJB消息驱动bean

Java Message Service 消息传递系统的中心就是消息。一条 Message 分为三个组成部分: 头(header)是个标准字段集,客户机和供应商都用它来标识和路由消息。 JMSMessageID: 标识提供者发送的每一条消息, 发送过程中由提供者设置 JM

哇哈哈 2157

开发消息驱动bean 2

消息发送完后,编写消息的接收者:消息的接收者可以采用java类的形式接收这里采用消息驱动Bean(Message Driven Bean)接收消息消息驱动Bean(MDB)是设计用来专门处理基于消息请求的组件。它和无状态Session Bean一样也使用 了实例池技术,容器可以使用一定数量的bean实例并发处理成千上万个JMS消息。正因为MDB具有处理 大量并发消息的能力,所以非常适合应...

97
上一篇: tomcat 停止的时候 contextDestroyed不执行(转)
下一篇: 开发EJB容器模型的WEB服务
_frank
博客等级 码龄17年 8粉丝 403原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值