没有轮询器的Gateway + ServiceActivator

时间:2015-03-18 22:06:43

标签: spring spring-integration

我喜欢SI允许使用@Gateway@ServiceActivator为频道制作透明代理的方式。

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

  • 可轮询(队列,优先,会合)
  • 可订阅(Direct,Executor,PublishSubscribe)

看着这些,我认为所有这些都是为了以下其中一个是真的:

  • 接收者民意调查
  • 发件人阻止
  • 消息可以由多个线程一次处理

有没有办法以下列方式配置/使用SI:

  • 发件人发送到队列并且不阻止(除非显然队列已满)
  • Receiver从队列中获取,但不会轮询

非常类似于来自Java本身BlockingQueueput / take

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

1 个答案:

答案 0 :(得分:1)

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

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

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