我试图了解AMQP协议的一些方面。目前我有RabbitMQ项目并使用python pika库。所以问题是关于确认和消息预取。
>
假设我们有一个只有消费者的队列(确保这个队列被声明为独占的)。那么,我是否正确理解了:无论我使用ack标志还是不使用ack标志?无论如何,我不应该能够同时处理多条消息,而且没有其他消费者可以接收其他仍在排队的消息。最好不要打开确认,因为这可能会减少AMQP服务器的负载。
如果没有确认,预取计数就没有任何意义。对吗?
我不确定预取是如何工作的。我对新消息有一个回调,在它的最终语句中我承认或拒绝该消息。这是唯一的功能,无论预取计数有多大——无论如何,在当前消息完成之前不会处理另一条消息。那么为什么我需要更改prefetch_count值呢?
提前谢谢。
取消设置autoack
标志后,如果应用程序在消息处理过程中失败,所有收到的消息都将丢失。如果这种情况非常罕见,并且message lose是应用程序中的适当选项(例如,但不限于日志处理),则可以关闭autoack。
是的,取消设置autoack
unset需要更简单的代理逻辑,因此它使用的资源更少。
至于prefetch count
(和prefetch size
),这些选项告诉代理,对于单个消息,提前发送到客户端的有效负载可能有多大。通常用于节省网络操作等待新消息的时间。当prefetch size
使用时,客户端将收到一条或多条消息,其总大小等于或小于预设的pretch size(和/或count,小于)。
应用预取计数
和预取大小
规则。当其中一个设置为零(未设置)时,将不应用该设置。
最重要的是,预取定义了在客户端未确认的更多消息之前发送消息的行为。
这两种设置结合起来会产生如下效果:
使用邮件计数限制预回迁并提前发送邮件:
条件:
工作流程:
使用大消息预回迁:
条件:
预取大小=5kb,预取计数=2
关闭
工作流程:
使用自动确认:
条件:
预取大小=5kb,预取计数=10
开启
工作流程:
no ack
设置为true时,prefetch size
和prefetch count
都被忽略(这是RabbitMQ和AMQP文档中调用自动确认功能的方式),消息将逐个发送到客户端,并在成功发送后从队列中删除
请注意,AMQP具有异步体系结构,因此在某些情况下,两个客户端可能会同时接收单个消息。此外,未确认的消息可能会被发送回同一个客户端(尤其是如果您只有一个客户端)。
此外,查看prefetch-size
和prefetch-count
官方留档,并尝试使用这些选项。
注意:autoack
基本上是no ack
AMQP标志设置为true
。
我们正在使用SpringAMQP,其风格与使用AMQP的SpringRemoting相同。我在每封邮件上设置,以便在无法立即发送给消费者时立即过期。这非常有效,但是,它让生产者等待指定的值,然后使用失败(如果我没有记错的话)。如果消息无法传递(只有在消息实际接收时才等待超时),是否有任何方法可以使生产者立即失败?
我正在使用spring amqp使用出站网关将消息发布到RabbitMQ。我在连接工厂上设置了publisher confirms,并添加了自定义回调侦听器。 问题是我的相关数据总是空,我不能在出站网关上添加任何相关数据。这仅适用于出站通道适配器。 对于出站网关,出版商是否会确认工作? 编辑我的配置如下。我查看了SI代码,是的,publisher确认已启用。问题是当我收到NACK时我会做什么?由于
接收到do-new推送后,确认一个预订单 请求参数说明 参数 描述 必填 示例值 类型 最大长度 action 接口参数组 是 object └action 需要调用的接口名称 是 bk_state string get GET参数组,本组参数需要参与签名 是 object └id 预订单id 是 8601458771 number └state 预订状态,1=预订成功,-1=预订失败 是 1 n
有没有办法更改发布者-确认每条消息?我们有一个接收消息并发布到RabbitMQ的Rest层。根据特定的消息属性,我们决定是否需要发布者确认。 有没有一种方法可以在发送消息时覆盖,发布者-确认?
是否可以使用auto-ack=false禁用预取?我只是想避免每次确认消息时从队列中读取消息(预取)。我只想在调用“consume_message”时读取消息。设置prefetch_count=0似乎不起作用,它被视为“无特定限制”。 更新: 据我所知,“prefetch_count”是客户端缓存的消息数(本地读取到缓冲区)。例如,有一个用例: (让我们假设有一个我们连接到的队列并且它有消息) 创
几周前,使用F2重构代码时没有得到任何确认。然而,几天后,使用F2在底部面板中打开一个“重构预览”选项卡。 直到我手动检查我想要重构的内容,并单击右上角的复选标记,重构才会完成。 我在网上或vscode设置中找不到任何内容。是否可以禁用此功能,以便重构像以前一样自动进行?