Spring integration Spring集成-生成子块

Spring integration Spring集成-生成子块,spring-integration,Spring Integration,我想创建一个线程块,直到它得到一个pubsub消息。似乎没有办法做到这一点,因为PublishSubscribeChannel没有实现PollingChannel。唯一的选择是使用MessageHandler订阅,但该处理程序将无法在同一线程上阻塞。还有别的选择吗 我也看过MessagingTemplate类,但它似乎也不支持这一点 谢谢, Roy查看其他问题的答案 只需在receive()上将超时设置为-1(或一些非常大的数字) 当发布者发送到pubsub时;它将调用(订阅的)网桥,该网桥将

我想创建一个线程块,直到它得到一个pubsub消息。似乎没有办法做到这一点,因为PublishSubscribeChannel没有实现PollingChannel。唯一的选择是使用MessageHandler订阅,但该处理程序将无法在同一线程上阻塞。还有别的选择吗

我也看过MessagingTemplate类,但它似乎也不支持这一点

谢谢,
Roy

查看其他问题的答案

只需在
receive()
上将超时设置为-1(或一些非常大的数字)


当发布者发送到pubsub时;它将调用(订阅的)网桥,该网桥将消息发送到QueueChannel,并传递给被阻止的线程。

谢谢Gary-这种情况有点不同-在这种情况下,我会(假设)让100个线程监听相同的pubsub等待消息。我可以再次在每个线程中创建一个QueueChannel,但这感觉太过分了,因为如果我丢失消息也没关系。我希望pubsub能够在不必使用QueueChannelPS桥接的情况下进行拦截-刚刚注意到您是Spring Integration的主要提交人,所以我可能会少问一点您的答案;)没问题:)SI有两种通道类型
PollableChannel
(队列、优先级、集合)和
SubscribableChannel
(direct、executor、pubsub)。听起来您需要一个通道,位于
receive()
中的任何线程都可以从中获取消息。我们没有这样的东西。您可以编写一个非常轻量级的
MessageHandler
,它有一个内部
BlockingQueue
和一个receive方法。当调用方调用
receive()
时,它可以执行
pubsub.subscribe(this)
然后等待内部队列的轮询。
handleMessage()
将添加到队列中。当你不再感兴趣时,你会取消订阅。