我想使用Spring Integration实现HTTP端点,Spring Integration监听http请求,将请求数据作为消息发送到通道,另一个端点应该监听此通道上的消息并处理它们。
听起来很简单。但我想要实现的目标是:
所以我需要一个QueueChannel
。但如果我理解正确,从队列接收消息的唯一方法是poller
。所以第2点不会令人满意。收到消息后和轮询者看到它之前会有很小的延迟。
所以问题是:在Spring Integration中有没有简单的方法来实现这一点,我不明白?
我当然可以自己实施。例如,创建SmartLifeCycle
组件,它监听DirectChannel
并将消息放入java.util.concurrent.BlockingQueue
,并启动一个专用线程,该线程将在此队列上等待并将消息发送到另一个DirectChannel
1}}用于处理。因此,没有延迟,因为一旦BlockingQueue
不为空,线程就会被解除阻塞。
这听起来像一个"模式" - 基于专用线程的两个直接通道之间的一些队列。
也许有一种更简单的方法,已经在Spring Integration中实现了,由于缺乏这方面的经验,我只是看不到它?
答案 0 :(得分:1)
即使使用轮询器,也可以满足第2点 - 只需将fixed-delay
设置为0和/或增加接收超时(默认为1秒);轮询线程将在队列中阻塞,直到消息到达为止;然后立即再次等待。
您还可以使用执行程序通道(http线程切换到执行程序线程)。