`

博客开张:用Spring+ActiveMQ+Jencks开发消息驱动POJO

    博客分类:
  • Java
阅读更多
我近段的一个应用中需要消息驱动POJO。
最近也听说Spring 2.0开始支持消息驱动POJO了,但我的应用使用的Spring1.2。
从网上找了一些文章看来都比较旧了,并且近段ActiveMQ处于Apache的孵化器中,包的结构也有些改变,原来的ActiveMQ中的JCA容器部分也从ActiveMQ中独立也来成了Jencks项目。
后来参考这些文章和Jencks官网上的说明成功实现了消息驱动POJO。
下面记录了我配置的过程:
[list=1]
  • 搞定相依赖的包。
  • a.Spring相关的一些包,这部分就不再啰嗦了。
    b.ActiveMQ相关的包
    activemq-ra-4.01
    concurrent-1.3.4
      incubator-activemq-4.0.1
    c.JCA容器
    jencks-1.3-all
  • 服务端配置
  • <bean id="helloBean" class="mdp.demo.HelloBean" />
    
    	<bean id="jmsTransactionManager"
    		class="org.jencks.factory.TransactionManagerFactoryBean" />
    
    	<bean id="activeMQContainer" class="org.jencks.JCAContainer">
    		<property name="bootstrapContext" >
    			<bean id="bootstrapContext" class="org.jencks.factory.BootstrapContextFactoryBean">
    				<property name="transactionManager" ref="jmsTransactionManager"/>
    			</bean>
    		</property>
    		
    		<property name="resourceAdapter">
    			<bean id="activeMQResourceAdapter"
    				class="org.apache.activemq.ra.ActiveMQResourceAdapter">
    				<property name="serverUrl"
    					value="tcp://localhost:61616" />
    			</bean>
    		</property>
    	</bean>
    
    
    	<bean id="HelloMDP" class="org.jencks.JCAConnector">
    		<property name="jcaContainer" ref="activeMQContainer" />
    		<property name="transactionManager" ref="jmsTransactionManager" />
    		<property name="activationSpec">
    			<bean
    				class="org.apache.activemq.ra.ActiveMQActivationSpec">
    				<property name="destination" value="Hello.Queue" />
    				<property name="destinationType"
    					value="javax.jms.Queue" />
    			</bean>
    		</property>
    		<property name="ref" value="helloBean" />
    	</bean>
    

  • 开发HelloBean
  • package mdp.demo;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    
    public class HelloBean implements MessageListener {
    
    	public void onMessage(Message msg) {
    		try {
    			String name = msg.getStringProperty("name");
    			if (name == null) {
    				name = "World";
    			}
    
    			System.out.println("Hello " + name + "!");
    		} catch (JMSException e) {
    			e.printStackTrace();
    		}
    
    	}
    
    }
    
    

  • 客户端配置,这里直接使用Spring的JmsTemplate
  • <bean id="jmsTemplate"
    		class="org.springframework.jms.core.JmsTemplate">
    		<property name="defaultDestinationName" value="Hello.Queue" />
    		<property name="connectionFactory" ref="connectionFactory" />
    	</bean>
    <bean id="connectionFactory"
    		class="org.apache.activemq.ActiveMQConnectionFactory">
    		<property name="brokerURL" value="tcp://localhost:61616" />
    	</bean>
    

  • 客户端示例程序
  • package mdp.demo;
    
    import javax.jms.JMSException;
    import javax.jms.MapMessage;
    import javax.jms.Message;
    import javax.jms.Session;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.core.MessageCreator;
    
    public class MDPClient {
    	public static void main(String[] args) {
    		ApplicationContext ctx = new ClassPathXmlApplicationContext(
    				"spring-client.xml");
    
    		JmsTemplate template = (JmsTemplate) ctx.getBean("jmsTemplate");
    		template.setDefaultDestinationName("Hello.Queue");
    		template.send(new MessageCreator() {
    			public Message createMessage(Session session) throws JMSException {
    				MapMessage message = session.createMapMessage();
    				message.setStringProperty("name", "消息驱动POJO");
    				return message;
    			}
    		});
    		
    		
    	}
    }
    


    上面的示例代码实现了消息驱动POJO,但是POJO类仍需实现MessageListener接口。
    上面的配置也不支持XA事务,Jencks官网上有说明,但我没有配置成功(Hibernate和JMS)。有哪位兄弟配置成功请告知,谢谢。
    [/list]
    分享到:
    评论
    5 楼 zlotus 2009-12-03  
    版本你好,
    若果在1.2版本的基础上加上spring2.0部门对jms支持的jar包,是不是
    可以实现jms的对支持呐?
    4 楼 skiter 2007-03-02  
    照上面配好一切正常,但是我重启activeMQ服务器,helloBean就不能接受到消息,我在jconsole里面看到队列里受到消息了,就是helleBean里取不到,不知道怎么回事?
    3 楼 YuLimin 2006-11-19  
    1、可以直接启动ActiveMQ做为JMS服务端;
    2、可以同JVM一起启动ActiveMQ来做服务端进行测试。
    2 楼 Jamsa 2006-11-09  
    我的服务端是一个J2EE应用,配置指的就是Spring的配置文件,这里没有使用activemq.xml来配置。
    客户端是一个用来做测试的Java程序(配置文件是另一个Spring配置文件),只是发送一下消息到上面配置的
     <property name="destination" value="Hello.Queue" />  

    这个队列里。
    1 楼 leidongduo 2006-11-08  
    你说的“服务器配置”的配置文件是ActiveMQ服务器的activemq.xml吗?应该不是吧,你说的这个配置文件应该是个spring的配置文件吧?


      这样的话,这个spring配置文件应该放在工程的什么位置呢?这个配置文件的内容中并没有提到ActiveMq broker的信息,应该怎样建立这个jenks的配置文件和ActiveMQ 服务器的信息呢?

      多谢回复

    相关推荐

      spring+activemq必备jar包

      spring+activemq必备jar包:activeio-core-3.1.4.jar,activemq-all-5.13.2.jar,activemq-pool-5.13.2.jar,commons-pool2-2.4.2.jar

      JMS之Spring +activeMQ实现消息队列

      总结起来,"JMS之Spring + ActiveMQ实现消息队列"涉及到的关键知识点包括:Spring框架的JMS支持、ActiveMQ的使用、ConnectionFactory的配置、JmsTemplate和MessageListener的实现,以及消息队列在解决系统解耦和异步...

      spring+activemq

      在IT行业中,Spring框架与ActiveMQ的结合是构建企业级应用中常见的消息中间件解决方案。Spring框架是一个开源的Java平台,它提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、数据访问、Web应用以及更多的服务...

      Spring+JMS+ActiveMQ+Tomcat实现消息服务的demo

      基于Spring+JMS+ActiveMQ+Tomcat,我使用的版本情况如下所示:Spring 3.2.0,ActiveMQ 5.4.3,Tomcat 6.0.43。本例通过详细的说明和注释,实现消息服务的基本功能:发送与接收。Spring对JMS提供了很好的支持,可以...

      Spring+ActiveMQ整合实例代码工程

      在Java开发中,Spring框架是极为重要的应用基础,而ActiveMQ作为Apache出品的一款开源消息中间件,常被用于实现应用间的异步通信和解耦。本实例代码工程"Spring+ActiveMQ整合实例代码工程"正是结合两者,展示了如何...

      springboot-nettysocketio +netty+activeMq在线客服系统

      springboot +netty+activeMq在线客服系统springboot +netty+activeMq在线客服系统springboot +netty+activeMq在线客服系统springboot +netty+activeMq在线客服系统springboot +netty+activeMq在线客服系统springboot...

      jms Spring+ActiveMQ 5.4.2

      标题 "jms Spring+ActiveMQ 5.4.2" 涉及的是Java消息服务(JMS)在Spring框架中的应用,以及ActiveMQ作为消息代理的使用。在这个主题下,我们将深入探讨JMS的基本概念、Spring对JMS的支持以及ActiveMQ 5.4.2版本的...

      Spring+ActiveMQ消息队列+前台接收消息

      2. **创建消息生产者**:在Spring中,你可以使用`JmsTemplate`作为消息生产者,发送消息到ActiveMQ的队列或主题。配置`JmsTemplate`并设置ActiveMQ的连接工厂,然后在需要发送消息的地方调用其`convertAndSend`方法...

      spring + activemq 消息sample

      在IT行业中,Spring框架与ActiveMQ的集成是一个常见的任务,特别是在构建分布式系统和微服务架构时,消息队列起着至关重要的作用。本示例主要关注如何将Spring框架与ActiveMQ整合,以便实现异步通信和解耦系统组件。...

      springMvc+spring+activeMq+mybaits

      Spring与ActiveMQ的集成非常便捷,可以使用Spring的JmsTemplate或配置监听容器来发送和接收消息。 MyBatis是一个轻量级的持久层框架,它简化了Java应用与数据库之间的交互。MyBatis允许开发者编写SQL语句,将它们与...

      SpringMVC+Spring+Mybatis框架整合Mqttt通信协议+ActiveMQ作为中间件进行消息的发布与订阅

      单片机部分采用MQTT协议将主题消息发布到队列中,java部分也采用MQTT协议进行处理,整合MQTT协议, 具体这个资源是干什么的,请查看博客: https://blog.csdn.net/qq_34178998/article/details/93158429

      Spring+ActiveMQ实现,基于Maven

      在企业级应用开发中,Spring框架与ActiveMQ的结合使用是一种常见的消息中间件解决方案,用于实现应用程序间的异步通信和解耦。本项目基于Maven构建,提供了对Topic的实现,同时也支持轻松切换到Queue模式。 **...

      SpringBoot+ActiveMq+MQTT实现消息的发送和接收

      在本文中,我们将深入探讨如何使用SpringBoot、ActiveMQ和MQTT来实现消息的发送与接收。这是一个典型的分布式系统中的消息通信场景,其中SpringBoot作为应用程序框架,ActiveMQ作为消息中间件,而MQTT(Message ...

      Spring+ActiveMQ的整合

      Spring框架作为Java领域最流行的开发框架之一,提供了强大的依赖注入和面向切面编程功能,而ActiveMQ则是Apache软件基金会的一个开源消息中间件,实现了Java Message Service (JMS) 规范,用于在应用程序之间高效、...

      基于Spring+JMS+ActiveMQ+Tomcat的整合ActiveMQSpringDemo实例源码.zip

      基于Spring+JMS+ActiveMQ+Tomcat的整合ActiveMQSpringDemo实例源码,此实例基于Spring+JMS+ActiveMQ+Tomcat,注解的完整实例,包含jar包,可供学习及设计参考。

      activemq学习(2) spring+activemq

      总的来说,Spring与ActiveMQ的整合使得消息驱动的架构在Spring应用中变得更加便捷和灵活。这不仅提高了系统的解耦性,也提升了可扩展性和容错性。无论是简单的小型应用还是复杂的分布式系统,这种集成都是值得考虑的...

      spring+activemq topic持久化订阅

      spring +activemq topic消息持久化订阅实例,整个项目中有activemq和spring的整合的所有实例,topic的持久化配置是在ApplicationContext3C、ApplicationContext3C2以及ApplicationContext3P三个中,消息生产者:...

      BlazeDS+Spring+activeMQ outofmemory

      标题 "BlazeDS+Spring+activeMQ outofmemory" 指的是在使用BlazeDS、Spring和ActiveMQ集成的环境中遇到了内存溢出问题。BlazeDS是一个开放源码的服务器端技术,它允许双向通信,使Flex或AJAX客户端能够与Java后端...

    Global site tag (gtag.js) - Google Analytics