概要


JmsTemplate提供了4组*3,共计12个接收用的方法。
 
JmsTemplate接收所需要的资源ConnectionFactory和Destination,和发送是一致的。
 
接收的方法有4组:
  1. 基本的接收
  2. 接收并转换
  3. 带有选择器的接收
  4. 选择接收并转换

1.基本的接收方法


JmsTemplate提供了3个基本的接收方法,与发送的方法进行对比:
接收 发送
  • public Message receive(Destination destination)
    从指定的Destination接收消息并返回
  • public Message receive(String destinationName)
    从指定的Destination接收消息并返回。
  • public Message receive()
    从默认的Destination接收消息并返回。
  • public void send(Destination destination, MessageCreator messageCreator)
    将消息发送到指定的Destination
  • public void send(String destinationName, MessageCreator messageCreator)
    将消息发送到指定的Destination。
  • public void send(MessageCreator messageCreator)
    将消息发送到defaultDestination。
接收到消息之后,需要对消息进行转换,再提取消息中的数据:
 Message message = jt.receive(DESTINATION_NAME);

 // convert
if (message != null && message instanceof TextMessage) {
String text = ( (TextMessage) message ).getText();
System.out.println(text);
}

2.接收并转换的方法


与转换并发送的方法相对应,接收的时候也有接收并转换的方法:
  • public Object receiveAndConvert()
    参考public Message receive(),在此基础上做了转换。
  • public Object receiveAndConvert(Destination destination)
    参考public Message receive(Destination destination),在此基础上做了转换。
  • public Object receiveAndConvert(String destinationName)
    参考public Message receive(String destinationName),在此基础上做了转换。
