Java ServiceActivator';随机';取消订阅PublishSubscribeChannel

Java ServiceActivator';随机';取消订阅PublishSubscribeChannel,java,spring,spring-integration,Java,Spring,Spring Integration,我有一个用@ServiceActivator(“CH1”)注释的方法,其中“CH1”的定义是: @Bean(name = "CH1") MessageChannel ch1() { return new PublishSubscribeChannel } 以及其他可轮询频道通过发布到此频道 @BidgeTo(value=“CH1”,poller=@poller(“myPoller”)) 大多数时候,事情似乎都很顺利;但是,消息处理程序似乎是随机地从“CH1”取消订阅的,我在

我有一个用@ServiceActivator(“CH1”)注释的方法,其中“CH1”的定义是:

  @Bean(name = "CH1")
  MessageChannel ch1() {
    return new PublishSubscribeChannel
  }
以及其他可轮询频道通过发布到此频道

@BidgeTo(value=“CH1”,poller=@poller(“myPoller”))

大多数时候,事情似乎都很顺利;但是,消息处理程序似乎是随机地从“CH1”取消订阅的,我在日志中看到:

[DEBUG] (pool-2-thread-1) org.springframework.integration.dispatcher.BroadcastingDispatcher: No subscribers, default behavior is ignore

现在我知道我可以改变订阅人数,但我不明白为什么事情似乎是随机取消订阅?在此错误之后,它将返回到处理一些消息。消息处理程序在处理消息时是否取消订阅,或者正在使用的执行器是否已满?我在日志中没有发现与此相关的错误,也没有发现取消订阅或将订阅计数更新为日志中的“CH1”的错误。

这没有意义。请分享一些从框架角度复制的测试用例

关于此事的源代码如下所示:

if (dispatched == 0 && this.minSubscribers == 0 && logger.isDebugEnabled()) {
    if (sequenceSize > 0) {
        logger.debug("No subscribers received message, default behavior is ignore");
    }
    else {
        logger.debug("No subscribers, default behavior is ignore");
    }
}
只有在以下情况下,我们才能转到
序列==0

Collection<MessageHandler> handlers = this.getHandlers();
if (this.requireSubscribers && handlers.size() == 0) {
    throw new MessageDispatchingException(message, "Dispatcher has no subscribers");
}
int sequenceSize = handlers.size();

(至少使用INFO logging进行日志记录时)。

看起来我在处理程序有机会订阅CH1之前就开始轮询了。我不确定处理这个问题的最佳方法,但如果我将minSubscribers和ignoreFailures分别设置为1和false,则效果良好。是的,可能是这样。但是看起来我们已经为轮询消费者解决了一次
阶段
问题:
if (logger.isInfoEnabled()) {
    logger.info("Channel '" + this.getFullChannelName() + "' has " + counter + " subscriber(s).");
}