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