代码之家  ›  专栏  ›  技术社区  ›  Tadeusz Kopec for Ukraine yespbs

如何接收convertandsend发送的内容?

  •  10
  • Tadeusz Kopec for Ukraine yespbs  · 技术社区  · 15 年前

    我在读书 Spring Framework reference ,关于JMS集成的章节。这里有一些发送文本消息和异步接收文本消息的示例(通过侦听器)。还有一个例子 JmsTemplate 功能 convertAndSend 它将给定对象转换为消息。参考文件上说:

    通过使用转换器,您和您的应用程序代码可以关注通过JMS发送或接收的业务对象,而不关心如何将其表示为JMS消息的细节。

    但是,没有任何接收此类信息的例子。他们提到功能 receiveAndConvert 但不幸的是,它是同步接收的。
    那么,我如何异步接收它呢?当我 转换发送 Map ,结果消息将是 MapMessage ,只需在我的侦听器中检查并处理这种类型的消息?但他们承诺我不会关心它如何表示为JMS消息的细节。
    有更好的方法吗?

    2 回复  |  直到 10 年前
        1
  •  10
  •   E-Riz    10 年前

    同时 JmsTemplate 提供了基本的同步接收方法,异步接收更为复杂,超出了 JMSTEM板 .

    JMS消息的异步接收是在Spring中使用 Message Listener Containers 从JMS目的地异步获取消息并将其传递给应用程序。你可以插上一个 MessageConverter 通过 MessageListenerAdapter (将转换器插入适配器,将应用程序的侦听器插入适配器,然后将适配器插入侦听器容器)。

        2
  •  12
  •   Owen O Byrne    13 年前

    我知道有一段时间没人问这个问题了,但我也遇到了同样的问题,解决了它,并想在这里给出一个明确的代码示例。

    这是我的 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());
            }
    }
    

    然后使用标准转换消息 JsonMessageConvertor 在我的情况下,因为这是 messageConvertor 我接通了 rabbitTemplate 豆子。

    <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>
    

    希望这能帮助别人! 欧文