没有轮询器的网关 + 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()
- 默认值)。
我喜欢 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()
- 默认值)。