我有一个繁重的负载(大量外部网络调用)集成流程,该流程在进入主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/

10-09 00:17