开发消息驱动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
相关推荐
消息驱动Bean(Message Driven Bean,MDB)是EJB的一种特殊类型,它专注于处理消息队列(Queue)或主题(Topic)中的消息,实现异步处理。在本例中,我们将探讨如何使用EJB消息驱动Bean处理Queue和Topic。 1. **...
### EJB2与EJB3消息驱动Bean:深入解析与应用 #### 一、EJB2消息驱动Bean ##### 1. **理解消息驱动Bean(MDB)** 消息驱动Bean是Java EE中用于处理异步消息的一种特殊类型的EJB。在EJB2中,MDB主要用于接收来自消息...
3. **配置激活规范**:通过在@MessageDriven注解中的activationConfig属性,我们可以设置MDB订阅的消息类型(如TextMessage、ObjectMessage等)、目的地(queue或topic)以及JNDI名称等。 4. **部署MDB**:将MDB类...
EJB 3.0是EJB规范的一个重要版本,它引入了大量简化开发的特性,其中Message Driven Bean(MDB)是一种专门用于处理消息的组件,它简化了企业级应用中的异步处理。 Message Driven Bean 是一种无状态的session bean...
【WebSphere MQ开发JMS】涉及的关键知识点包括Java消息服务(JMS)、Enterprise JavaBean (EJB)、无状态会话Bean(Stateless Session Bean,SSB)、消息驱动Bean(Message-Driven Bean,MDB)、Java Naming and ...
文档目录: 一.JBOSS入门 1.下载和安装JBoss ...3.消息驱动Bean (Message Driven Bean) 3.1 Queue消息的发送与接收(PTP消息传递模型) 3.2 Topic消息的发送与接收(Pub/sub 消息传递模型) 4.实体Bean(Entity Bean)
* 第5课:消息驱动Bean(Message-Driven Bean)——接收JMS消息 + JMS与消息驱动Bean的工作原理 + 处理点对点消息——队列Queue + 处理发布/订阅消息——主题Topic * 第6课:实体Bean(Entity Bean)——Java持久...
- **与EJB组件模型的集成**: EJB(Enterprise JavaBeans)可以通过消息驱动的bean(MDBs)实现与JMS的集成。 - **与Java事务API(JTA)的集成**: 支持事务处理,确保消息传递的原子性、一致性、隔离性和持久性(ACID)。 - *...
### 深入解析《ejb学习笔记5》——消息驱动Bean详解 #### 消息驱动Bean概述 消息驱动Bean(MDB,Message Driven Bean)是Enterprise JavaBeans(EJB)框架中的一个重要组成部分,主要用于接收并处理来自消息中间件...
消息驱动Bean(Message-Driven Bean,MDB)是Enterprise JavaBeans(EJB)规范中的一个重要组件,主要用于处理异步消息通信。在Java企业级应用中,MDBs被用来接收和响应JMS(Java Message Service)消息,从而解耦...
EJB可以是会话Bean、实体Bean或消息驱动Bean,其中消息驱动Bean是专门设计用来接收和处理JMS消息的。 JMS Topic是一种发布/订阅模式的消息传递机制,其中多个订阅者(称为消费者)可以接收到由一个或多个发布者...
本文将深入探讨如何将SpringMVC与ActiveMQ集成,以及利用ActiveMQ实现Queue和Topic这两种消息模型。 首先,SpringMVC是Spring框架的一个模块,专门用于构建基于Java的Web应用的模型-视图-控制器(MVC)架构。它提供...
5. 创建Destination:定义消息的目标,可以是Queue或Topic。 ```java Destination destination = session.createQueue("myQueue"); ``` 6. 发送和接收消息:创建MessageProducer和MessageConsumer,并通过它们进行...
Message-Driven Bean是一种特殊的session bean,它以事件驱动的方式工作,专门用于接收和处理JMS消息。当消息队列中有新消息到达时,MDB会自动激活,处理消息,然后返回到等待状态。这种模式在处理大量并发请求或者...
在Java企业级应用中,Message Driven Bean (MDB) 是一种特殊类型的Enterprise JavaBean (EJB),用于处理异步消息。MDBs 主要用于接收和处理来自消息中间件(如JMS, Java Message Service)的消息,是实现解耦和基于...
- **消息驱动Bean**:用于处理异步消息,依赖于JMS(Java Message Service)规范,可以处理队列(Queue)和主题(Topic)消息。 ### 4. EJB版本的发展 EJB的发展经历了多个阶段,从最初的1.1版本只包含会话Bean和...
深入理解队列(Queue)和主题(Topic)消息的发送与接收机制,即点对点(Point-to-Point)和发布/订阅(Publish/Subscribe)消息传递模型,对于构建高可用、松耦合的分布式系统有着不可替代的作用。 #### 六、实体...
Spring Boot 整合 RabbitMQ 实例(Topic 模式) 本文主要介绍如何使用 Spring Boot 框架整合 ...Topic Exchange 模式是一种灵活的消息路由机制,可以应用于各种场景,例如消息队列、事件驱动架构和数据集成等。