没有轮询器的网关 + ServiceActivator

Gateway + ServiceActivator without poller

我喜欢 SI 允许使用 @Gateway@ServiceActivator 对通道进行透明代理的方式。

我在看 http://docs.spring.io/spring-integration/reference/html/messaging-channels-section.html#channel-interfaces-subscribablechannel。有两种类型的频道:

看着这些,在我看来,所有这些都是为了满足以下条件之一:

有没有一种方法可以通过以下方式配置/使用 SI:

非常类似于 put / take 来自 BlockingQueue 来自 Java 本身。

我是不是忽略了一些限制?此外,如果在 Spring 中还有其他替代方案用于我正在尝试使用类似接口(即不必手动发送消息,而是使用接口以透明方式发送消息)的操作(基本上是异步事件总线) , 我很高兴听到他们的消息。

如果您使用 QueueChannel 并将轮询器的 receiveTimeout 设置为 -1,框架将执行您想要的操作 - 轮询器线程将阻塞在 receive() 上等待消息(负超时,它在幕后使用 take())。

默认情况下(对于轮询消费者)max-messages-per-poll 也是 -1(无穷大),这意味着根本没有 "polling"(在第一次触发之后),只是阻塞。

如果队列有限制,发送方将阻塞直到有 space(当使用 -1 的发送超时时它使用 put() - 默认值)。