Ada*_*tan 6 python deadlock rabbitmq blockingqueue kombu
我有一个RabbitMQ服务器,作为我的一个系统的队列中心.在过去一周左右,它的制作人每隔几个小时就会完全停止.
在cantSleepNow的回答之后,我将分配给RabbitMQ的内存增加到90%.服务器有16GB的内存,消息数量不是很高(每天数百万),所以这似乎不是问题.
从命令行:
sudo rabbitmqctl set_vm_memory_high_watermark 0.9
Run Code Online (Sandbox Code Playgroud)
并与/etc/rabbitmq/rabbitmq.config:
[
{rabbit,
[
{loopback_users, []},
{vm_memory_high_watermark, 0.9}
]
}
].
Run Code Online (Sandbox Code Playgroud)
我为所有消费者和生产者使用Python.
生产者是提供呼叫的API服务器.每当呼叫到达时,都会打开一个连接,发送一条消息并关闭连接.
from kombu import Connection
def send_message_to_queue(host, port, queue_name, message):
"""Sends a single message to the queue."""
with Connection('amqp://guest:guest@%s:%s//' % (host, port)) as conn:
simple_queue = conn.SimpleQueue(name=queue_name, no_ack=True)
simple_queue.put(message)
simple_queue.close()
Run Code Online (Sandbox Code Playgroud)
消费者彼此略有不同,但通常使用以下模式 - 打开连接,并等待消息到达.连接可以长时间保持打开状态(比如几天).
with Connection('amqp://whatever:whatever@whatever:whatever//') as conn:
while True:
queue = conn.SimpleQueue(queue_name)
message = queue.get(block=True)
message.ack()
Run Code Online (Sandbox Code Playgroud)
直到大约一周前,这种设计没有引起任何问题.
Web控制台显示,消费者127.0.0.1和172.31.38.50阻止消费者172.31.38.50,172.31.39.120,172.31.41.38和172.31.41.38.
为了安全起见,我检查了服务器负载.正如预期的那样,负载平均值和CPU利用率指标很低.
为什么兔子MQ每次都这么僵局?
| 归档时间: |
|
| 查看次数: |
1063 次 |
| 最近记录: |