С TCP FailOverConnectionFactory есть ли способ сделать пользовательскую проверку работоспособности и при сбое откат до аварийного переключения? - PullRequest
1 голос
/ 22 апреля 2020

У меня есть Tcp FailOverConnectionFactory, поставляемый с двумя AbstarctClientConnectionFactory. Каждый AbstarctClientConnectionFactory будет подключаться к различным серверам.

И использование TcpOutboundGateway для обмена сообщениями. Теперь я хочу переключаться между AbstarctClientConnectionFactory на основе пользовательской проверки работоспособности, поддерживаемой сервером.

Например: Если клиент отправляет сообщение ' TEST HEALTH ', то сервер отвечает обратно как ' GOOD ' или ' СБОЙ ». Если получен ответ FAIL, то для предстоящих подключений необходимо использовать другой AbstarctClientConnectionFactory.

Пожалуйста, предложите, если это возможно через Spring Integration Ip framework.

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Лог c по сути такой:

/**
     * 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 голосов
/ 22 апреля 2020

Нет ничего подобного в рамках; FailoverClientConnectionFactory просто перестает работать, когда соединение не может быть установлено.

Мы должны добавить какой-то механизм на заводе, чтобы "проверить" соединение после его открытия.

Надеюсь не думаю, что это будет слишком сложно сделать; не стесняйтесь, чтобы открыть новую проблему функции на GitHub.

...