我有一个繁重的负载(大量外部网络调用)集成流程,该流程在进入主Service Activator之前使用PriorityQueue。我想添加执行程序通道以改善系统负载,但是我看不到任何直接的方法来组合这些通道。
<int:channel id="monitorInPriorityUpdate">
<int:priority-queue/>
</int:channel>
<int:transformer id="monitorLogTransformerStub"
input-channel="monitorInPriorityUpdate" output-channel="monitorInUpdate"
expression="payload" />
<int:channel id="monitorInUpdate">
<int:dispatcher task-executor="monitorExecutor"/>
</int:channel>
我需要创建2个其他组件才能完成这项工作,但是有没有一种方法可以在不添加新组件的情况下将几个Spring Integration Channels组合在一起呢?
最佳答案
实际上,看起来好像信息不畅。但我尝试猜测。你需要这个:
<int:channel id="priorityChannel">
<int:priority-queue/>
</int:channel>
<int:bridge input-channel="priorityChannel" output-channel="executorChannel">
<int:poller fixed-rate="100"/>
</int:bridge>
<int:channel id="executorChannel">
<int:dispatcher task-executor="threadPoolExecutor"/>
</int:channel>
在这里,您可以使用网桥将消息从一个通道转移到另一个通道。
或这个:
<int:channel id="priorityChannel">
<int:priority-queue/>
</int:channel>
<int:service-activator input-channel="priorityChannel" ref="service">
<int:poller fixed-rate="100" task-executor="threadPoolExecutor"/>
</int:service-activator>
在这里,您只需使用Poller将消息从priorityChannel传递到taskExecutor。
在一个通道中混合考虑是异常的。每种渠道类型都扮演自己的创造角色。
您想要实现的不仅是最小化键入,即使碰巧是您的解决方案,它也将非常复杂且不可靠。
关于java - 在Spring Integration中合并几个 channel ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20487264/