【问题标题】:Acking activemq using python and stomp使用 python 和 stomp 确认 activemq
【发布时间】:2019-10-28 09:03:21
【问题描述】:

我设置了一个 activemq,其中包含对 Zendesk 的大量 api 调用。我需要检索这些呼叫,然后将它们完全从队列中删除。 conn.ack 似乎不起作用!

我正在使用 python3 和最新版本的 stomp。我用它来制作初始连接脚本:https://github.com/jasonrbriggs/stomp.py/wiki/Simple-Example

https://jasonrbriggs.github.io/stomp.py/api.html 在此文档中,您似乎必须标记 .subscribe 方法的“id”标签。您使用该 ID 调用 conn.ack,但您还添加了消息 ID 作为参数。我发现消息的标头是使用侦听器函数检索的。我把它们打印出来了,它们看起来像这样:

ID:[我的工作站 id].local-49557-1560302581785-5:58:-1:1:61592

我尝试在 ID: 之后正则表达式输出整个字符串,然后我尝试正则表达式仅输出字符串末尾的数字(它看起来可能是唯一的数字),但是当我执行 conn.ack ( matchObj.group(1), 4),队列计数没有改变,我没有得到关于为什么没有的反馈。

到目前为止,连接工作得非常好——我只是无法发送这些确认。

import stomp
import time
import re

class SampleListener(object):
    def on_message(self, headers, msg):
      regex = r"ID:.*1:1:(.*)"
      print(msg)
      print(headers['message-id'])

      matchObj = re.match ( regex, headers['message-id'], re.M|re.I)
      print (matchObj.group(1))

      conn.ack (matchObj.group(1), 4)

conn = stomp.Connection10()

conn.set_listener('SampleListener', SampleListener())

conn.start()

conn.connect()

conn.subscribe('zendeskqueue', id=4, ack='client')

time.sleep(1) # secs

conn.disconnect()

上面的代码没有错误,只是存在没有输出。

【问题讨论】:

  • 你需要做一些调试,收集一些日志,客户端和代理,否则很难说发生了什么
  • 任何线索如何获得比我目前拥有的更多的详细信息?以上没有任何结果

标签: python activemq stomp


【解决方案1】:

使用 stomp.py 和 ActiveMQ 确认消息使用 ack id headers['ack']

您可以通过在侦听器上实现on_error 并启用调试日志记录来获得更详细的输出。

同时使用两者,您的代码将如下所示:

import stomp
import time
import logging

class SampleListener(object):
  def on_message(self, headers, msg):
    conn.ack(headers['ack'])

  def on_error(self, headers, body):
    print("An error occurred: headers=" + str(headers) + " ; body=" + str(body))


logging.basicConfig(level=logging.INFO)
logging.getLogger('stomp').setLevel(logging.DEBUG)

conn = stomp.Connection12()

conn.set_listener('SampleListener', SampleListener())

conn.start()

conn.connect()

conn.subscribe('zendeskqueue', id=4, ack='client')

time.sleep(1) # secs

conn.disconnect()

【讨论】:

  • 请注意,我使用的是 Stomp 1.2,但从 ActiveMQ 代码的外观来看,它应该与 1.0 一样好。
猜你喜欢
  • 2015-04-06
  • 2013-02-02
  • 2014-04-19
  • 1970-01-01
  • 2014-09-01
  • 2016-01-27
  • 2018-03-27
  • 2011-09-08
  • 1970-01-01
相关资源
最近更新 更多