【问题标题】:Spring Integration: Direct Channel multiple outgoing endpointSpring Integration:直接通道多个传出端点
【发布时间】:2014-10-21 08:23:20
【问题描述】:
请多多包涵,因为我对 Spring Integration 还是很陌生,昨天才开始阅读。
我要做的是为来自我的 Spring 应用程序的传出 HTTP 调用执行各种负载平衡。我知道我可以使用我正在寻找的 Direct Channel 实现循环和故障转移。但我不太确定用什么来配置拨出电话。
我读过这个帖子
Adapt dynamically outbound-gateway with load-balancing
在 OP 中,我看到了这个 outbound-gateway 标记,其中包含 url 和方法属性。我是否正确地假设我可以使用它来配置我的传出 http 呼叫?希望有人能指出我正确的方向。
任何帮助将不胜感激。谢谢!
【问题讨论】:
标签:
java
spring
spring-integration
【解决方案1】:
round-robin 有一个简单的算法:每次调用都会将订阅者 index 在这些订阅者的 order 中移动一个圆圈。
因此,如果您需要使用 round-robin 调用 HTTP,您应该配置如下内容:
<channel id="balanceChannel"/>
<bridge input-channel="balanceChannel" output-channel="httpChannel"/>
<bridge input-channel="balanceChannel" output-channel="httpChannel"/>
<bridge input-channel="balanceChannel" output-channel="httpChannel"/>
<int-http:outbound-gateway request-channel="httpChannel" url="MY_URL"/>
如果任何send 到balanceChannel 最终都会在目标中出现相同的HTTP 调用。
实际上它对同一个 HTTP 没有意义,因为<int-http:outbound-gateway> 是线程安全的,并且可以从单独的线程并发使用。
round-robin 在您的目标服务不是线程安全和阻塞的情况下有意义,因此最好为该服务提供多个实例。
failover 在load-balancing="none" 时有意义。因此,第一个订阅者的失败将被处理到第二个订阅者,依此类推。