前の記事では RabbitMQ を使用したメッセージの送信について説明しましたが、この記事ではメッセージの受信について説明します。
従来の JMS では、キューから情報を取得するには 2 つの方法があります。JmsTemplate を使用する同期方法と、メッセージ駆動型の Pojo を使用する非同期方法です。 Spring AMQP は、AMQP 経由で送信されたメッセージを取得する同様の方法も提供します。
RabbitTemplate によって提供される情報を受信する最も簡単な方法は、receive() メソッドです。これにより、キューから Message オブジェクトを取得できます:
Message message = rabbit.receive("spittle.test.queue");
または、設定を通じて取得することもできますデフォルトのメッセージキューは、テンプレートの設定時にキュー属性を設定することで実現されます:
<template id="rabbitTemplate" connection-factory="connectionFactory"exchange="spittle.test.exchange" routing-key="spittle.test" queue="spittle.test.queue" />
この場合、receive() メソッドを呼び出すと、パラメータを設定せずにデフォルトのキューからメッセージを取得できます:
Message message = rabbit.receive( );
Message オブジェクトを取得した後、通常、その body 属性のバイト配列を目的のオブジェクトに変換する必要があります。送信時にドメイン オブジェクトを Message に変換するのと同じように、受信した Message を変換します。ドメイン オブジェクトの作成も面倒です。ここで、代わりに RabbitTemplate の acceptAndConvert() メソッドを使用することを検討できます:
Spittle spittle = (Spittle) rabbit.receiveAndConvert("spittle.test.queue");
acceptAndConvert() メソッドは、sendAndConvert() メソッドと同じメッセージ コンバーターを使用して、Message オブジェクトを元の型に変換します。
receive() メソッドと acceptAndConvert() メソッドを呼び出すと、キュー内に待機中のメッセージがない場合はすぐに戻り、null が返されます。現時点では、プログラマは通常、キュー監視を実装するためにポーリングと必要なスレッドを自分で管理する必要があります。メッセージの到着を待つたびに同期的にポーリングしたくない場合は、Spring AMQP が提供するメッセージ駆動型の Pojo を使用してメッセージを受信する方法を見てみましょう。
メッセージ駆動型の pojo で Spittle オブジェクトを非同期的に使用したい場合は、まず次の SpittleTestHandler がこの役割を果たします。 , このクラスは AMQP に依存せず、どのようなメカニズムが渡されるかに関係なく、Spittle オブジェクトを処理できます。
ここで、Spring アプリケーション コンテキストで SpittleTestHandler を Bean として宣言する必要もあります:public class SpittleTestHandler {public void handleSpittleTest (Spittle spittle) { ... } }
最後に、メッセージが到着すると、SpittleTestHandler を呼び出すことができます:
<bean id="spittleListener"class="com.***.spittr.test.SpittleTestHandler">
上記の
以上がSpring と AMQP を使用して Java でメッセージを送受信する (パート 2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。