有了TCP FailOverConnectionFactory,有没有办法做自定义的健康检查,并在故障时回落到故障转移?

问题描述 投票:1回答:1

我有一个Tcp FailOverConnectionFactory,提供了两个AbstarctClientConnectionFactory。每个AbstarctClientConnectionFactory将连接到不同的服务器。

并使用TcpOutboundGateway进行消息交换。现在,我想在AbstarctClientConnectionFactory之间切换基于服务器支持的自定义健康检查。

例如:如果客户端发送消息 如果客户端发送消息 '测试健康 ',然后服务器回复为'。'或'失败'. 如果收到的回复是FAIL,那么其他AbstarctClientConnectionFactory必须用于即将到来的连接。

请建议是否可以通过Spring Integration Ip框架来实现。

spring-integration spring-integration-ip
1个回答
1
投票

逻辑基本上是这样的。

/**
     * 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.


0
投票

框架中并没有这样的内容; FailoverClientConnectionFactory 当连接无法建立时,简单的失败结束。

我们必须在工厂中添加一些机制,在打开连接后 "测试 "它。

我认为做到这一点并不难,可以在GitHub上开一个新的功能问题。

© www.soinside.com 2019 - 2024. All rights reserved.