BITERP / PinkRabbitMQ

Внешняя Native API компонента для взаимодействия с RabbitMQ из 1С
MIT License
264 stars 107 forks source link

Разрыв соединения через ~3 минуты #49

Open Libero82 opened 3 years ago

Libero82 commented 3 years ago

Необходимо подключиться к кролику и ожидать сообщения.

Клиент.Connect("127.0.0.1", 5672, "user", "password", "vhost"); Потребитель = Клиент.BasicConsume(ИмяОчереди, "", Истина, Ложь, 0);

Но примерно через 3 минуты соединение разрывается. Похожая проблема описана здесь и дано решение. Connection lost error after ~3 minutes.

Как добавить обработку onHeartbeat ? virtual void onHeartbeat(AMQP::TcpConnection *connection) { std::cout << "heartbeat" << std::endl; connection->heartbeat(); }

P.S. Не силен в c++, поэтому обращаюсь к сообществу :)

Libero82 commented 3 years ago

Для сохранения коннекта, требовалось добавить поддержку Heartbeat. Для версии 1.10 был переопределен класс handler-а

class MyEventHandler : public AMQP::LibEventHandler { public: MyEventHandler(struct event_base evbase) : AMQP::LibEventHandler(evbase) {} / virtual void onError(AMQP::TcpConnection connection, const char message) { std::cout << "ERROR: " << message << std::endl; } / virtual void onHeartbeat(AMQP::TcpConnection connection) { connection->heartbeat(); } };

RabbitMQClient::RabbitMQClient(): readQueue(1), connection(nullptr) {

eventLoop = event_base_new();
//handler = new AMQP::LibEventHandler(eventLoop);
handler = new MyEventHandler(eventLoop);

}

ipalenov commented 3 years ago

@Libero82 Сделано в сборке https://github.com/BITERP/PinkRabbitMQ/releases/tag/dev2.0.2.12. Прошу протестировать.