我有一个固定的主题订阅者(例如: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侦听器中的,如果在处理期间发生任何异常。那么邮件需要重新发送。
答案 0 :(得分:1)
如果使用客户端个人确认模式,则您的代码有责任确认发送给它的消息,如果您未能确认足够的确认,则代理将停止向您发送更多消息,因为您已经用尽了已配置的可用信用。代理将假定未确认的消息处于待处理状态,直到您对它们进行确认或否定。您可以使用NACK毒化邮件,然后将其发送到DLQ或(如果配置了代理方,则重新安排发送)让代理重新传递邮件。