2017-01-24 7 views
0

更新されたプロパティを持つ春AMQPメッセージは、メッセージを取得している再キューイングされますが、メッセージのプロパティは再度キューに入れる私は更新されたプロパティを持つメッセージを再キューイングする必要があり、私はユースケースを持って

public class TestListener implements MessageListener{ 


@Override 
public void onMessage(Message arg0) { 

    MessageProperties properties = arg0.getMessageProperties(); 
    int count = properties.getMessageCount(); 
    System.out.println(count); 
    properties.setMessageCount(++count); 
    throw new AmqpException("test"); 
} 

しかし、更新取得されていませんcountの値は常に0をそのまま出力します

答えて

0

これはできません - amqpプロトコルはメッセージを拒否するときにデータを返すことをサポートしていません。

自分でメッセージを再発行する必要があります(例:RabbitTemplate.send()コール)。

"システム"プロパティを自分の目的に使用しないでください。 messageGetProperties().set("myHeader", count++)を使用してください。

+0

ヘッダーにカスタムプロパティを追加すると、同じ値が得られます。私たちは、ARRすなわちパブリッククラスTestListenerは[]のMessageListener { @Override ます。public voidのonMessage(メッセージのarg0){ バイトを実装して呼び出すいくつかのAPIの状況に基づいて、メッセージをn回の一切をREQないする必要があるユースケースを持っています= arg0.getBody();文字列someValue =新しい文字列(arr); //成功しなかった場合は、いくつかのAPI呼び出しを行います(このロジックは何度も試してください)。 – Akshat

+0

前に述べたように、メッセージを拒否してもそれを再発行する必要はありません。 'messageCount'プロパティは特別な読み取り専用プロパティです。 'RabbitTemplate.receive()'メソッドを使用する場合、キュー内のメッセージ数の推定値です。メッセージリスナーには値が設定されません。カスタムヘッダーを使用する必要があり、メッセージを自分で再発行する必要があります。メッセージを拒否することはできません(変更したい場合)。 –