0

service-activator入力として SI メッセージのリストを取得するメソッドを持つ Bean があります。

メソッドはリストを反復処理し、そこから各 SI メッセージを取得し、SI メッセージからペイロードを取得してから、ペイロードを MQ に送信します (MQ にメッセージを送信するためにアウトバウンドチャネルアダプターを使用していません。プレーンを使用しているだけです)バニラ JMS API)。

クラス as を使用し<request-handler-advice-chain>てこのサービス アクティベーターに を設定し、ポリシー用に設定RequestHandlerRetryAdviceされた にマッピングしました。retryTemplateSimpleRetry

このメソッドでは、ペイロードが 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たが、それを手に入れることができませんでした。私のユースケースでこのアドバイスを活用することは可能ですか? はいの場合、どのように提案できますか?

返信ありがとうございます!

これからもよろしくお願いします

4

1 に答える 1