场景:我有3个春天云流媒体应用
我正在尝试测试3&#tdd应用。我已将1&2;和2&ndd应用程序作为测试依赖项包含在内。我添加了:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-test-support</artifactId>
<scope>test</scope>
</dependency>
现在我有大约20个带有各种验证方案的xml文件。第一次测试工作正常。我可以使用以下方式获取频道的预期消息:
final Message<PaymentInstruction> mceMessage =
(Message<PaymentInstruction>) collector.forChannel(
validationBindings.mce()).take();
运行的2&nd测试是我遇到问题的地方。测试只是坐在&#39; take&#39;。
我在spring-integration-core-4.3.8.jar中进行了一些挖掘,并将问题追溯到org.springframework.integration.dispatcher.AbstractDispatcher:
@Override
public synchronized boolean addHandler(MessageHandler handler) {
Assert.notNull(handler, "handler must not be null");
Assert.isTrue(this.handlers.size() < this.maxSubscribers, "Maximum subscribers exceeded");
boolean added = this.handlers.add(handler);
if (this.handlers.size() == 1) {
this.theOneHandler = handler;
}
else {
this.theOneHandler = null;
}
return added;
}
为第一次测试添加了一个处理程序,因此它将“null”分配给“theOneHandler”
我的选择是:
环境:
答案 0 :(得分:0)
theOneHandler
是在频道只有一个订阅者时使用的调度优化。
听起来您将所有服务绑定到同一个频道,这不是您想要的。
底线是你无法做你想做的事情,因为每个服务都使用相同的频道名称(大概是input
)。
您需要在单独的应用程序上下文中加载每个服务,并将它们与桥接器连接在一起。
编辑
您也可以使用aggregated application测试它们。