当前位置: 首页 > 知识库问答 >
问题:

RabbitMQ消息中缺少通道引用delivery_info

鄢修德
2023-03-14

我目前正在使用basic_get从rabbitMQ获取消息后实现一些逻辑,而没有自动发送消息确认。

根据这里的教程(消息确认部分),我在 msg 本身中找不到通道引用并发送 ack,如上面的链接所述:

$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);

这是因为在我的消息传递信息数组中没有这样的频道<我想知道它怎么会不见了。

编辑:基本get的代码片段

  $msg = $this->channel->basic_get($this->queueName, false);  

共有2个答案

何修能
2023-03-14

当使用basic_get(这似乎是不鼓励的,请改用basic_consumer)时,请尝试使用delivery_tag直接从通道打包消息

$这-

卫嘉泽
2023-03-14

根据 AMQP 规范 get-ok,这是 basic-get 的返回值,不包括通道,这与 basic-delivery 发生的情况相反,当消息到达以 basic-consumption 开始的消费者时使用。

所以库的行为是正确的。

请参阅 https://github.com/videlalvaro/php-amqplib/blob/master/PhpAmqpLib/Channel/AMQPChannel.php#L1022

vs

https://github.com/videlalvaro/php-amqplib/blob/master/PhpAmqpLib/Channel/AMQPChannel.php#L956

 类似资料:
  • 我有一个集成应用程序,大部分工作,但注意到昨天一个消息丢失了。当时,service-activatorendpoint正忙于处理先前的消息。 以下是适用于该问题的配置。

  • ActiveMQ/JMS有一个内置机制,用于确保在使用竞争消费者模式时,共享公共报头(即JMSXGroupID报头)的消息始终由队列的同一消费者使用。队列的使用者完全不知道实际的头值,因为具有公共头的消息的保证是在服务器端而不是在使用者端执行的。有关此工作方式的更多详细信息,请参见http://activemq.apache.org/message-groups.html。 用AMQP或者用Rab

  • 在队列选项卡的rabbitMQ web界面上,我看到了“概述”面板,我在其中找到了以下内容: 排队消息: 准备好了 未确认 总数 我猜“总数”是多少。但什么是“准备就绪”和“未确认”?“准备好了”——传递给消费者的信息?“未确认”-? 消息费率: 发表 交付 重新交付 承认 这些信息是什么?尤其是“重新交付”和“确认”?这是什么意思?

  • 我的Kafka消费者的代码是这样的 我已经意识到,这种消费者设置无法读取所有信息。我无法再现这一点,因为这是一个间歇性的问题。 当我使用 将最后 100 条消息与此消费者进行比较时,我发现我的消费者间歇性地随机错过了几条消息。我的消费者有什么问题? 在python中使用消息的方法太多了。应该有一种最好只有一种明显的方法来做到这一点。

  • 在群聊场景中,想回复某人的话,却被不断被更新的信息流打断。混乱的对话顺序,让有效的信息接收变得困难。有了消息引用,就能针对性回复消息或对该消息进行补充。 1.手机版 使用方法:长按群中任一对话消息,选择“回复”,可以引用该条信息,并加上自己的注解。 2.电脑版 使用方法:选中群中任一对话消息,选择“回复”,可以引用该条信息,并加上自己的注解。

  • 我从RabbitMq服务器收到此错误 服务器关闭通道:406(前提条件-失败),并显示消息“前提条件_失败-未知交付标签80” 发生这种情况是因为在消费者任务期间连接丢失,最后,当消息被确认/nack时,我收到此错误,因为我无法在与我接收它的通道不同的通道上确认消息。 这是 RabbitMq 连接的代码 如您所见,连接建立后会创建一个通道,在我收到连接问题后,通道设置为NULL,1秒钟后连接重试,