如何解决当 RabbitMQ 消费者闲置一天时,那么消费者会被自动移除
我面临以下有关 RabbitMQ 消费者的问题。
问题
当RabbitMQ消费者闲置一天后,消费者会被自动移除(可能是连接关闭了)。确切的问题是消费者脚本仍在运行。如果消费者已关闭,则应停止以下消费者脚本。消费者被静默删除并且脚本仍在运行,因此除非我手动查看 RabbitMQ 控制台,否则在消费者关闭时我不会收到通知。我有一些机制可以在脚本停止运行时发出通知,但是这里消费者被删除并且脚本仍在运行并且无法在消费者空闲一天时自动删除时收到通知。
run.py(消费者脚本)
import pika
def main():
parameters = pika.URLParameters(amqp_url)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch,method,properties,body):
print(" [x] Received %r" % body)
channel.basic_qos(prefetch_count=1)
channel.basic_consume(queue='hello',on_message_callback=callback,auto_ack=False)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
if __name__ == '__main__':
main()
requirements.txt
pika=1.1.0
元数据
鼠兔版本:1.1.0
心跳:60s
脚本部署在 Kubernetes docker 容器中
项目结构
- requirements.txt
- 运行.py
DockerFile
FROM python:3.9-slim
WORKDIR /consumer
ADD requirements.txt ./
RUN pip install --upgrade pip==20.2.4
RUN pip install -r requirements.txt
ADD . ./
CMD python run.py
解决方法
在我看来,一旦此容器启动,它就会以关闭容器不会撤消的方式创建或更改某些资源或状态。在我看来,这可能是 Pika 问题。我认为您的问题很可能与 this post 有关。在这种情况下,某种 close_connection() 可能会触发,但只是未能达到预期。
另一个问题可能是在关闭完成之前没有发送正确的关闭指令。在这种情况下,您可能需要自己发送这些说明。我建议您查看 PreStop Kubernetes LifeCycle Hook,它可以帮助您控制容器关闭过程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。