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是
<!---->
但是在ActiveMQ+JBoss配置中间需要使用新的XML Schema才能完成对ra的定义,如下.
xml 代码
- <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 代码
-
- <message-driven>
- <description>
-
- description>
- <display-name>Name for OrderMessagedisplay-name>
- <ejb-name>OrderMessageejb-name>
- <ejb-class>com.mostone.ejb.OrderMessageejb-class>
- <transaction-type>Containertransaction-type>
- <acknowledge-mode>Auto-acknowledgeacknowledge-mode>
- <message-driven-destination>
- <destination-type>javax.jms.Queuedestination-type>
- message-driven-destination>
- message-driven>
(2). 使用ActiveMQ RA配置的MessageDrivenBean的ejb-jar.xml配置
xml 代码
-
- <message-driven>
- <description>
-
- description>
- <display-name>Name for OrderMessagedisplay-name>
- <ejb-name>OrderMessageejb-name>
- <ejb-class>com.mostone.ejb.OrderMessageejb-class>
- <transaction-type>Containertransaction-type>
- <acknowledge-mode>Auto-acknowledgeacknowledge-mode>
-
- <activation-config>
- <activation-config-property>
- <activation-config-property-name>destinationactivation-config-property-name>
- <activation-config-property-value>queue.outboundactivation-config-property-value>
- activation-config-property>
- <activation-config-property>
- <activation-config-property-name>destinationTypeactivation-config-property-name>
- <activation-config-property-value>javax.jms.Queueactivation-config-property-value>
- activation-config-property>
- activation-config>
- 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 代码
- <message-driven>
- <ejb-name>OrderMessageejb-name>
- <destination-jndi-name>queue/testQueuedestination-jndi-name>
- message-driven>
2.) 使用ActiveMQ RA的配置
xml 代码
- <message-driven>
- <ejb-name>ActiveMQMDPejb-name>
-
- <resource-adapter-name>activemq-ra.rarresource-adapter-name>
-
- <configuration-name>ActiveMQ Message Driven Beanconfiguration-name>
- message-driven>
2. jboss.xml 配置invoker proxy和container 支持ActiveMQ RA
xml 代码
- <invoker-proxy-bindings>
- <invoker-proxy-binding>
- <name>activemq-message-driven-beanname>
- <invoker-mbean>defaultinvoker-mbean>
- <proxy-factory>org.jboss.ejb.plugins.inflow.JBossMessageEndpointFactoryproxy-factory>
- <proxy-factory-config>
- <endpoint-interceptors>
- <interceptor>org.jboss.proxy.ClientMethodInterceptorinterceptor>
- <interceptor>org.jboss.ejb.plugins.inflow.MessageEndpointInterceptorinterceptor>
- <interceptor>org.jboss.proxy.TransactionInterceptorinterceptor>
- <interceptor>org.jboss.invocation.InvokerInterceptorinterceptor>
- endpoint-interceptors>
- proxy-factory-config>
- invoker-proxy-binding>
- invoker-proxy-bindings>
MessageDrivenBean的container配置,这里的<container-name></container-name>必须和上面的<configuration-name></configuration-name>相同 才能起作用.
xml 代码
- <container-configurations>
- <container-configuration>
- <container-name>ActiveMQ Message Driven Beancontainer-name>
- <call-logging>falsecall-logging>
- <invoker-proxy-binding-name>activemq-message-driven-beaninvoker-proxy-binding-name>
- <container-interceptors>
- <interceptor>org.jboss.ejb.plugins.ProxyFactoryFinderInterceptorinterceptor>
- <interceptor>org.jboss.ejb.plugins.LogInterceptorinterceptor>
- <interceptor>org.jboss.ejb.plugins.RunAsSecurityInterceptorinterceptor>
-
- <interceptor transaction="Container">org.jboss.ejb.plugins.TxInterceptorCMTinterceptor>
- <interceptor transaction="Container">org.jboss.ejb.plugins.CallValidationInterceptorinterceptor>
- <interceptor transaction="Container" metricsEnabled="true">org.jboss.ejb.plugins.MetricsInterceptorinterceptor>
- <interceptor transaction="Container">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptorinterceptor>
-
- <interceptor transaction="Bean">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptorinterceptor>
- <interceptor transaction="Bean">org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMTinterceptor>
- <interceptor transaction="Bean">org.jboss.ejb.plugins.CallValidationInterceptorinterceptor>
- <interceptor transaction="Bean" metricsEnabled="true">org.jboss.ejb.plugins.MetricsInterceptorinterceptor>
- <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptorinterceptor>
- container-interceptors>
- <instance-pool>org.jboss.ejb.plugins.MessageDrivenInstancePoolinstance-pool>
- <instance-cache>instance-cache>
- <persistence-manager>persistence-manager>
- <container-pool-conf>
- <MaximumSize>100MaximumSize>
- container-pool-conf>
- container-configuration>
- container-configurations>
以上就是ActiveMQ+JBoss InBound 的配置
三.在Servlet中通过发送消息,验证上面的Message Driven Bean
为了验证这个MessageDrivenBean能够正常工作,我使用一个很简单的servlet向这个queue发送消息,前一篇的activemq-ds.xml 已经提供在启动的时候绑定了JNDI activemq/QueueConnectionFactory,activemq/queue/outbound,我们直接使用就行了,
java 代码
- try {
- initialContext = new InitialContext();
- QueueConnectionFactory connectionFactory = (QueueConnectionFactory) initialContext
- .lookup("java:activemq/QueueConnectionFactory");
- Connection con=connectionFactory.createConnection();
- Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- Queue queue = (Queue) initialContext.lookup("activemq/queue/outbound");
- MessageProducer producer = session.createProducer(queue);
- TextMessage txtMessage = session.createTextMessage();
- txtMessage.setText("A");
- producer.send(txtMessage);
- producer.close();
- session.close();
- con.close();
-
- } catch (NamingException e) {
-
- e.printStackTrace();
- } catch (JMSException e) {
-
- e.printStackTrace();
- }
四.关于durable方式订阅topic的补充说明
使用durable方式,你需要在ejb-jar.xml中额外的配置,subscriptionDurability,clientId,subscriptionName
xml 代码
- <activation-config>
- <activation-config-property>
- ......
- <activation-config-property>
- <activation-config-property-name>subscriptionDurabilityactivation-config-property-name>
- <activation-config-property-value>Durableactivation-config-property-value>
- activation-config-property>
- <activation-config-property>
- <activation-config-property-name>clientIdactivation-config-property-name>
- <activation-config-property-value>fooactivation-config-property-value>
- activation-config-property>
- <activation-config-property>
- <activation-config-property-name>subscriptionNameactivation-config-property-name>
- <activation-config-property-value>baractivation-config-property-value>
- activation-config-property>
- ......
- activation-config-property>
- activation-config>
ok 这样就可以使用durable方式订阅topic了。
参考文档:
JBoss Integration
ActiveMQ Inbound Communication
ActiveMQ Outbound Communication
分享到:
- 2007-03-09 23:02
- 浏览 5375
- 评论(0)
- 论坛回复 / 浏览 (0 / 6812)
- 查看更多
相关推荐
《ActiveMQ消息服务器详解》 Apache ActiveMQ是业界广泛使用的开源消息代理,它遵循Java Message Service(JMS)规范,提供了可靠的消息传递服务。ActiveMQ v5.17.6是该服务器的一个稳定版本,包含了丰富的功能和...
Apache ActiveMQ是世界上最流行的开源消息代理和队列服务器,它基于Java消息服务(JMS)规范,提供高可用性、可扩展性和强大的消息传递功能。这个"apache-activemq-5.16.6-bin.zip"文件包含了ActiveMQ的最新稳定版本...
Apache ActiveMQ是Apache软件基金会的一个开源项目,是一个基于消息的通信中间件。ActiveMQ是JMS的一个具体实现,支持JMS的两种消息模型。ActiveMQ使用AMQP协议集成多平台应用,使用STOMP协议通过websockets在Web...
Apache ActiveMQ是开源的、基于Java消息服务(JMS)的应用服务器,它是Apache软件基金会的一部分。这个`apache-activemq-5.13.2-bin.tar.gz`压缩包包含了ActiveMQ的可执行版本,适用于运行在Linux环境下的Java应用...
本文介绍了消息队列的基本概念和作用,重点讲解了ActiveMQ5.x的主要特性和SpringBoot2.x中如何整合及实现点对点消息的实战案例。通过对这些知识点的理解和实践,开发者能够更好地理解和应用消息队列技术,提升系统...
2. **多种协议支持**:除了JMS,ActiveMQ还支持STOMP、AMQP、MQTT等多种消息协议,这使得不同平台和语言的应用可以方便地与之交互。 3. **高可用性**:通过集群和故障转移,ActiveMQ可以实现高可用性,确保消息服务...
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是世界上最流行的开源消息代理,它是一个Java消息服务(JMS)提供商,用于处理企业级的消息传递。这个“apache-activemq-5.15.11-bin.tar.gz”文件是针对Linux操作系统的ActiveMQ的版本5.15.11的二...
4. **data** 目录(可能需要用户手动创建):默认情况下,ActiveMQ会将消息存储在这个目录下,包括日志、持久化消息和临时数据。你可以根据需求配置`activemq.xml`来更改数据存储位置。 5. **docs** 目录:包含...
在.NET环境中进行C#客户端开发时,ActiveMQ作为一个强大的开源消息中间件,常常被用于实现应用程序之间的异步通信。为了在C#项目中使用ActiveMQ,开发者需要依赖Apache.NMS和Apache.NMS.ActiveMQ这两个库。这两个bin...
标题中的"activemq-ra-4.1.1.jar.zip"是一个压缩文件,其中包含了Apache ActiveMQ的一个资源适配器(Resource Adapter)的版本4.1.1。ActiveMQ是著名的开源消息代理和队列中间件,它实现了Java Message Service (JMS...
Apache ActiveMQ是世界上最流行的开源消息代理,它是一个Java消息服务(JMS)提供商,支持多种协议,如AMQP、OpenWire、STOMP等。ActiveMQ 5.14.5是该软件的一个版本,适用于Linux操作系统。这个压缩包文件"apache-...
Apache ActiveMQ是Apache软件基金会的一个项目,它是业界广泛使用的JMS提供者之一。ActiveMQ提供了高度可靠的消息传递机制,支持多种协议如OpenWire、STOMP、AMQP、MQTT和WS-Notification等,可以用于分布式系统中的...
Apache ActiveMQ是开源的、基于Java消息服务(JMS)的Message Broker,它允许应用程序之间进行异步数据通信。此压缩包"apache-activemq-5.15.5-bin.tar.gz"包含了Apache ActiveMQ的5.15.5版本的源代码和可执行文件,...
**ActiveMQ实践入门指南** Apache ActiveMQ是一款开源的消息中间件,它是Java消息服务(JMS)的实现,广泛应用于分布式系统中的异步通信。ActiveMQ以其高性能、高可靠性和易于管理的特点,在企业级应用中备受青睐。...
3. **事务支持**:ActiveMQ支持本地JMS事务和X/Open XA分布式事务,确保消息传递的原子性和一致性。 4. **持久化**:即使在系统崩溃或重启后,ActiveMQ也能保证消息的持久性,不丢失任何重要数据。 5. **多种协议...
activemq-all.5.14jar包,亲测可用!!
Apache ActiveMQ是世界上最流行的开源消息代理,它是一个Java消息服务(JMS)提供商,用于处理企业级的消息传递。5.3.1版本是这个软件的一个特定迭代,它包含了多个改进和修复,旨在提高稳定性和性能。这个压缩包...
MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。 特点: 1、支持多种...
Apache ActiveMQ是业界广泛使用的开源消息中间件,它基于Java Message Service (JMS) 规范,提供高效、可靠的异步通信解决方案。ActiveMQ 5.16.1 是该软件的一个版本,此版本的安装文件以“apache-activemq-5.16.1-...