Python pika库零星的行为,丢弃消息

时间:2012-07-24 11:45:05

标签: python rabbitmq pika

我在生产系统中使用pika,并注意到BlockingConnection和SelectConnection都在这里和那里丢弃了一条消息,没有明显的错误或警告。不幸的是,我无法发布代码,但想要征求其他可能遇到过此类行为的用户的指导或轶事。我听说RabbitMQ是非常可靠的,所以我开始质疑鼠兔的可靠性,并想知道是否有更值得信赖的替代品?

1 个答案:

答案 0 :(得分:1)

我怀疑您可能会遇到的问题与定义basic.publish的方式有关。它总是成功的。如果出现错误(或成功,则)服务器不会有任何流量。

解决此问题的可移植方法是将发布包装在事务中:

channel.tx_select()
channel.basic_publish(exchange='foo', ...)
channel.tx_commit()

tx_commit()调用将强制服务器在成功处理收到的所有操作后使用tx.commit响应。您的申请应该等到tx.commit成功;那么你可以确定所有发送的消息都是成功的。

Rabbitmq特定扩展channel.select稍微不那么便携,导致服务器以basic.ack响应。我担心我从来没有使用过这个功能来使用pika的BlockingConnection,但你可能会有更好的成功。