Долгосрочный абонент с индивидуальным клиентом ACK не работает - PullRequest
0 голосов
/ 13 мая 2019

У меня есть постоянный подписчик на тему (например: topic_a). Я пытаюсь предоставить клиенту индивидуальный ACK. В конце блока try я предоставляю подтверждение вручную, а в блоке исключения я не делаю подтверждения. Всякий раз, когда происходит ошибка, потребитель (подписчик) зависает и в конце концов останавливается. Я ПЫТАЮСЬ СДЕЛАТЬ РУКОВОДСТВО ПО РЕАЛИЗАЦИИ НА ОСНОВЕ (PUB-SUB). 1). Является ли это возможным? 2). Будет ли сообщение доставлено тому же абоненту длительного пользования?

выполнить метод внутри основного класса:

        self.conn = stomp.Connection11(self.conn_param, encoding=self.ENCODE_FORMAT)
        self.conn.start()
        self.conn.connect(wait=True, headers={'client-id': self.CLIENT_ID})
        self.conn.set_listener('', CustomListener(self.conn))

Класс слушателя:

class CustomListener(stomp.ConnectionListener):
    def __init__(self, conn, func_to_exec):
        self.conn = conn

    def on_message(self, headers, message):
        try:
            message = json.loads(message)

            /**DO SOME BUSINESS LOGIC**/

            self.conn.ack(headers.get("message-id"), int(headers.get("subscription")))
            print("message ack done..!")
        except Exception as ex:
            print("Exception in processing message :: %s"%(ex))

в слушателе on_message, если есть какие-либо исключения во время процесса. тогда сообщение должно быть доставлено.

1 Ответ

1 голос
/ 13 мая 2019

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

...