2017-04-12 4 views
2

私は、キューマネージャの複数のキューにメッセージを送信するために使用するJMSアウトバウンドゲートウェイを持っています。宛先はdestinationExpression方法使用して、その場で決定されます。発信メッセージに配信遅延を動的に追加する方法はありますか。

@Bean 
public IntegrationFlow sendTo101() { 
    return flow -> flow 
      .handle(Jms 
        .outboundAdapter(context.getBean("connection101", ConnectionFactory.class)) 
        .destinationExpression("headers.destinationName") 
        .configureJmsTemplate(spec -> spec 
          .explicitQosEnabled(true) 
          .get().setDeliveryDelay(180000) 
        ) 
        .get(), 
        endpointSpec -> endpointSpec.advice(context.getBean(RequestHandlerRetryAdvice.class)) 
      ); 

} 

今すぐに来るメッセージの特定のサブセットに配信遅延を設定する必要がありますが、メッセージの内容を使用する方法はあります私は遅延を追加するかどうかを決定するかどうか?

このプロパティをチェックしてフローを別の発信ゲートウェイにリダイレクトするフィルタを追加することもできますが、それはかなり冗長なコードになりますので、より良い方法がないことを確認したかったのです。

また、メッセージによって、異なる遅延が必要です。メッセージごとに異なる遅延を設定することは可能ですか?私は遅延プロパティがメッセージプロデューサにあり、JMS仕様に従ってメッセージに設定したものではないことを認識していますが、パフォーマンスが低下してもメッセージごとに新しいJMSプロデューサを作成しても問題ありません。

ありがとうございました!

答えて

0

この場合、私が示唆できるのは、トップレベルJmsTemplate beanを持っており、より前にdeliveryDelayを設定するのが好きです。しかし、この場合、同時の変更を避けるために、同じフロー内ですべてのメッセージを同じThreadで処理する必要があります。

に基づいてDynamicJmsTemplateがあります。最後にThreadLocalを使用して、リクエストごとにpriorityreceiveTimeoutを変更します。

deliveryDelayに対するあなたのリクエストは、その機能の一部として考えることができます。

ターゲットJmsTemplateがゲッターを使用せず、プロパティに直接アクセスできるという問題のみです。ですからまず、Spring Frameworkチーム(https://jira.spring.io/browse/SPR)により良い継承のためにJmsTemplateをリファクタリングするように依頼しなければなりません。

関連する問題