`
javaEEdevelop
  • 浏览: 876134 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

开发消息驱动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

 

分享到:
评论

相关推荐

    ejb 消息驱动Bean例子

    消息驱动Bean(Message Driven Bean,MDB)是EJB的一种特殊类型,它专注于处理消息队列(Queue)或主题(Topic)中的消息,实现异步处理。在本例中,我们将探讨如何使用EJB消息驱动Bean处理Queue和Topic。 1. **...

    EJB2和EJB3 消息驱动bean

    ### EJB2与EJB3消息驱动Bean:深入解析与应用 #### 一、EJB2消息驱动Bean ##### 1. **理解消息驱动Bean(MDB)** 消息驱动Bean是Java EE中用于处理异步消息的一种特殊类型的EJB。在EJB2中,MDB主要用于接收来自消息...

    ejb3.0第11讲 --开发消息驱动bean

    3. **配置激活规范**:通过在@MessageDriven注解中的activationConfig属性,我们可以设置MDB订阅的消息类型(如TextMessage、ObjectMessage等)、目的地(queue或topic)以及JNDI名称等。 4. **部署MDB**:将MDB类...

    EJB3.0开发Message Driven Bean.rar

    EJB 3.0是EJB规范的一个重要版本,它引入了大量简化开发的特性,其中Message Driven Bean(MDB)是一种专门用于处理消息的组件,它简化了企业级应用中的异步处理。 Message Driven Bean 是一种无状态的session bean...

    WebSphere MQ开发JMS

    【WebSphere MQ开发JMS】涉及的关键知识点包括Java消息服务(JMS)、Enterprise JavaBean (EJB)、无状态会话Bean(Stateless Session Bean,SSB)、消息驱动Bean(Message-Driven Bean,MDB)、Java Naming and ...

    JBOSS使用指南

    文档目录: 一.JBOSS入门 1.下载和安装JBoss ...3.消息驱动Bean (Message Driven Bean) 3.1 Queue消息的发送与接收(PTP消息传递模型) 3.2 Topic消息的发送与接收(Pub/sub 消息传递模型) 4.实体Bean(Entity Bean)

    《Java高手真经:Java Web高级开发技术》读书笔记模板.pptx

    * 第5课:消息驱动Bean(Message-Driven Bean)——接收JMS消息 + JMS与消息驱动Bean的工作原理 + 处理点对点消息——队列Queue + 处理发布/订阅消息——主题Topic * 第6课:实体Bean(Entity Bean)——Java持久...

    JMS的中文教程(Java的消息驱动)

    - **与EJB组件模型的集成**: EJB(Enterprise JavaBeans)可以通过消息驱动的bean(MDBs)实现与JMS的集成。 - **与Java事务API(JTA)的集成**: 支持事务处理,确保消息传递的原子性、一致性、隔离性和持久性(ACID)。 - *...

    ejb 学习笔记5

    ### 深入解析《ejb学习笔记5》——消息驱动Bean详解 #### 消息驱动Bean概述 消息驱动Bean(MDB,Message Driven Bean)是Enterprise JavaBeans(EJB)框架中的一个重要组成部分,主要用于接收并处理来自消息中间件...

    Message-Driven Bean EJB实例源代码

    消息驱动Bean(Message-Driven Bean,MDB)是Enterprise JavaBeans(EJB)规范中的一个重要组件,主要用于处理异步消息通信。在Java企业级应用中,MDBs被用来接收和响应JMS(Java Message Service)消息,从而解耦...

    EJB TO JMS

    EJB可以是会话Bean、实体Bean或消息驱动Bean,其中消息驱动Bean是专门设计用来接收和处理JMS消息的。 JMS Topic是一种发布/订阅模式的消息传递机制,其中多个订阅者(称为消费者)可以接收到由一个或多个发布者...

    springMVC+activityMq

    本文将深入探讨如何将SpringMVC与ActiveMQ集成,以及利用ActiveMQ实现Queue和Topic这两种消息模型。 首先,SpringMVC是Spring框架的一个模块,专门用于构建基于Java的Web应用的模型-视图-控制器(MVC)架构。它提供...

    activemq + spring

    5. 创建Destination:定义消息的目标,可以是Queue或Topic。 ```java Destination destination = session.createQueue("myQueue"); ``` 6. 发送和接收消息:创建MessageProducer和MessageConsumer,并通过它们进行...

    基于Java的源码-Message-Driven Bean EJB实例源代码.zip

    Message-Driven Bean是一种特殊的session bean,它以事件驱动的方式工作,专门用于接收和处理JMS消息。当消息队列中有新消息到达时,MDB会自动激活,处理消息,然后返回到等待状态。这种模式在处理大量并发请求或者...

    jboss 6.0 上开发 MDB

    在Java企业级应用中,Message Driven Bean (MDB) 是一种特殊类型的Enterprise JavaBean (EJB),用于处理异步消息。MDBs 主要用于接收和处理来自消息中间件(如JMS, Java Message Service)的消息,是实现解耦和基于...

    EJB必须掌握的概念

    - **消息驱动Bean**:用于处理异步消息,依赖于JMS(Java Message Service)规范,可以处理队列(Queue)和主题(Topic)消息。 ### 4. EJB版本的发展 EJB的发展经历了多个阶段,从最初的1.1版本只包含会话Bean和...

    EJB3.pdf EJB3 文档 资料

    深入理解队列(Queue)和主题(Topic)消息的发送与接收机制,即点对点(Point-to-Point)和发布/订阅(Publish/Subscribe)消息传递模型,对于构建高可用、松耦合的分布式系统有着不可替代的作用。 #### 六、实体...

    Spring Boot整合RabbitMQ实例(Topic模式)

    Spring Boot 整合 RabbitMQ 实例(Topic 模式) 本文主要介绍如何使用 Spring Boot 框架整合 ...Topic Exchange 模式是一种灵活的消息路由机制,可以应用于各种场景,例如消息队列、事件驱动架构和数据集成等。

Global site tag (gtag.js) - Google Analytics