自定义Spring Scope不适用于Message Channel

时间:2014-03-14 21:40:12

标签: java spring message-queue spring-integration

在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,但没有解决。如果有人可以帮助解决这个问题,那将是一个巨大的帮助。

2 个答案:

答案 0 :(得分:1)

服务激活器只会订阅其中一个实例。其他人将抛出Dispatcher has no subscribers

您的自定义作用域需要弄清楚如何在服务激活器MessageHandler时为每个实例传播订阅(服务激活器的start()),然后将其传播到任何创建的新实例{ {1}}端点已启动。

非常重要。

那就是说。使用范围的通道向非范围服务发送消息的好处并不清楚。

也许如果你解释一下你想要用自定义范围做什么,可能会有一个通用的解决方案,但我猜它需要在自定义范围内使用一些棘手的代码。

答案 1 :(得分:1)

这是一个很好的解释,为什么遇到“Dispatcher没有订阅者”异常。我们将在多租户环境中使用Spring Integration,因此每个租户都使用他/她自己的渠道和服务激活器。我们已将相同的范围应用于服务激活器bean定义。有什么建议吗?

<bean id="validSericeReference" class="ValidSericeClass" scope="validCustomScope"/>