Когда мой процесс умирает, могу ли я добровольно закрыть сеанс диффузии?

Я разрабатываю управляющий клиент, который подключает внутреннюю систему к дереву тем. Бэкэнд имеет несколько тысяч конечных точек, а дерево тем имеет соответствующее количество тем.

Во время разработки и тестирования я часто останавливаю и перезапускаю мой клиент, но предыдущие сеансы, размещенные на сервере, продолжают работать еще 60 с, что означает, что мое завещание сеанса (что мои темы будут удалены) не выполняется и последующее выполнение моего управляющего клиента не может добавлять темы и не регистрироваться в качестве средства обновления тем (поскольку предыдущий сеанс не истек).

Поэтому я убиваю и перезагружаю сервер Diffusion, который не элегантен и легко забыт.

Предоставленные сеансы живут дольше, чем индивидуальное соединение для надежности, но в этом сценарии я хочу закрыть сеанс. Как этого достичь?

2 ответа

Решение

60 секунд - тайм-аут по умолчанию для повторного подключения. Сервер ожидает в течение этого периода первого сеанса для повторного подключения, прежде чем будет выполнен сеанс.

Клиент может сократить это время или вообще отключить переподключение, настроив фабрику сеансов, используемую для установления соединения.

Session session = Diffusion.sessions()
  .reconnectionTimeout(1000 /* ms */)
  .open("wss://myserver");

или же

Session session = Diffusion.sessions()
  .noReconnection()
  .open("wss://myserver");

Вы не упомянули язык, на котором вы разрабатываете управляющий клиент, поэтому я буду использовать Java. Процесс похож на других языках.

У сеанса есть метод close, который можно использовать для закрытия сеанса.

Вам решать, как / когда вы хотите закрыть сеанс. Один из подходов заключается в использовании крюка отключения:

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    public void run() {
        session.close();
    }
}, "Shutdown-thread"));

Это закроет сеанс при выходе из программы.

Другие вопросы по тегам