Есть FB2.0 SS и служба работающая на этом же компе. Служба подписывается на события и слушает их. Всё это работает много дней. В какой то момент перестают доходить события до службы.

Есть такая проблема, причем и на 2.0.6
Аналогично - висит служба, которая до получения события не делает ничего.
Но очень желательно не пропускать ни одного события, потому что при получении - надо сделать вычисления и положить в БД результат.
Правда, у меня в качестве клиента используется .Net Provider.

В моем случае проблема связана с потерей TCP-соединения, что в общем и понятно.

Я понимал, что конечно - для эвента есть отдельное TCP-соединение.
Но сделал предположение: если обрыв происходит не по вине железа (с 99,999% вероятностью) то оборвутся оба соединения - и для комманд, и для эвента. Поэтому недолго думая, кроме потока, ждущего эвент - периодически выполняю в основном соединении какую-то операцию, по возможности самую малозатратную. Но которая точно уйдет на сервер. Сначала думал делать Allocate Statement/Drop statement. Но в протоколе 2.1 такой набор к серверу FB отправлен не будет.
Поэтому остановился на паре начать транзакцию/commit.
Если операция прошла с ошибкой - немедленный reconnect с перерегистрацией эвента.

P.S. в 2.0.6 есть баг в эвентах - после обрыва коннекта сокет эвента остается открытым бесконечно.
keeplalive настроен. (и в основном коннекте такое не наблюдается)
Но Влад мне тогда сказал что есть и более свежие версии. :-)


Ответить