我使用spring-integration开发服务总线。我需要在特定时间处理来自消息存储库的一些消息。例如,如果消息的有效负载中存在executionTimestamp
参数,则它将在指定时间内执行,否则在收到消息后立即执行。
我必须使用哪种channel
和taskExecutor
?
我是否必须实现自定义Trigger
或者有一些传统的方法来实现消息处理策略?
此致
答案 0 :(得分:2)
请参阅the Delayer。
延迟处理程序支持表达式评估结果,表示以毫秒为单位的间隔(任何其toString()方法生成可以解析为Long的值的Object)以及表示绝对时间的java.util.Date实例。在第一种情况下,毫秒将从当前时间开始计算(例如,值5000将使消息从延迟器接收到的时间延迟至少5秒)。使用
Date
实例,在Date对象表示的时间之前不会释放Message。在任何一种情况下,等于非正延迟的值或过去的日期都不会导致任何延迟。相反,它将直接发送到原始发件人的线程上的输出通道。如果表达式评估结果不是Date,并且无法解析为Long,则将应用默认延迟(如果有)。
如果您不想丢失服务器崩溃时当前延迟的邮件,则可以添加MessageStore
来保留邮件。