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

ActiveMQ在Spring中异步接收消息(六)

    博客分类:
  • JMS
阅读更多

转载请出自出处:http://eksliang.iteye.com/blog/2243158

一、概述

     当调用JmsTemplate的receive()方法时,JmsTemplate会尝试从ActiveMQ中获取一个消息。如果没有可用的消息,receive()方法会一直等待,直到获得消息为止。也就是说该方法时同步的。这意味着接收者必须耐心等待消息的到来,因此receive()方法会一直被阻塞,直到有可用消息(或者消息超时)。

     可喜的是Spring2.0提供了他自己的消息驱动Bean形式来满足异步接收消息的需求,这种形式与EJB3的MDB非常相似。这里我只介绍最流行的消息驱动POJO(基于Spring的),EJB3的不进行介绍。

 

二、声明一个POJO来异步接收消息

发送消息的代码如下:

	/**
	 * 使用JmsTemplate发送序列化消息
	 * @param user
	 */
	public void send(final User user){
		jmsTemplate.send(new MessageCreator() {
			@Override
			public ObjectMessage createMessage(Session session) throws JMSException {
				ObjectMessage msg = session.createObjectMessage();
				msg.setObject(user);
				return msg;
			}
		});
	}

 

声明UserHandler用来接收消息代码如下:

package com.gosun.jms.pojo;

import com.gosun.jms.domain.User;

public class UserHandler{

	public void handler(User user){
		System.out.println("异步接收消息:"+user);
	}
	
}

 Spring提供了能够以POJO的方式处理消息的能力,这些消息来自于JMS队列或者主题中,这就是Spring的强大之处。

 

三、配置消息监听器

为POJO赋予接收消息的能力还需要在spring中把他配置为消息驱动器。Spring的jms命名空间为我们提供了所需要的一切。代码如下,把上面的POJO(UserHandler),配置为消息驱动器代码如下:

<bean id="userHandler" class="com.gosun.jms.pojo.UserHandler"></bean>
	
<jms:listener-container connection-factory="connectionFactory">
	<!-- 可以有多个 -->
	<jms:listener destination="queue.destination" ref="userHandler" method="handler"/>
</jms:listener-container>

 

 上述代码中,我们在消息监听器容器中包含了一个消息监听器。消息监听器容器是一个特殊的bean,可以监控JMS目的地并等待消息的到达。一旦消息到达,他取出消息,然后把消息传给任意一个对此消息感兴趣的消息监听器。

  • <jms:listener-container>:消息驱动器容器,connection-factory="connectionFactory"属性配置了连接工厂。容器中的<jms:listener>都使用这个连接工厂进行监听.
  • <jms:listener>:消息监听器,他标识了一个bean和一个可以处理消息的方法。

 

 

分享到:
评论

相关推荐

    Spring JMS异步发收消息 ActiveMQ

    JMS(使用消息中介:ActiveMQ) JMS为JAVA开发者提供了一个与消息中介进行交互,以及发送和接收消息的标准API,而且每一个消息中介的实现都会支持JMS。(即JMS为所有消息中介提供了统一接口);JmsTemplate是Spring...

    activemq+spring实例

    spring 中使用activemq,queue 、topic的同步接收,异步接收的实例,使用的是maven的项目工程!

    Spring 实现远程访问详解——jms和activemq

    把它应用到实际的业务需求中的话我们可以在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑。 JMS 支持两种消息传递模型: 点对点(point-to-point,简称 PTP)...

    JAVA编程之Spring-activeMQ基础开发

    2 在项目中,我们为消息的生产者和发布者分别注册了两个消费者和订阅者,当有消息到达activeMQ时,消费者和订阅者会自动获取对应的消息,其中两个消费者会轮流消费消息,而两个订阅者会同时订阅所有消息;...

    spring-int-jms:使用多层、ActiveMQ 和 Netty 的 Spring 集成项目

    Spring Integration 示例使用网关描述了以 JMS 为中心的请求回复,但在这种情况下,我试图描述断开连接的异步请求回复,其中一条消息在 JMS 世界中开始并遍历 TCP 异步请求响应,原始 JMS 客户端请求需要接收响应在...

    基于ActiveMQ的jms通讯

    简单的实现了jms的发送与接收,实现了异步通讯的功能 是一个与spring相结合的代码实例

    JAVA上百实例源码以及开源项目

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    JAVA上百实例源码以及开源项目源代码

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

Global site tag (gtag.js) - Google Analytics