2016-04-04 6 views
0

実装クラスのonMessage機能を呼び出す前に、Spring AmqpのMessageヘッダから値を選ぶ必要があるいくつかのデフォルト機能を追加する必要があります。OnMessageを呼び出す前にdefaultメソッドを追加するAmppのMessageListener

例えば、実施例以上のことから

class TestListener implements MessageListerner { 

public void onMessage(Message message){ 
// some logic 
    } 
} 

私はのonMessageが呼び出される前にMessageオブジェクトを使用して、いくつかのカスタマイズ機能を呼び出す必要があります。

あなたは自分のリスナーを中心に、簡単なラッパークラスを作成することができSpringAmqp

+0

私は質問、または多分の背後にある理由を理解していない...あなたが変更したい場合それを受け取る前にあなたがそれを送る前にそれをしてください。あるいは、単にヘッダ交換のようなものを使いたいと思うかもしれません。 – cantSleepNow

+0

メッセージがonMessageになる前にリスナー側でビジネス操作を実行する必要があります。例えば。プロデューサ側から、メッセージヘッダの値をスレッド名= t1、リスナ側で設定すると、その値を取得し、そのメッセージの一般的な操作を実行します。threadnameの値はt2などとなります。 – Akshat

+0

しかし、 'onMessage'メッセージが受信されたときにのみ呼び出されます(または何かが欠落しています)。 – cantSleepNow

答えて

0

で同じことを達成するための任意のエレガントな方法はあります。

public void onMessage(Message message) { 
    // process 
    myListener.onMessage(message) 
} 

あるいは、リスナーコンテナは、まさにこの理由のためにプロパティafterReceivePostProcessorsを持っている...

/** 
* Set {@link MessagePostProcessor}s that will be applied after message reception, before 
* invoking the {@link MessageListener}. Often used to decompress data. Processors are invoked in order, 
* depending on {@code PriorityOrder}, {@code Order} and finally unordered. 
* @param afterReceivePostProcessors the post processor. 
* @since 1.4.2 
*/ 
public void setAfterReceivePostProcessors(MessagePostProcessor... afterReceivePostProcessors) { ... } 
関連する問題