下面给出使用的示例,并把上面的示例也拿过来,做一下比较:
convert
 Object data = jt.receiveAndConvert(DESTINATION_NAME);

 if (data != null && data instanceof String) {
System.out.println(data);
usual
 Message message = jt.receive(DESTINATION_NAME);

 // convert
if (message != null && message instanceof TextMessage) {
String text = ( (TextMessage) message ).getText();
System.out.println(text);
至少,我们不用再考虑收到的Message具体是哪一种类型的。

3.带有选择器的接收方法


到目前为止,我们介绍的接收会无差别接收指定的Destination中的消息。如果我们只想接收其中的一部分——基于一个筛选的条件,满足条件的消息快到碗里来,不满足的就留在锅里吧。这种“挑食”的行为就是通过选择器来实现的。
04. 消息选择器中,我们已经介绍了选择器是什么一回事,并给出了基于JMS API的demo;这里我们直接列出要说的三个方法吧:
  • public Message receiveSelected(String messageSelector)
    参考public Message receive(),只是加入了筛选条件。
  • public Message receiveSelected(Destination destination, String messageSelector)
    参考public Message receive(Destination destination),只是加入了筛选条件
  • public Message receiveSelected(String destinationName, String messageSelector)
    参考public Message receive(String destinationName),只是加入了筛选条件
 
然后,再给一个demo:
发送
 String message = "a message for test convertProcessAndSend.";
jt.convertAndSend(DESTINATION_NAME, message,
new MessagePostProcessor() { public Message postProcessMessage(Message message)
throws JMSException {
message.setIntProperty("order", 1);
return message;
}
}); 
接收
 jt.setReceiveTimeout(3*1000); // in milliseconds

 String messageSelector = "order = 1";
Message message = jt.receiveSelected(DESTINATION_NAME, messageSelector); if (message != null && message instanceof TextMessage) {
String text = ((TextMessage) message).getText();
System.out.println(text);
消息选择器的语法类似于sql。你可能注意到在接收的时候,有调用jt.setReceiveTimeout(3*1000);这是因为JmsTemplate所有的接收,包括前面讲的和后面要讲的,都是阻塞式的——阻塞线程,等待接收,直到超过了预先设定的receiveTimeout,单位是毫秒。而它的初始值是0,表示无限等待。

4.选择接收并转换的方法


将选择器和转换进行叠加,我们得到了另外的三个方法:
  • public Object receiveSelectedAndConvert(String messageSelector)
  • public Object receiveSelectedAndConvert(Destination destination, String messageSelector)
  • public Object receiveSelectedAndConvert(String destinationName, String messageSelector)
 
如果你理解了选择器和转换的接收,应该可以轻松了解上面的方法。这里给出一个demo:
 jt.setReceiveTimeout(3 * 1000); // in milliseconds

 String messageSelector = "order = 1";
Object data = jt.receiveSelectedAndConvert(DESTINATION_NAME, messageSelector); if (data != null && data instanceof String) {
System.out.println(data);
}

AMQ学习笔记 - 09. Spring-JmsTemplate之接收的更多相关文章

  1. Spring实战第八章学习笔记————使用Spring Web Flow

    Spring实战第八章学习笔记----使用Spring Web Flow Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序. 其实我们可以使用任何WEB框架写流程化的应 ...

  2. 机器学习实战(Machine Learning in Action)学习笔记————09.利用PCA简化数据

    机器学习实战(Machine Learning in Action)学习笔记————09.利用PCA简化数据 关键字:PCA.主成分分析.降维作者:米仓山下时间:2018-11-15机器学习实战(Ma ...

  3. Spring实战第五章学习笔记————构建Spring Web应用程序

    Spring实战第五章学习笔记----构建Spring Web应用程序 Spring MVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够构建像Spring框架那 ...

  4. C++ GUI Qt4学习笔记09

    C++ GUI Qt4学习笔记09   qtc++ 本章介绍Qt中的拖放 拖放是一个应用程序内或者多个应用程序之间传递信息的一种直观的现代操作方式.除了剪贴板提供支持外,通常它还提供数据移动和复制的功 ...

  5. Spring 源码学习笔记10——Spring AOP

    Spring 源码学习笔记10--Spring AOP 参考书籍<Spring技术内幕>Spring AOP的实现章节 书有点老,但是里面一些概念还是总结比较到位 源码基于Spring-a ...

  6. Spring 源码学习笔记11——Spring事务

    Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了 ...

  7. AMQ学习笔记 - 12. Spring-JmsTemplate特性设置

    概述 这是关于JmsTemplate的最后一篇总结,且只会介绍几个比较重要的特性. 消息的递送模式 在发送消息给时,可以告知这是持久化的消息,还是非持久化的消息.如果是非持久化的消息,broker会将 ...

  8. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  9. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

随机推荐

  1. 实现输出h264直播流的rtmp服务器 flash直播服务器【转】

    实现输出h264直播流的rtmp服务器 RTMP(Real Time Messaging Protocol)是常见的流媒体协议,用来传输音视频数据,结合flash,广泛用于直播.点播.聊天等应用,以及 ...

  2. redis实现与分析

    http://www.kuqin.com/shuoit/20141019/342739.html

  3. GNU-ARM汇编

    GNU ARM 汇编指令(2008-10-29 00:16:10) 标签:linux gnu arm 汇编指令 it 分类:技术文摘 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C+ ...

  4. 修改FFMpeg源码—捕获丢包

    概述 最近我们项目有一个需求就是解决客户端播放RTSP视频流花屏的问题,一般来说丢包就会引起花屏,导致客户端花屏的因素又有很多,比如说: 相机到服务器丢包 服务器到客户端丢包 等等... 其中服务器到 ...

  5. flume监控之ganglia

    对于日志来说,我觉得监控意义不大,因为写的速度一般不会特别快,但是如果是spooldir source,里面一小时放入十几G的数据让flume解析,特别是在结合kafka或者其他框架的话,监控就显得重 ...

  6. VS2005 命令窗口的使用

    转自:http://www.cnblogs.com/RobotH/archive/2008/05/29/1209856.html 命令”窗口用于直接在 Visual Studio 集成开发环境 (ID ...

  7. framework&&library's root

    框架和文件集合的路径应该是相对路径而不是绝对路径 写法如下图所示:

  8. 沈逸老师PHP魔鬼特训笔记(4)

    上一课我们通过shell脚本拷贝代码,了解了静态方法和静态属性.(还有个附件PHAR包,我直接无视了) 然后在GOD文件中写了一些参数, 我们也可以这样,把方法名像拼凑字符串一样拼起来. $get_p ...

  9. 【Android车载系统 News | Tech 2】News 谷歌开发新车载系统!安卓Auto不是终点 2014-12-20

    Google在今年推出了车载安卓系统Android Auto,旨在为汽车提供娱乐.导航等功能.不过,Android Auto并不是终点,现在有消息报道,Google正在开发一个能够彻底取代汽车底层控制 ...

  10. js动态增加表格

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...