我有一個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))
);
}
現在有一個需要交付的延遲設置爲進來的消息的某些子集有沒有辦法使用該消息的內容確定我是否應該添加延遲或不?
我可以有一個過濾器進一步檢查此屬性,並將流重定向到另一個出站網關,但這將是相當多的冗餘代碼,所以我想確保沒有更好的方法。
另外,不同的消息需要不同的延遲。是否有可能爲每封郵件設置不同的延遲時間?我意識到延遲屬性在Message Producer上,而不是根據JMS規範在消息上設置的內容,但即使阻礙了性能,我仍然可以爲每條消息創建一個新的JMS生產者。
感謝您的幫助!