在spring集成中,我正在尝试创建一个带有自定义范围的Direct Message通道,如下所示
...
<int:channel id="myChannel" scope="validCustomScope" />
<int:service-activator ref="validSericeReference_WithSameValidCustomScope" method="handleMessage" input-channel="myChannel"/>
...
但是,我遇到了异常..
org.springframework.integration.MessageDeliveryException: Dispatcher has no subscribers for channel
注意:此自定义范围适用于其他bean。 这个问题类似于讨论here,但没有解决。如果有人可以帮助解决这个问题,那将是一个巨大的帮助。
答案 0 :(得分:1)
服务激活器只会订阅其中一个实例。其他人将抛出Dispatcher has no subscribers
。
您的自定义作用域需要弄清楚如何在服务激活器MessageHandler
时为每个实例传播订阅(服务激活器的start()
),然后将其传播到任何创建的新实例{ {1}}端点已启动。
非常重要。
那就是说。使用范围的通道向非范围服务发送消息的好处并不清楚。
也许如果你解释一下你想要用自定义范围做什么,可能会有一个通用的解决方案,但我猜它需要在自定义范围内使用一些棘手的代码。
答案 1 :(得分:1)
这是一个很好的解释,为什么遇到“Dispatcher没有订阅者”异常。我们将在多租户环境中使用Spring Integration,因此每个租户都使用他/她自己的渠道和服务激活器。我们已将相同的范围应用于服务激活器bean定义。有什么建议吗?
<bean id="validSericeReference" class="ValidSericeClass" scope="validCustomScope"/>