java jmstemplate_AMQ学习笔记 - 10. Spring-JmsTemplate之浏览

概述

浏览只是针对Queue的概念,Topic没有浏览。浏览是指获取消息而消息依然保持在broker中,而消息的接收会把消息从broker中移除。

浏览可以用来实现对Queue中消息的监控。

JMS API

浏览的概念来源于JMS,所以有必要先把JmsTemplate放一放。先看一下下面的API:

Interface javax.jms.Session

QueueBrowser createBrowser(Queue queue)创建指定Queue的Browser对象。

QueueBrowser createBrowser(Queue queue, java.lang.String messageSelector)

创建指定Queue的Browser对象,添加选择器筛选消息。

Interface javax.jms.QueueBrowser

java.util.Enumeration getEnumeration()

获取Message的枚举,每一个元素都是Message实例

void close()

通知broker可以回收分配给当前browser的资源

根据上面的API,我们应该可以这样使用:

1 QueueBrowser browser =session.createBrowser(queue);2 Enumeration msgEnum =browser.getEnumeration();3 browser.close();4

5 while(msgEnum.hasMoreElements()) {6 Message msg =msgEnum.nextElement();7 }

P.S.只是推论,没有验证。

JmsTemplate的API

JmsTemplate提供了2组*3,共计6个浏览的方法。

基本的浏览

带有选择器的浏览

鉴于我们对这种分组的习惯、消息选择器的概念都已经驾轻就熟,所以这里不再分开介绍。我们一鼓作气,解决掉吧:

Class org.springframework.jms.core.JmsTemplate

public T browse(BrowserCallback action)

从默认的Queue中浏览消息,要求设置了默认的Destination,且类型为Queue。action是一个回调对象,它负责浏览消息,并返回浏览的结果。

public T browse(Queue queue, BrowserCallback action)

从指定的Queue中浏览消息。

public T browse(String queueName, BrowserCallback action)

从指定name的Queue中浏览消息。

public T browseSelected(String messageSelector, BrowserCallback action)

从默认的Queue中浏览消息,添加了消息选择器。

public T browseSelected(Queue queue, String messageSelector, BrowserCallback action)

从指定的Queue中浏览消息,添加了消息选择器。

public T browseSelected(String queueName, String messageSelector, BrowserCallback action)

从指定name的Queue中浏览消息,添加了消息选择器。

Interface org.springframework.jms.core.BrowserCallback

T doInJms(Session session, QueueBrowser browser)

浏览队列中的消息,并返回浏览的结果。这是一个回调方法,Spring会为我们提供QueueBrowser对象,我们可以据此获取消息,并自由的转换。最后以我们希望的类型返回。

让我们先看下BrowserCallback定义的回调方法。我们在客户端和broker建立连接的整个过程中,截取这样的一段:

我们已经使用Session创建了QueueBrowser的实例,然后我们像前文的demo中那样浏览消息。我们决定对消息再做一下转换,比如如果能确定每一个消息的内容都是一个字符串,我们可以最终转换成java.util.List类型的结果。

这个片段是我们浏览Queue的整个片段,这个片段也是BrowserCallback唯一关心的问题,我们定义了这个片段的具体实现,然后交给JmsTemplate,由它在合适的时候,按照我们定义的方式浏览并返回消息。

下面给个demo:

1 List contList =jt.browse(DESTINATION_NAME,2 new BrowserCallback>() {3

4 public ListdoInJms(Session session,5 QueueBrowser browser) throwsJMSException {6

7 MessageConverter converter = newSimpleMessageConverter();8 List messContentList = new ArrayList();9

10 @SuppressWarnings("unchecked")11 Enumeration messageEnum =browser12 .getEnumeration();13 while(messageEnum.hasMoreElements()) {14 Message msg =messageEnum.nextElement();15 String text =(String) converter.fromMessage(msg);16 messContentList.add(text);17 }18 returnmessContentList;19 }20 });21

22 for(String text : contList) {23 System.out.println(text);24 }

注意:我们在15行使用了转换的类,转换的概念我们已经在08. Spring-JmsTemplate之发送中介绍过了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值