- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的经验:在发布/订阅场景中,如果订阅者 nacks 一条消息,则该 nacks 消息会立即在队列的前面重新排队,这将是订阅者获得的下一条消息。
有没有办法避免这种情况?是否有可能以一种下一条消息绝对不是刚刚收到的消息的方式来接收一条消息?
我正在使用 Node.js 和 amqp.node与 RabbitMQ 通信
最佳答案
Nack
是对 AMQP 协议(protocol)的特定于 RabbitMQ 的增强。它允许消息的使用者在收到消息时通知服务器 不是 成功处理。我想你已经走到这一步了。
这里有趣的是,AMQP 最初并没有考虑 Nack
是必要的。为什么?因为当消费者无法处理消息时的 AMQP 行为是让消费者在没有 ack
的情况下关闭连接。 - 消息。在这种情况下,消息会自动按照原来的顺序重新排队,并使用 redelivered
传递给下一个可用的消费者。标志设置。
为什么会这样?
因为一个 Nack
表示消费者有问题,而不是消息。如果消息本身是错误的,AMQP 假设消费者足够聪明,可以识别这一点,ack
消息,然后采取程序员设计的任何其他步骤来处理不良消息。
RabbitMQ 添加了 Nack
接受 requeue
的函数范围。默认情况下,requeue
是真的 - 意思是在 nack 上,代理将重新排队消息。这符合 AMQP 设计的初衷。但是,如果您通过 requeue
如果为 false,代理将死信消息。这是通常由智能应用程序架构师使用 AMQP 设计的行为的捷径,因此您可以将其视为对程序员的一种方便。
两者的区别
在第一种情况下,Nack
表明消息消费者有问题。消费者在解决问题时应该让自己离线。在第二种情况下,Nack
表示消息有问题。第一种情况是暂时的问题,而第二种情况是永久性故障。
如果我现在不能处理某条特定消息,但以后可能会怎样?
如果您的消息传递结构设计得当,这将永远不会是真的。如果一条特定消息需要与另一条消息不同的处理路径或资源,则该消息类型应该有自己的队列。当处理这些消息的依赖项脱机或不可用时,该队列的消费者可以停止消费。
关于node.js - RabbitMQ NACK 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54406504/
在消费者确认消息之前,消费者是否可以通过任何方式修改消息的状态,以便当消费者在重新传递时消费它时,它会看到已更改的状态。 我宁愿不拒绝 + 重新排队新消息,但如果这是完成此任务的唯一方法,请告诉我。
我有一个成功连接到 FCM XMPP 测试服务器的 python3 程序。但是,在发送 JSON 后,它每次都会返回一条 SERVICE_UNAVAILABLE nack 消息。同一段代码上周运行完美
这是我正在尝试做的事情: 出列消息 对消息执行操作 如果操作失败,将消息放回队列 如果操作成功,确认消息 我现在的问题是,如果操作失败,消息不会重新排队,但会保持未确认状态。如果我进入 RabbitM
我是 rabbitmq 的新手,我想知道在我可以确认该队列上的交付之前删除队列时处理错误的最佳方法是什么。 if err := handle(); err != nil { delivery.Na
我的经验:在发布/订阅场景中,如果订阅者 nacks 一条消息,则该 nacks 消息会立即在队列的前面重新排队,这将是订阅者获得的下一条消息。 有没有办法避免这种情况?是否有可能以一种下一条消息绝对
I2C 从机在向主机传输数据时是否允许 NACK? 从规范(2.1)来看,从设备在传输时(即从从设备向主设备发送数据)实际上无法向主设备发送 NACK。我已经在网上搜索过,但找不到任何帮助。为什么?我
我正在尝试使用 apache nms stomp 发送/接收消息。我不能使用 Transnational ack 模式,因为使用 hornetq。我的消费场景: 接收消息 处理消息 如果处理成功则确认
我想测试我的 Rabbitmq 实现。我有一个队列和一个消费者,我希望有第三个元素来监听/嗅探队列响应,因此如果队列响应 nack 或通过,则测试将失败。 你知道我该怎么做吗? 非常感谢 最佳答案 你
我们有两个对等点的 WebRTC 应用程序,当通话正在进行时,我遇到了大约 5% 的数据包丢失(在 webrtc-internals 上检查过)。我也看到了 Nacks。 想知道我的设置中是否实现了
我有一个关于 I2C 协议(protocol)的问题。我在维基百科页面上找到了这个。 “如果发送器看到一个 1 位 (NACK),它会了解到: 1) 从机无法接受数据。 2)没有这样的奴隶 3) 命令
我目前正在尝试通过消息代理 RabbitMQ 进行通信时可能发生的故障场景。目标是评估如何使此类沟通更具弹性。 特别是,我想在producer-commit mode中发送消息时触发nack(不确认)
我正在使用 修改 pika header properties.headers = { 'myheader': myheader } 但我正在使用 delivery_tag channel.
我一直在研究 RabbitMq.net 和消息确认。如果消费者能够处理消息,您可以以 的形式发回确认 channel.BasicAck(ea.DeliveryTag, false); 这会将其从队列中
Redis Pub/Sub 中有确认的概念吗? 例如,当使用 RabbitMQ 时,我可以让两个 worker 在不同的机器上运行,当我向队列发布一条消息时,只有一个 worker 会 ack/nac
我正在尝试将 STM32 编写为具有简单接口(interface)的 I2C 从设备,其工作原理如下: 所以master每次都会发送一个注册地址,然后从该注册地址写入或读取。 然后从机需要始终接收 1
我最近的项目需要使用 i2c 通信,使用单个主设备和多个从设备。我知道,对于主机发送的每个数据字节(实际数据),从机以 Nack\Ack(1,0) 响应。 我对如何解释 Nack 和 ACK 感到困惑
channel.basicQos(1); while (true) { GetResponse res = channel.basicGet(TEST_QUEUE, false); i
如果我的问题看起来很幼稚,我是新手,很抱歉。 我有一个接收 hl7 消息的欢乐 channel ,这很好,而且我在 Source 和 Destination 中都有一些过滤器和转换器。 当目的地结束时
否定确认的行为是将接收到的消息的可见性超时更改为 0。在为 JMS 创建 SQS Factory 时,NACK_TIMEOUT 的值不可配置。 https://github.com/awslabs/a
有没有办法配置拉取订阅,使导致错误并nacked的消息重新排队(并重新传递)不超过n次? 理想情况下,如果最后一次处理也失败,我想处理这种情况(例如,记录此消息被放弃处理并将被删除)。 或者可能可以找
我是一名优秀的程序员,十分优秀!