当前,我在集成流程中使用队列通道,但是它使用FIFO提取方式。有没有办法将其更改为LIFO?
另外,有没有一种方法可以基于属性从队列中删除消息?
我怀疑我需要使用PriorityChannel从FIFO切换到LIFO,但是我不知道如何实现。
@Bean
fun notificationChannel(): MessageChannel {
return MessageChannels.queue().get()
}
例如,我的QueueChannel将充满包含userId的消息。因为我只对userId消息的最新状态感兴趣,所以我想使用LIFO并删除所有具有与最新消息相同的userId的消息。
最佳答案
听起来您好像并不是真的想要LIFO,而是只想要最新的给定条件。
但是,不管怎么说,Queue
是一个非常简单的接口(interface)。它只有几种方法,QueueChannel
仅使用poll()
,offer()
和size()
。
因此,创建自定义队列应该很简单,例如基于线程安全的ConcurrentHashMap<String, Message<?>>
,密钥为您的条件。