如何接收convertAndSend发送的内容?

Tad*_*pec 11 java spring jms

我正在阅读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将转换器插入到消息侦听器容器中(将转换器插入适配器,将应用程序的侦听器插入适配器,然后将适配器插入侦听器容器中).