`

ActiveMQ 实践之路(四) ActiveMQ 4.x +JBoss 4.x MDP实战篇

    博客分类:
  • jms
阅读更多
关键字:   ActiveMQ    

ActiveMQ 实践之路(四) ActiveMQ 4.x +JBoss 4.x MDP实战篇

      在<<ActiveMQ 实践之路(三) ActiveMQ 4.x +JBoss 4.x 整合篇 >>里面我们比较详细的讲解了ActiveMQ与JBoss的整合,
既然选择了JBoss,那么项目里面或多或少都会使用到EJB,下面我们就详细地介绍如何在ActiveMQ 4.x+JBOSS 4.x环境下开发
Message Driven Bean,并且与使用jbossMQ在配置上作了比较详细地比较。这里的OrderMessage 仅仅是一个自动生成的Message Driven Bean,在onMessage方法里面,作日志输入。

 一. 配置ejb-jar.xml
      
        1.  ejb-jar.xml 不能使用XML DTD,需要使用XML Schema(XSD)
            
很多朋友可能使用XDoclet来生成ejb-jar.xml,我这里直接使用XDoclet生成的ejb-jar.xml是

<!--CTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dt-->

           但是在ActiveMQ+JBoss配置中间需要使用新的XML Schema才能完成对ra的定义,如下.

xml 代码
  1. <ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1">  

 

2. ejb-jar.xml 直接使用JBossMQ的Message DriverBean 和使用ActiveMQ RA配置的区别

        (1) .使用JBossMQ的MessageDrivenBean的 ejb-jar.xml配置

xml 代码
  1. <!-- Message Driven Beans -->  
  2. <message-driven>  
  3.     <description>  
  4.           
  5.     description>  
  6.     <display-name>Name for OrderMessagedisplay-name>  
  7.     <ejb-name>OrderMessageejb-name>  
  8.     <ejb-class>com.mostone.ejb.OrderMessageejb-class>  
  9.     <transaction-type>Containertransaction-type>  
  10.     <acknowledge-mode>Auto-acknowledgeacknowledge-mode>  
  11.     <message-driven-destination>  
  12.         <destination-type>javax.jms.Queuedestination-type>  
  13.     message-driven-destination>  
  14. message-driven>  

     (2). 使用ActiveMQ RA配置的MessageDrivenBean的ejb-jar.xml配置

xml 代码
  1. <!-- Message Driven Beans -->  
  2. <message-driven>  
  3.     <description>  
  4.           
  5.     description>  
  6.     <display-name>Name for OrderMessagedisplay-name>  
  7.     <ejb-name>OrderMessageejb-name>  
  8.     <ejb-class>com.mostone.ejb.OrderMessageejb-class>  
  9.     <transaction-type>Containertransaction-type>  
  10.     <acknowledge-mode>Auto-acknowledgeacknowledge-mode>  
  11.     <!--使用了activetion-config-->  
  12.     <activation-config>  
  13.         <activation-config-property>  
  14.             <activation-config-property-name>destinationactivation-config-property-name>  
  15.             <activation-config-property-value>queue.outboundactivation-config-property-value>  
  16.         activation-config-property>  
  17.         <activation-config-property>  
  18.             <activation-config-property-name>destinationTypeactivation-config-property-name>  
  19.             <activation-config-property-value>javax.jms.Queueactivation-config-property-value>  
  20.         activation-config-property>  
  21.     activation-config>  
  22. message-driven>  

        其中destination,destinationType是ra.xml里面提供的配置属性,(这里官方的文档是Destination,DestinationType, 而实际上activemq-ra.rar里面的ra.xml是destination,destinationType,注意大小写区别)

. 配置jboss.xml
           大部分配置都是在jboss.xml里面.
         1.使用JBossMQ 和使用ActiveMQ RA配置Message Driven Bean的区别
           1.) 使用JBossMQ 的配置

xml 代码
  1. <message-driven>  
  2.     <ejb-name>OrderMessageejb-name>  
  3.     <destination-jndi-name>queue/testQueuedestination-jndi-name>  
  4. message-driven>  

         2.) 使用ActiveMQ RA的配置

xml 代码
  1. <message-driven>  
  2.     <ejb-name>ActiveMQMDPejb-name>  
  3.     <!-- 使用了resource-adapter-name -->  
  4.     <resource-adapter-name>activemq-ra.rarresource-adapter-name>  
  5.     <!-- 这里的configuration-name 需要和后面container-name 的名字相同 -->  
  6.     <configuration-name>ActiveMQ Message Driven Beanconfiguration-name>  
  7. message-driven>  

        2. jboss.xml 配置invoker proxy和container 支持ActiveMQ RA

xml 代码
  1. <invoker-proxy-bindings>  
  2.     <invoker-proxy-binding>  
  3.         <name>activemq-message-driven-beanname>  
  4.         <invoker-mbean>defaultinvoker-mbean>  
  5.         <proxy-factory>org.jboss.ejb.plugins.inflow.JBossMessageEndpointFactoryproxy-factory>  
  6.         <proxy-factory-config>  
  7.             <endpoint-interceptors>  
  8.                 <interceptor>org.jboss.proxy.ClientMethodInterceptorinterceptor>  
  9.                 <interceptor>org.jboss.ejb.plugins.inflow.MessageEndpointInterceptorinterceptor>  
  10.                 <interceptor>org.jboss.proxy.TransactionInterceptorinterceptor>  
  11.                 <interceptor>org.jboss.invocation.InvokerInterceptorinterceptor>  
  12.             endpoint-interceptors>  
  13.         proxy-factory-config>  
  14.     invoker-proxy-binding>  
  15. invoker-proxy-bindings>  

MessageDrivenBean的container配置,这里的必须和上面的相同 才能起作用.


 

xml 代码
  1. <container-configurations>  
  2.     <container-configuration>  
  3.         <container-name>ActiveMQ Message Driven Beancontainer-name>  
  4.         <call-logging>falsecall-logging>  
  5.         <invoker-proxy-binding-name>activemq-message-driven-beaninvoker-proxy-binding-name>  
  6.         <container-interceptors>  
  7.             <interceptor>org.jboss.ejb.plugins.ProxyFactoryFinderInterceptorinterceptor>  
  8.                 <interceptor>org.jboss.ejb.plugins.LogInterceptorinterceptor>  
  9.                 <interceptor>org.jboss.ejb.plugins.RunAsSecurityInterceptorinterceptor>  
  10.                 <!-- CMT -->  
  11.                 <interceptor transaction="Container">org.jboss.ejb.plugins.TxInterceptorCMTinterceptor>  
  12.                 <interceptor transaction="Container">org.jboss.ejb.plugins.CallValidationInterceptorinterceptor>  
  13.                 <interceptor transaction="Container" metricsEnabled="true">org.jboss.ejb.plugins.MetricsInterceptorinterceptor>  
  14.                 <interceptor transaction="Container">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptorinterceptor>  
  15.                 <!-- BMT -->  
  16.                 <interceptor transaction="Bean">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptorinterceptor>  
  17.                 <interceptor transaction="Bean">org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMTinterceptor>  
  18.                 <interceptor transaction="Bean">org.jboss.ejb.plugins.CallValidationInterceptorinterceptor>  
  19.                 <interceptor transaction="Bean" metricsEnabled="true">org.jboss.ejb.plugins.MetricsInterceptorinterceptor>  
  20.                 <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptorinterceptor>  
  21.         container-interceptors>  
  22.         <instance-pool>org.jboss.ejb.plugins.MessageDrivenInstancePoolinstance-pool>  
  23.         <instance-cache>instance-cache>  
  24.         <persistence-manager>persistence-manager>  
  25.         <container-pool-conf>  
  26.                 <MaximumSize>100MaximumSize>  
  27.         container-pool-conf>  
  28.         container-configuration>  
  29. container-configurations>  

以上就是ActiveMQ+JBoss InBound 的配置

三.在Servlet中通过发送消息,验证上面的Message Driven Bean

     为了验证这个MessageDrivenBean能够正常工作,我使用一个很简单的servlet向这个queue发送消息,前一篇的activemq-ds.xml 已经提供在启动的时候绑定了JNDI activemq/QueueConnectionFactory,activemq/queue/outbound,我们直接使用就行了,

java 代码
  1. try {   
  2.         initialContext = new InitialContext();   
  3.         QueueConnectionFactory connectionFactory = (QueueConnectionFactory) initialContext   
  4.                 .lookup("java:activemq/QueueConnectionFactory");   
  5.            Connection con=connectionFactory.createConnection();   
  6.         Session session =  con.createSession(false, Session.AUTO_ACKNOWLEDGE);   
  7.   
  8.         Queue queue = (Queue) initialContext.lookup("activemq/queue/outbound");   
  9.         MessageProducer producer = session.createProducer(queue);   
  10.         TextMessage txtMessage = session.createTextMessage();   
  11.         txtMessage.setText("A");   
  12.         producer.send(txtMessage);   
  13.         producer.close();   
  14.         session.close();   
  15.         con.close();   
  16.            
  17.     } catch (NamingException e) {   
  18.         // TODO Auto-generated catch block   
  19.         e.printStackTrace();   
  20.     } catch (JMSException e) {   
  21.         // TODO Auto-generated catch block   
  22.         e.printStackTrace();   
  23.     }   

四.关于durable方式订阅topic的补充说明
     使用durable方式,你需要在ejb-jar.xml中额外的配置,subscriptionDurability,clientId,subscriptionName

xml 代码
  1. <activation-config>  
  2.     <activation-config-property>  
  3.         ......   
  4.         <activation-config-property>  
  5.             <activation-config-property-name>subscriptionDurabilityactivation-config-property-name>  
  6.             <activation-config-property-value>Durableactivation-config-property-value>  
  7.         activation-config-property>  
  8.         <activation-config-property>  
  9.             <activation-config-property-name>clientIdactivation-config-property-name>  
  10.             <activation-config-property-value>fooactivation-config-property-value>  
  11.         activation-config-property>  
  12.         <activation-config-property>  
  13.             <activation-config-property-name>subscriptionNameactivation-config-property-name>  
  14.             <activation-config-property-value>baractivation-config-property-value>  
  15.         activation-config-property>  
  16.         ......   
  17.     activation-config-property>  
  18. activation-config>  

 

ok 这样就可以使用durable方式订阅topic了。

参考文档:
        JBoss Integration
       ActiveMQ Inbound Communication
    ActiveMQ Outbound Communication

分享到:
评论

相关推荐

    ActiveMQ消息服务器 v5.17.6.zip

    《ActiveMQ消息服务器详解》 Apache ActiveMQ是业界广泛使用的开源消息代理,它遵循Java Message Service(JMS)规范,提供了可靠的消息传递服务。ActiveMQ v5.17.6是该服务器的一个稳定版本,包含了丰富的功能和...

    apache-activemq-5.16.6-bin.zip

    Apache ActiveMQ是世界上最流行的开源消息代理和队列服务器,它基于Java消息服务(JMS)规范,提供高可用性、可扩展性和强大的消息传递功能。这个"apache-activemq-5.16.6-bin.zip"文件包含了ActiveMQ的最新稳定版本...

    apache-activemq-5.16.5-bin.tar.gz 下载(5积分)

    Apache ActiveMQ是Apache软件基金会的一个开源项目,是一个基于消息的通信中间件。ActiveMQ是JMS的一个具体实现,支持JMS的两种消息模型。ActiveMQ使用AMQP协议集成多平台应用,使用STOMP协议通过websockets在Web...

    apache-activemq-5.13.2-bin.tar.gz

    Apache ActiveMQ是开源的、基于Java消息服务(JMS)的应用服务器,它是Apache软件基金会的一部分。这个`apache-activemq-5.13.2-bin.tar.gz`压缩包包含了ActiveMQ的可执行版本,适用于运行在Linux环境下的Java应用...

    消息队列介绍和SpringBoot2.x整合RockketMQ、ActiveMQ

    本文介绍了消息队列的基本概念和作用,重点讲解了ActiveMQ5.x的主要特性和SpringBoot2.x中如何整合及实现点对点消息的实战案例。通过对这些知识点的理解和实践,开发者能够更好地理解和应用消息队列技术,提升系统...

    apache-activemq-5.16.5

    2. **多种协议支持**:除了JMS,ActiveMQ还支持STOMP、AMQP、MQTT等多种消息协议,这使得不同平台和语言的应用可以方便地与之交互。 3. **高可用性**:通过集群和故障转移,ActiveMQ可以实现高可用性,确保消息服务...

    apache-activemq-5.15.12-bin.tar.gz

    4.配置环境变量,配置完环境变量之后在任何地方都可以使用命令 activemq启动 ACTIVEMQ_HOME=/opt/apache-activemq-5.15.12 PATH=/opt/apache-activemq-5.15.12/bin:$PATH export ACTIVEMQ_HOME PATH 5....

    apache-activemq-5.15.11-bin.tar.gz

    Apache ActiveMQ是世界上最流行的开源消息代理,它是一个Java消息服务(JMS)提供商,用于处理企业级的消息传递。这个“apache-activemq-5.15.11-bin.tar.gz”文件是针对Linux操作系统的ActiveMQ的版本5.15.11的二...

    apache-activemq-5.15.8-bin.tar.gz

    4. **data** 目录(可能需要用户手动创建):默认情况下,ActiveMQ会将消息存储在这个目录下,包括日志、持久化消息和临时数据。你可以根据需求配置`activemq.xml`来更改数据存储位置。 5. **docs** 目录:包含...

    C#客户端开发ActiveMq请下载Apache.NMS和Apache.NMS.ActiveMQ两个bin包

    在.NET环境中进行C#客户端开发时,ActiveMQ作为一个强大的开源消息中间件,常常被用于实现应用程序之间的异步通信。为了在C#项目中使用ActiveMQ,开发者需要依赖Apache.NMS和Apache.NMS.ActiveMQ这两个库。这两个bin...

    activemq-ra-4.1.1.jar.zip

    标题中的"activemq-ra-4.1.1.jar.zip"是一个压缩文件,其中包含了Apache ActiveMQ的一个资源适配器(Resource Adapter)的版本4.1.1。ActiveMQ是著名的开源消息代理和队列中间件,它实现了Java Message Service (JMS...

    apache-activemq-5.14.5-bin.tar.gz

    Apache ActiveMQ是世界上最流行的开源消息代理,它是一个Java消息服务(JMS)提供商,支持多种协议,如AMQP、OpenWire、STOMP等。ActiveMQ 5.14.5是该软件的一个版本,适用于Linux操作系统。这个压缩包文件"apache-...

    apache-activemq-5.15.3-bin.tar.gz

    Apache ActiveMQ是Apache软件基金会的一个项目,它是业界广泛使用的JMS提供者之一。ActiveMQ提供了高度可靠的消息传递机制,支持多种协议如OpenWire、STOMP、AMQP、MQTT和WS-Notification等,可以用于分布式系统中的...

    apache-activemq-5.15.5-bin.tar.gz

    Apache ActiveMQ是开源的、基于Java消息服务(JMS)的Message Broker,它允许应用程序之间进行异步数据通信。此压缩包"apache-activemq-5.15.5-bin.tar.gz"包含了Apache ActiveMQ的5.15.5版本的源代码和可执行文件,...

    ActiveMQ实践入门指南_ActiveMQ实践入门指南_源码

    **ActiveMQ实践入门指南** Apache ActiveMQ是一款开源的消息中间件,它是Java消息服务(JMS)的实现,广泛应用于分布式系统中的异步通信。ActiveMQ以其高性能、高可靠性和易于管理的特点,在企业级应用中备受青睐。...

    apache-activemq-5.12.0-bin.tar.gz

    3. **事务支持**:ActiveMQ支持本地JMS事务和X/Open XA分布式事务,确保消息传递的原子性和一致性。 4. **持久化**:即使在系统崩溃或重启后,ActiveMQ也能保证消息的持久性,不丢失任何重要数据。 5. **多种协议...

    activemq-all.5.14jar包

    activemq-all.5.14jar包,亲测可用!!

    apache-activemq-5.3.1-bin.tar.gz

    Apache ActiveMQ是世界上最流行的开源消息代理,它是一个Java消息服务(JMS)提供商,用于处理企业级的消息传递。5.3.1版本是这个软件的一个特定迭代,它包含了多个改进和修复,旨在提高稳定性和性能。这个压缩包...

    apache-activemq-5.15.0-bin.tar.7z

    MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。 特点: 1、支持多种...

    apache-activemq-5.16.1-bin.tar.gz

    Apache ActiveMQ是业界广泛使用的开源消息中间件,它基于Java Message Service (JMS) 规范,提供高效、可靠的异步通信解决方案。ActiveMQ 5.16.1 是该软件的一个版本,此版本的安装文件以“apache-activemq-5.16.1-...

Global site tag (gtag.js) - Google Analytics