微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python 中的 stomp.ConnectionListener 在从 ActiveMQ 出列消息时是否保存任何数据?

如何解决python 中的 stomp.ConnectionListener 在从 ActiveMQ 出列消息时是否保存任何数据?

我想将消息从 AMQ 拉到 python。我想使用 python 进行批处理(例如,如果队列中有 1000 条消息,我需要每 100 条消息出队并处理它们,然后取出接下来的 100 条消息并进行处理……直到所有消息出队。)

这是我的batchListener的python代码

class BatchEventListner(stomp.ConnectionListener):
     def on_message(self,headers,message):
         print('received a message "%s"' % message)


batchLsnr = BatchEventListner()
self.conn = stomp.Connection(host_and_ports=hosts)
self.conn.set_listener('',batchLsnr)
self.batchLsnr = batchLsnr
self.conn.start()
self.conn.connect('username','password',wait=True)
self.conn.subscribe(destination='/queue/' + self.queue_name,id=1,ack='auto')

我编写了一个模拟器来将消息推送到 AMQ。 一旦我将 1000 条消息推送到 ActiveMQ。当消费者启动时,python 代码将开始从 ActiveMQ 拉取数据,但 python 代码一次拉取 100 多条消息。 (仅处理 100 条消息,但有 100 多条消息出队)。 IE。, 对于最后一批(100 条消息),我们在 ActiveMQ 中没有看到任何消息,但消息正在进入 Python 进程。

1.从 ActiveMQ 出列时 stomp 是否保留任何消息? 2。在批处理过程中,stomp 是否保存了任何数据?

解决方法

您可能会看到 prefetch 的结果。尝试将 SUBSCRIBE 框架中的 activemq.prefetchSize 标头设置为 1

另外,尝试将您的确认模式设置为 clientclient-individual。使用 auto 基本上会触发代理尽可能快地向客户端发送消息。

请记住,预取消息是一种性能优化,因此降低它可能会导致性能下降。当然,性能必须与其他功能因素进行权衡。我建议您进行测试和调整,直到达到所有目标或在它们之间找到可接受的折衷方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。