rabbitmq常见问题

概念

RabbitMQ消息中间件,采用的是erlang语言,而这个语言就本身就是支持并发的。

在项目中运用的场景是我们对于订单数据修改时,需要把订单的状态同步到第三方系统,在这个对接的过程中,我们将消息发送到RabbitMQ上,而RabbitMq再把消息推送到第三方系统

几种模式

  • 单发送单接收
  • 单发送多接收
  • 发布订阅模式
  • 按topic发送接收

保证数据不丢失

在发送消息的时候,消费信息的过程中,在三个地方可能存在的问题

1.发送时,消息由于网络问题,半路就会搞丢了

解决办法:

  • a.同步:采用事物管理,开始事物,在发送消息的时候,如果mq没有接受到消息,抛出异常,本地捕捉异常并重试
  • b.异步:写入时可以调本地接口,确定机制(建议使用)

2.MQ服务器本身的问题,如果他还没有来得及把消息发送消费端就挂了,这个时候消息就丢了

解决办法:(持久化操作)

  • a.创建队列时,设置其为持久化
  • b.消息的deliveryMode为2

3.在消费的时候,消息由于网络问题,半路搞丢

解决办法:

消息者在接收到消息先执行业务代码,等结束时,再告诉服务器已经执行完,再执行删除操作

如何避免数据重复消费

这个rabbitmq认为不是服务器的问题,而是我们代码的问题

所以我们解决办法就是在消费端进行控制,拥有一个业务id,人工去重/

原文地址:https://www.cnblogs.com/zhuyuanying123--/p/12556414.html