【发布时间】:2016-12-31 18:57:54
【问题描述】:
我想使用 Spring Integration 实现 HTTP 端点,它监听 http 请求,将请求数据作为消息发送到通道,另一个端点应该监听该通道上的消息并处理它们。
听起来很简单。但我想要实现的是:
- 应按顺序处理消息。
- 应尽快处理消息(如果队列已为空,则在 http 请求后立即处理)。
- http 请求应在收到消息后立即响应,而不是在处理完之后,因此发送方将只知道收到了该消息以进行处理。
- 我不想使用外部队列,例如 RabbitMQ。
所以我需要一个QueueChannel。但如果我理解正确,从队列接收消息的唯一方法是poller。所以第2点将不满足。收到消息后到 poller 看到它之前会有一点延迟。
所以问题是:在我没有看到的 Spring Integration 中是否有任何简单的方法可以实现这一点?
当然我可以自己实现。例如创建SmartLifeCycle 组件,它监听DirectChannel 并将消息放入java.util.concurrent.BlockingQueue,并启动一个专用线程,该线程将在此队列上等待并将消息发送到另一个DirectChannel 进行处理。所以不会有延迟,因为只要BlockingQueue 不为空,线程就会被解除阻塞。
这听起来像是一种“模式”——基于专用线程的两个直接通道之间的一些队列。
也许有一种更简单的方法,已经在 Spring Integration 中实现了,由于缺乏这方面的经验,我只是没有看到?
【问题讨论】:
标签: java spring spring-integration