2009-09-03 16 views
10

私はSpring Framework referenceのJMS統合に関する章を読んでいます。テキストメッセージを送信し、非同期に受信する(リスナーによって)いくつかの例があります。また、与えられたオブジェクトをメッセージに変換するJmsTemplate関数convertAndSendの例もあります。convertAndSendから送信されたものを受け取る方法は?

あなたとアプリケーションコードは、JMSを介して送受信されているビジネスオブジェクトに重点を置くことができ、JMSメッセージとしての表現方法の詳細には関係しません。

しかし、このようなメッセージを受信するための例はありません。彼らは機能receiveAndConvertについて言及していますが、残念ながら、同期的に受信します。
私はそれをどのように非同期的に受け取るのですか?私はMapconvertAndSendとき、結果のメッセージがMapMessageこと、そしてちょうどこの種類のメッセージのための私のリスナーにチェックして、それを処理することを認識しなければなりませんか?しかし、彼らはそれがJMSメッセージとしてどのように表現されるかについての詳細には関心がないと約束しました。
もっと良い方法がありますか?

答えて

9

JmsTemplateは基本的な同期受信方式を提供しますが、非同期受信は非常に複雑であり、JmsTemplateの範囲を超えています。 JMSメッセージの

非同期受信は非同期JMS宛先からメッセージを取り、あなたのアプリケーションに渡すMessage Listener Containersを使用して、春に行われます。 MessageListenerAdapterを介してメッセージリスナーコンテナにMessageConverterを接続することができます(コンバーターをアダプタに接続し、アプリケーションのリスナーをアダプタに接続してから、アダプタをリスナーコンテナに差し込みます)。

11

は、私は、これは頼まれたので、それがしばらくしているけど、私は、同じ問題を抱えていた、それを解決し、ここに明示的なコード例を与えたいと思いました。

は、ここに私のMessageListenerです。これにより、メッセージを非同期に傍受する方法onMessage(Message)が実装されます。これは私が私のrabbitTemplate豆に差し込まmessageConvertorあるよう

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を使用して変換されます。

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

オーウェンのMessageListenerのサービスベーターinsteaでメッセージを送受信する方法

+0

? – luksmir

+0

@luksmir、私はSpring Integrationに精通していませんが、http://stackoverflow.com/questions/10351948/using-spring-integration-with-rabbitmqが役立ちますか? –

関連する問題