我正在使用RabbitMQ和Python从RabbitMQ服务器检索消息。如果超过5分钟并且没有收到Rabbitmq的消息,我希望该程序能够执行某些操作。
我在RabbitMQ网站上找到了示例python代码,它运行并打印收到的每条消息。我试图找出如何添加计时器,以便我可以在收到消息后超过5分钟时执行XYZ。
有关如何实现这一目标的任何想法?以下是RabbitMQ的代码:
#!/usr/bin/env python
import pika
import time
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
def callback(ch, method, properties, body):
print(" [x] Received %r" % body) # Print out received message
channel.basic_consume(callback,
queue='SlackWebhook',
no_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
答案 0 :(得分:0)
您可以创建一个仅在程序中实例化一次的Singleton对象。在此对象中,您可以创建计时器。每次从RabbitMQ接收内容时,启动计时器,使其保持运行并将其重置为零。在Singleton中,你需要有一个while True
循环来检查计时器,并在时间超过5分钟时触发一些动作。
基本思想是让计时器运行,每次从RabbitMQ接收时将其设置为零,并让观察者检查计时器是否经过了多长时间。实现可以使用Singleton或任何其他数据结构,这些数据结构将在整个程序中持续存在。如果您有多个线程或进程,则使用持久性数据库或内置线程安全的Python数据结构会更容易。
希望这会有所帮助。