Надежный подписчик с индивидуальным ACK для клиента не работает

У меня есть постоянный подписчик на тему (например: 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, если возникнет какое-либо исключение во время процесса. то сообщение необходимо повторно доставить.


person Kannan K    schedule 13.05.2019    source источник


Ответы (1)


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

person Tim Bish    schedule 13.05.2019