概要
JmsTemplate提供了4组*3,共计12个接收用的方法。
JmsTemplate接收所需要的资源ConnectionFactory和Destination,和发送是一致的。
接收的方法有4组:
- 基本的接收
- 接收并转换
- 带有选择器的接收
- 选择接收并转换
1.基本的接收方法
JmsTemplate提供了3个基本的接收方法,与发送的方法进行对比:
接收 | 发送 |
|
|
接收到消息之后,需要对消息进行转换,再提取消息中的数据:
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) { |
usual |
Message message = jt.receive(DESTINATION_NAME); // convert |
至少,我们不用再考虑收到的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.setReceiveTimeout(3*1000); // in milliseconds String messageSelector = "order = 1"; |
消息选择器的语法类似于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);
}