service-activator
入力として SI メッセージのリストを取得するメソッドを持つ Bean があります。
メソッドはリストを反復処理し、そこから各 SI メッセージを取得し、SI メッセージからペイロードを取得してから、ペイロードを MQ に送信します (MQ にメッセージを送信するためにアウトバウンドチャネルアダプターを使用していません。プレーンを使用しているだけです)バニラ JMS API)。
クラス as を使用し<request-handler-advice-chain>
てこのサービス アクティベーターに を設定し、ポリシー用に設定RequestHandlerRetryAdvice
された にマッピングしました。retryTemplate
SimpleRetry
このメソッドでは、ペイロードが MQ に正常に送信された場合に、各 SI メッセージに "SUCCESS" という値を持つservice-activator
ヘッダー (たとえば ) を追加するロジックを入れました。MESSAGE_SENT_STATUS
EDIT1 [[ これは私のロジックがどのように見えるかです:
public void doSendMessage(List<Message<?> inputMsgs) {
for(Message<?> msg : inputMsgs) {
if(msg.getHeaders().get("MESSAGE_SENT_STATUS") != null)
continue;
Object payload = msg.getPayload();
//some code logic to send 'payload' to a MQ goes here
msg.getHeaders().put("MESSAGE_SENT_STATUS","SUCCESS");
return;
}
}
//I've just typed in the code logic; so pls ignore any typos for syntax errors.
]]
service-activator
例外が発生してメソッドが再試行された場合に備えて、このヘッダーがメッセージに保持されるかどうかを知りたいですか?
例として、リストに 3 つの SI メッセージが含まれているとします。
1 番目と 2 番目の SI メッセージは MQ に正常にデポジットされました (これは、これらのメッセージがMESSAGE_SENT_STATUS
"SUCCESS" という値を持つヘッダーで強化されたことを意味します) が、3 番目の SI メッセージをデポジットしようとしたときに例外が発生しました。
List の繰り返しにコードを追加してヘッダーをチェックし、MESSAGE_SENT_STATUS
その値が「SUCCESS」の場合は、その繰り返しをスキップします (基本的には を配置しますcontinue
) 。MQで 3 番目のメッセージのみが破棄されるようにしますか?
または、これはステートレスな再試行のケースであり、すべてのメッセージが MQ にプッシュされます (MESSAGE_SENT_STATUS
存在しないため) ?
上記のユースケースに活用できるかどうかを確認するためにマニュアルも参照していましExpressionEvaluatingRequestHandlerAdvice
たが、それを手に入れることができませんでした。私のユースケースでこのアドバイスを活用することは可能ですか? はいの場合、どのように提案できますか?
返信ありがとうございます!
これからもよろしくお願いします