【问题标题】:How to keep Python application alive and listening to ActiveMQ?如何让 Python 应用程序保持活跃并监听 ActiveMQ?
【发布时间】:2022-01-26 18:23:40
【问题描述】:

我是 Python 新手,所以也许这是一个微不足道的问题,但我还没有找到我正在寻找的答案。

我正在使用消息代理 (ActiveMQ) 和 STOMP 对数据运行不同的 Python 应用程序。我能够构建和运行一个应用程序,该应用程序将消息发送到它订阅的通道并触发侦听器方法。现在我正在尝试从一个 Python 应用程序(“发送者”)向队列发送一条消息,并从另一个 Python 应用程序(“接收者”)订阅它。但是,在接收器中设置连接/订阅者后,我如何使其保持活动状态并无限期地监听来自发送者的消息?

我发现的其他线程使用sleep 语句在技术上确实阻止了应用程序退出,但它也阻止了应用程序,因此它也不做任何事情。

【问题讨论】:

  • 你使用什么协议和客户端实现?
  • @JustinBertram hmm 不确定您所说的客户端实现是什么意思,但对 ActiveMQ 容器使用 Stomp 协议。
  • “客户端实现”将是您用于通过 STOMP 发送和接收消息的任何内容(例如 stomp.py、stompest、stompy、stomper 等)。我假设您在这里使用的是客户端,而不是实际手动构建 STOMP 帧和操作 TCP 套接字。
  • 询问 Docker 是一个红鲱鱼。相反,您需要的是一个可以执行您想做的事情的 Python 程序。它在 Docker 容器内部执行的事实是无关紧要的。它可能有多种实现,但大多数情况下,它归结为一个不断重复做事的while 循环。

标签: python activemq stomp


【解决方案1】:

听起来您需要添加一个带有 keep_running() 类型检查的循环以允许您跳出循环。此外,通常最好有办法发出重新连接以刷新连接(在 n 条消息和/或时间段之后)。

伪代码:

while keep_running():
  // check if we need to setup or reset connection & register listener
  sleep(0.2) // make this short 

// disconnect

keep_running()

def keep_running():

// some reasons to return 'false'
   return False

// else 
   return True

参考:STOMP Python library

【讨论】:

  • 我了解到您将其编写为伪代码,但 do while 不是有效的 Python。由于他们是 Python 新手,可能会让他们更加困惑
  • @Wondercricket 很公平。将其修复为更接近 python-y
  • @JustinBertram 更新以更清楚地表明意图——设置和/或重置连接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 2013-05-10
  • 1970-01-01
  • 2018-01-21
  • 2012-05-10
  • 2021-10-05
相关资源
最近更新 更多