如果队列达到限制,Pika python将等待RabbitMQ发布程序

如果队列达到限制,Pika python将等待RabbitMQ发布程序,python,rabbitmq,pika,Python,Rabbitmq,Pika,我有一个场景,一个python脚本,它将发布150k条消息,每条消息的最大大小为10kb。然后我将队列限制设置为最大5000条消息。然后,发布者将消息发布到队列中,直到它达到5000条消息的限制。然后消费者将尝试使用该消息 我想问的是,如果队列已满,publisher是否可以等待发布消息?不丢弃消息。将再次检查队列是否可用,然后publisher将发布数据。RabbitMQ团队监视并仅有时回答有关StackOverflow的问题 如果您使用的是arecent RabbitMQ版本(如3.7.5

我有一个场景,一个python脚本,它将发布150k条消息,每条消息的最大大小为10kb。然后我将队列限制设置为最大5000条消息。然后,发布者将消息发布到队列中,直到它达到5000条消息的限制。然后消费者将尝试使用该消息


我想问的是,如果队列已满,publisher是否可以等待发布消息?不丢弃消息。将再次检查队列是否可用,然后publisher将发布数据。

RabbitMQ团队监视并仅有时回答有关StackOverflow的问题



如果您使用的是arecent RabbitMQ版本(如
3.7.5
),则可以将设置为
拒绝发布
。然后,在代码中,使用
channel\u实例.confirm\u delivery()
方法启用publisher confirms。最后,当达到队列限制时,一条
basic.nack
消息将发送回您的代码,并将引发一个
nackeror
异常,您可以捕获该异常。

RabbitMQ团队监视并仅有时回答有关StackOverflow的问题



如果您使用的是arecent RabbitMQ版本(如
3.7.5
),则可以将设置为
拒绝发布
。然后,在代码中,使用
channel\u实例.confirm\u delivery()
方法启用publisher confirms。最后,当达到队列限制时,一条
basic.nack
消息将发送回您的代码,并将引发一个您可以捕获的
nackeror
异常。

我想象如果队列已满,pika将引发一个异常。你能试着将最大队列大小设置为非常小的值,看看会发生什么吗?我已经试过了,将x-max-length设置为10。使用basic_publish,但即使队列已满,也始终返回true。执行此操作时,是否所有消息都已排队,或者某些消息会以静默方式失败?可能是
basic_publish
阻塞,直到它能够发布。我想如果队列已满,pika会引发异常。你能试着将最大队列大小设置为非常小的值,看看会发生什么吗?我已经试过了,将x-max-length设置为10。使用basic_publish,但即使队列已满,也始终返回true。执行此操作时,是否所有消息都已排队,或者某些消息会以静默方式失败?可能是
basic\u publish
阻塞,直到它能够发布。该解决方案指出,当队列已满时,消息将被丢弃,但我不想丢弃消息。我必须确保所有消息都被插入队列。我的回答是正确的。请仔细重读那份文件。您必须将
拒绝发布
与publisher确认相结合,您将得到否定的确认。这就是为什么我提到了
confirm\u delivery
方法调用。然后,您的应用程序将负责捕获
nackeror
,并在您确定的一段时间后重新尝试发布。该解决方案声明,当队列已满时,消息将被丢弃,但我不想丢弃消息。我必须确保所有消息都被插入队列。我的回答是正确的。请仔细重读那份文件。您必须将
拒绝发布
与publisher确认相结合,您将得到否定的确认。这就是为什么我提到了
confirm\u delivery
方法调用。然后,您的应用程序将负责捕获
nackeror
,并在您确定的一段时间后重新尝试发布。