AMQ学习笔记 - 10. Spring-JmsTemplate之浏览
概述
浏览只是针对Queue的概念,Topic没有浏览。浏览是指获取消息而消息依然保持在broker中,而消息的接收会把消息从broker中移除。
浏览可以用来实现对Queue中消息的监控。
JMS API
浏览的概念来源于JMS,所以有必要先把JmsTemplate放一放。先看一下下面的API:
Interface javax.jms.Session |
|
Interface javax.jms.QueueBrowser |
|
根据上面的API,我们应该可以这样使用:
1 QueueBrowser browser = session.createBrowser(queue); 2 Enumeration<Message> 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 |
|
Interface org.springframework.jms.core.BrowserCallback<T> |
|
让我们先看下BrowserCallback定义的回调方法。我们在客户端和broker建立连接的整个过程中,截取这样的一段:
我们已经使用Session创建了QueueBrowser的实例,然后我们像前文的demo中那样浏览消息。我们决定对消息再做一下转换,比如如果能确定每一个消息的内容都是一个字符串,我们可以最终转换成java.util.List<String>类型的结果。
这个片段是我们浏览Queue的整个片段,这个片段也是BrowserCallback唯一关心的问题,我们定义了这个片段的具体实现,然后交给JmsTemplate,由它在合适的时候,按照我们定义的方式浏览并返回消息。
下面给个demo:
1 List<String> contList = jt.browse(DESTINATION_NAME, 2 new BrowserCallback<List<String>>() { 3 4 public List<String> doInJms(Session session, 5 QueueBrowser browser) throws JMSException { 6 7 MessageConverter converter = new SimpleMessageConverter(); 8 List<String> messContentList = new ArrayList<String>(); 9 10 @SuppressWarnings("unchecked") 11 Enumeration<Message> messageEnum = browser 12 .getEnumeration(); 13 while (messageEnum.hasMoreElements()) { 14 Message msg = messageEnum.nextElement(); 15 String text = (String) converter.fromMessage(msg); 16 messContentList.add(text); 17 } 18 return messContentList; 19 } 20 }); 21 22 for (String text : contList) { 23 System.out.println(text); 24 }
注意:我们在15行使用了转换的类,转换的概念我们已经在08. Spring-JmsTemplate之发送中介绍过了。
本文来自博客园,作者:一尾金鱼,转载请注明原文链接:https://www.cnblogs.com/ywjy/articles/5434098.html