码迷,mamicode.com
首页 > 编程语言 > 详细

SpringFramework4系列之SpringJMS:(四)异步接收消息 2.构建监听器

时间:2015-07-07 23:05:12      阅读:446      评论:0      收藏:0      [点我收藏+]

标签:

构建实现接口的监听器

编写监听器类并且实现监听器接口

public class ListenerDemo implements MessageListener {
    public void onMessage(Message message) {
        System.out.println(message.toString());
    }
}

注册MDP

<!-- this is the Message Driven POJO (MDP) -->
<bean id="messageListener1" class="spring.jms.ListenerDemo" />

配置listenerContainerFactory

<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="cachingConnectionFactory"/>
    <property name="destination" ref="jmsDestination"/>
    <property name="messageListener" ref="messageListener1" />
</bean>

测试

先送message 到queue里面 具体参考SpringFramework4系列之SpringJMS:(一)搭建JMS

然后初始化Spring即可,非常简单

如果使用同一个spring config,发送message的时候 spring-config已经被初始化了,这个时候已经有监听器在工作了而无需再初始化化一次spring了

ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");


构建适配器托管的监听器

编写监听器类

无需实现接口,也无需注册到spring的上下文中

public class ListenerDemo2 {
    public void onMessage(Message message) {
        System.out.println(message.toString());
    }

配置适配器

<bean id="messageAdapter"
      class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
    <constructor-arg>
        <bean class="spring.jms.ListenerDemo2"/>
    </constructor-arg>
    <property name="defaultListenerMethod" value="onMessage"/>
</bean>

配置listenerContainerFactory

将适配器作为listener 配置到 container中

<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="cachingConnectionFactory"/>
    <property name="destination" ref="jmsDestination"/>
    <property name="messageListener" ref="messageAdapter" />
</bean>

测试

先送message 到queue里面 具体参考SpringFramework4系列之SpringJMS:(一)搭建JMS

然后初始化Spring即可,非常简单。

建议 发送message 和 监听器使用不同的spring config 来避免冲突。

如果使用同一个spring config,发送message的时候 spring-config已经被初始化了,这个时候已经有监听器在工作了而无需再初始化化一次spring了

ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");


构建注解监听器

编写监听器类

使用注解@componet 来声明这个是个组件类

使用注解@JmsListener 来声明这是个监听器方法,其中 destination 表示 监听的队列名字,而containerFactory则表示使用的ListenerContainerFactory的。

@Component("listenerDemo3")
public class ListenerDemo3 {
    @JmsListener(destination = "testQueue", containerFactory = "jmsListenerContainerFactory")
    public void receiveMessage(String message) {
        System.out.println("Received <" + message + ">");
    }
}

配置listenerContainerFactory

这个时候无需再定义监听器到监听器容器中啦。 这里笔者额外定义了属性 concurrency,表示同时会生成几个consumer。

具体的有spring 自动生成啦

<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="cachingConnectionFactory"/>
    <property name="destination" ref="jmsDestination"/>
    <property name="concurrency" value="3-10"/>
</bean>

配置JMS 驱动

在spring 的config文件,需要定义jms 注解驱动,它会把注解的监听器类自动放到监听器容器中,是它开始工作。

<jms:annotation-driven/>

这里笔者做过一个实验,在没有配置component-scan,监听器也可以工作的。 看来这个注解驱动应该会自动扫描@componet的注解符号。

<context:component-scan base-package="spring"/>


SpringFramework4系列之SpringJMS:(四)异步接收消息 2.构建监听器

标签:

原文地址:http://my.oschina.net/u/1041012/blog/475834

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!