我正在阅读Spring Framework参考,关于JMS集成的章节.有一些示例用于发送文本消息并异步接收它们(由侦听器).并且还有一个将给定对象转换为消息的JmsTemplate函数示例convertAndSend.参考文献说:
通过使用转换器,您和您的应用程序代码可以专注于通过JMS发送或接收的业务对象,而不关心它如何表示为JMS消息的详细信息.
但没有接收此类消息的示例.他们提到功能,receiveAndConvert但不幸的是,它同步接收.
那我怎么异步接收呢?我必须知道,当我convertAndSenda Map,结果消息将是a MapMessage,并且只是检查我的监听器中是否有这种类型的消息并处理它?但是他们承诺我不会关心它如何被表示为JMS消息的细节.
那么还有更好的方法吗?
小智 12
我知道已经有一段时间了,但是我遇到了同样的问题,解决了它,并想在这里给出一个明确的代码示例.
这是我的MessageListener.这实现了onMessage(Message)异步拦截消息的方法.
package com.package.amqp;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.amqp.support.converter.JsonMessageConverter;
import com.package.model.User;
public class TestListener implements MessageListener {
public void onMessage(Message message) {
JsonMessageConverter jmc = new JsonMessageConverter();
User u = (User)jmc.fromMessage(message);
System.out.println("received: " + u.getFirstName());
}
}
Run Code Online (Sandbox Code Playgroud)
然后JsonMessageConvertor在我的情况下使用标准转换消息,因为这是messageConvertor我插入我的rabbitTemplatebean.
<bean id="rabbitConnectionFactory" class="org.springframework.amqp.rabbit.connection.SingleConnectionFactory">
<constructor-arg value="10.10.1.2"/>
<property name="username" value="guest"/>
<property name="password" value="guest"/>
</bean>
<bean class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="rabbitConnectionFactory"/>
<property name="queueName" value="queue.helloWorld"/>
<property name="messageListener" ref="someListener"/>
</bean>
<bean id="someListener" class="com.package.amqp.TestListener"></bean>
<bean id="rabbitTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
<property name="connectionFactory" ref="rabbitConnectionFactory"/>
<property name="messageConverter">
<bean class="org.springframework.amqp.support.converter.JsonMessageConverter"/>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
希望这有助于某人!欧文
ska*_*man 10
虽然JmsTemplate提供了基本的同步接收方法,但异步接收却要复杂得多,而且超出了范围JmsTemplate.
JMS消息的异步接收是在Spring中使用Message Listener Containers完成的,它们从JMS目标异步获取消息并将它们传递给您的应用程序.您可以MessageConverter通过MessageListenerAdapter将转换器插入到消息侦听器容器中(将转换器插入适配器,将应用程序的侦听器插入适配器,然后将适配器插入侦听器容器中).
| 归档时间: |
|
| 查看次数: |
10343 次 |
| 最近记录: |