我有一个Tcp FailOverConnectionFactory,提供了两个AbstarctClientConnectionFactory。每个AbstarctClientConnectionFactory将连接到不同的服务器。
并使用TcpOutboundGateway进行消息交换。现在,我想在AbstarctClientConnectionFactory之间切换基于服务器支持的自定义健康检查。
例如:如果客户端发送消息 如果客户端发送消息 '测试健康 ',然后服务器回复为'。好'或'失败'. 如果收到的回复是FAIL,那么其他AbstarctClientConnectionFactory必须用于即将到来的连接。
请建议是否可以通过Spring Integration Ip框架来实现。
逻辑基本上是这样的。
/**
* Finds a connection from the underlying list of factories. If necessary,
* each factory is tried; including the current one if we wrap around.
* This allows for the condition where the current connection is closed,
* the current factory can serve up a new connection, but all other
* factories are down.
* @throws InterruptedException if interrupted.
*/
private synchronized void findAConnection() throws InterruptedException {
...
while (!success) {
try {
this.delegate = nextFactory.getConnection();
...
}
catch (RuntimeException e) {
if (logger.isDebugEnabled()) {
logger.debug(nextFactory + " failed with "
+ e.toString()
+ ", trying another");
}
...
}
}
}
所以,你可能可以覆盖一个 AbstractClientConnectionFactory.getConnection()
的自定义检查,如果服务器返回了 FAIL
.
框架中并没有这样的内容; FailoverClientConnectionFactory
当连接无法建立时,简单的失败结束。
我们必须在工厂中添加一些机制,在打开连接后 "测试 "它。
我认为做到这一点并不难,可以在GitHub上开一个新的功能问题。