文档章节

SpringFramework4系列之SpringJMS:(四)异步接收消息 1.基本介绍

Garrry
 Garrry
发布于 2015/07/07 12:40
字数 605
阅读 302
收藏 5

以往我们监听消息队列的时候,通常都是用EJB的MDB(Message-driven bean). 这需要EJB容器的支持。springframework4 对JMS的支持 使得我们使用常规的POJO就可以作为监听器 接收消息队列的信息了。

使用MDP 接收消息

Message-Driven Pojos 其实就是一种普通的POJO,只是实现了 MessageListener 接口。

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class ExampleListener implements MessageListener {    

    public void onMessage(Message message) {        
        if (message instanceof TextMessage) {            
            try {
                System.out.println(((TextMessage) message).getText());
                }            
             catch (JMSException ex) {                
                 throw new RuntimeException(ex);
                }
            } else {            
                throw new IllegalArgumentException("Message must be of type TextMessage");
        }
    }
}

SessionAwareMessageListener 接口

    这个接口是Spring自身提供的接口,类似MessageListener接口,它多了Session的处理能力,使得在接收到消息的时候

能够对Session进行处理。

package org.springframework.jms.listener;

public interface SessionAwareMessageListener {    

    void onMessage(Message message, Session session) throws JMSException;

}

MessageListenerAdapter 类

这个类也是Spring自身提供的一个适配器,它的作用是 适配任何一个pojo 作为 监听器 而不用显式地实现以上提到的2个接口。

配置方式有点类似JMStemplate, 需要在Spring的config文件里面 显式地定义它, 并告知需要适配哪个类和方法。

<bean id="messageListener" 
    class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
        <constructor-arg>
            <bean class="jmsexample.DefaultTextMessageDelegate"/>
        </constructor-arg>
        <property name="defaultListenerMethod" value="receive"/>
 </bean>
public class DefaultResponsiveTextMessageDelegate {
    public void receive(TextMessage message){
        //handle message here
    }
}

ListenerContainer

顾名思义,它是一个监听器容器,基于Spring MDP的listener 都需要放到这个容器里面 才能正常工作。

它的定义很简单,在spring config文件里面 显示声明一个Container, spring 默认提供了DefaultMessageListenerContainer。

并指定 connectionFactory,destination和 监听类

<!-- and this is the message listener container... -->
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="connectionFactory"/>
    <property name="destination" ref="destination"/>
    <property name="messageListener" ref="messageListener" />
</bean>

注册MDP 到Spring

MDP是需要放到 beans 池中交给spring 来管理的。

如果是使用适配器方式来声明监听器应该不是需要再注册这个MDP了(笔者还未经过实际测试)

<!-- this is the Message Driven POJO (MDP) -->
<bean id="messageListener" class="jmsexample.ExampleListener" />

总结

  1. 需要编写一个pojo来作为 监听器。这个 监听器可实现 MessageListener或者SessionAwareMessageListener 接口

  2. 如果不想实现接口 可以交给MessageListenerAdapter 这个适配器来管理。

  3. MDP 是需要注册到 spring 的 上下文 来管理的

  4. Spring 设定了 ListenerContainer 来管理监听器。所以说要实现 监听器,就必须声明一个或若干个ListenerCotainer


© 著作权归作者所有

Garrry
粉丝 25
博文 46
码字总数 48703
作品 0
浦东
技术主管
私信 提问
SpringFramework4系列之SpringJMS:(四)异步接收消息 2.构建监听器

在Spring中,构建监听器 有三种方式: 实现监听器接口 适配器托管 注解监听器 其中,实现接口和注解监听器 都需要一个监听器容器的支持。 构建实现接口的监听器 编写监听器类并且实现监听器接...

Garrry
2015/07/07
0
2
消息中间件系列五、rabbit消息的确认机制

前言:这是中间件一个系列的文章之一,有需要的朋友可以看看这个系列的其他文章: 消息中间件系列一、消息中间件的基本了解 消息中间件系列二、Windows下的activeMQ和rabbitMQ的安装 消息中间...

我巴巴
2018/10/11
0
0
SpringFramework4系列之SpringJMS:(一)搭建JMS-注解加XML版

Maven dependency maven的dependency用着 隐形的依赖传递性,如果只是用到 JMS这部分功能 引用一下Maven坐标即可 <dependency> <groupId>org.springframework</groupId> <artifactId>spring......

Garrry
2015/07/06
0
0
C#网络编程系列文章(七)之UdpClient实现异步UDP服务器

原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列目录 C#网络编程系列文章(一)之Socket实现异步TCP服务器 C#网络编...

zhujunxxxxx
2015/03/16
0
0
C#网络编程系列文章(八)之UdpClient实现同步UDP服务器

原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列目录 C#网络编程系列文章(一)之Socket实现异步TCP服务器 C#网络编...

zhujunxxxxx
2015/03/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ngrok 外网映射工具

ngrok介绍 许多刚学java web的同学(包括我自己)肯定都非常好奇,如何在外网上访问自己做的项目,跟我们本地访问tomcat有什么区别? 今天就向大家介绍一个非常强大的外网映射工具:ngrok.ngrok可以...

edison_kwok
52分钟前
2
0
Spark Streaming的优化之路——从Receiver到Direct模式

          作者:个推数据研发工程师 学长 1 业务背景 随着大数据的快速发展,业务场景越来越复杂,离线式的批处理框架MapReduce已经不能满足业务,大量的场景需要实时的数据处理结果来...

个推
今天
4
0
壮丽70年·奋斗新时代|蒸妙集团熏蒸中会阴熏蒸的神奇好处

聚结相合之处为会。会阴居两阴间,为督、任、冲三脉的起点,三脉背出两阴之间,会聚阴部,因名会阴。会阴,经穴名。出《针灸甲乙经》。会阴别名屏翳、下极、金门。属任脉。在会阴部,男性当阴...

公益传承
今天
2
0
pentaho-kettle-8.2.0.0-R源码开发环境搭建

1.从Kettle官网下载源码,本文使用的是pentaho-kettle-8.2.0.0-R 下载地址:https://codeload.github.com/pentaho/pentaho-kettle/zip/8.2.0.0-R 2.打开eclipse,选择一个新的工作空间,然后设...

gq_2010
今天
1
0
lua web快速开发指南(7) - 高效的接口调用 - httpc库

httpc库基于cf框架都内部实现的socket编写的http client库. httpc库内置SSL支持, 在不使用代理的情况下就可以请求第三方接口. httpc支持header、args、body、timeout请求设置, 完美支持各种h...

水果糖的小铺子
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部