当rabbitMq被杀死时,symfony中重复注册

问题描述 投票:0回答:1

我通过消费rabbitmq中的数据来保存数据库,我使用的是symfony框架。 我有一个这样的问题。 数据从RabbitMQ发送到应用程序后,rabbitMQ服务器被杀死。此处,由于数据仍处于 peded 模式,因此将其添加回队列,但由于数据已发送到应用程序,因此会记录数据库。当 RabbitMQ 服务器启动时,相同的数据将返回到应用程序并再次记录。如何摆脱重复的过程

php symfony rabbitmq
1个回答
0
投票

这就是消费者致谢的用途。

当节点向消费者传递消息时,它必须决定该消息是否应被视为由消费者处理(或至少接收)。

[...]

根据所使用的确认模式,RabbitMQ 可以在发送消息(写入 TCP 套接字)后立即或在收到显式(“手动”)客户端确认时认为消息已成功传递。

由您决定在应用程序中的哪个点考虑消息“已处理” - 可以是应用程序收到消息后立即,也可以是在消息完全保存到数据库后。

如果您担心确认本身可能会失败,您可以与数据库事务结合使用:

  1. 从RabbitMQ接收消息,手动ack模式
  2. 启动事务(并将以下内容放入 catch 块中,出错时将其回滚)
  3. 插入数据库
  4. 发送 basic.ack 到 RabbitMQ
  5. 提交交易

这样,如果第 3 步或第 4 步出现问题,消息将在 RabbitMQ 中待处理,并且数据库没有数据。

© www.soinside.com 2019 - 2024. All rights reserved.