当前,我在集成流程中使用队列通道,但是它使用FIFO提取方式。有没有办法将其更改为LIFO?
还有,有没有一种方法可以基于属性从队列中删除消息?
我怀疑我将需要使用PriorityChannel从FIFO切换到LIFO,但是我不知道如何实现。
@Bean
fun notificationChannel(): MessageChannel {
return MessageChannels.queue().get()
}
例如,我的QueueChannel将充满包含userId的消息。由于我只对userId消息的最新状态感兴趣,因此我想使用LIFO并删除所有具有与最新消息相同的userId的消息。
答案 0 :(得分:1)
听起来好像您并不是真的想要LIFO,而是只想要最新的给定条件。
但是,无论如何,Queue
是一个非常简单的界面。它只有几种方法,QueueChannel
仅使用poll()
,offer()
和size()
。
因此创建自定义队列应该很简单,例如基于线程安全的ConcurrentHashMap<String, Message<?>>
,密钥是您的条件。
答案 1 :(得分:1)
Queue通道将Queue作为构造函数参数public QueueChannel(Queue<Message<?>> queue)
,而spring-integration DSL提供了public static QueueChannelSpec queue(Queue<Message<?>> queue)
。因此,您可以将Collections.asLifoQueue(..)
用作上述工厂方法的参数,以获取所需的行为。