channel rabbitmq 配置_一张图看懂如何使用RabbitMQ来保证数据一致性

大家好,我是技术人小Top

本号之前的文章介绍了什么是消息中间件,为什么现在越来越多项目需要用到消息中间件,以及在使用消息中间件的过程中不可避免的会遇到的数据一致性的问题及解决办法。后续结合Springboot2.2.6介绍了如何构建RabbitMQ的消息发送端、消息接收端,以及消息如何异常处理。

今天咱们来介绍如何使用RabbitMQ构建完整的数据一致性保障 ^-^

7125900d0837df535906b6bbe1603503.png

RabbitMQ官网:www.rabbitmq.com

整体设计

数据一致性主要由消息发送端、RabbitMQ、消息接收端三部分组成

  • 发送端实现功能:落地入库、消息校验、失败重发
  • RabbitMQ实现功能:Exchange消息处理、Queue消息处理、消息持久化
  • 接收端实现功能:落地入库、失败处理、查询接口
418b32dee2a1ef866f166ce6ae17b85d.png

消息发送端部分

步骤1

调用RabbitTemplate#convertAndSend API发送消息到Exchange

具体见文章1(文末有链接)

步骤2

调用RabbitTemplate#setConfirmCallback API确认消息发送到Exchange成功,并保存成功的消息入库

具体见文章1(文末有链接)

步骤3

调用RabbitTemplate#setConfirmCallback API确认消息发送到Exchange失败,并保存失败的消息入库

具体见文章1(文末有链接)

步骤4

调用RabbitTemplate#setReturnCallback API确认消息发送到Queue失败,并更新数据库中的消息状态为失败

具体见文章1(文末有链接)

步骤5

定时调用接收端暴露的查询消息消费状态接口确认消费成功和失败

1、本地把所有发送成功的消息从数据库中查询出来

2、远程调用接收端的查询接口把消费成功的数据查询出来

3、比较两者的差集,如果相等则比较结束

4、如果不等则将差集数据传递到第6步

步骤6

定时根据第5步的确认结果,对于消费失败的消息定时重新发送

1、如果有第5步传递过来的数据,则将这些消息重新发送到RabbitMQ

2、本地把所有发送失败的消息从数据库中查询出来

3、如果有失败的数据,则将这些消息重新发送到RabbitMQ

RabbitMQ部分

组件声明及创建

消息发送端负责创建Virtual Host、Exchange、Queue等

具体见文章1(文末有链接)

相关配置文件

消息发送端配置消息发送机制

具体见文章1(文末有链接)

消息接收端部分

步骤1

创建消息监听类或方法

具体见文章2(文末有链接)

步骤2

调用Channel#basicAck API确认消息接收成功,并保存成功的消息入库

具体见文章2(文末有链接)

步骤3

调用Channel#basicNack API确认消息接收失败,并保存失败的消息入库

具体见文章2(文末有链接)

步骤4

调用Channel#basicNack API通知RabbitMQ抛弃错误消息

具体见文章2(文末有链接)

步骤5

RabbitMQ将第4步的错误信息分发到死信交换机及死信队列

具体见文章3(文末有链接)

步骤6

创建对外查询消息消费状态接口,提供给消息发送方进行消息消费状态校验以及重新发送

小结

今天主要介绍了如何构建RabbitMQ数据一致性保障

欢迎持续关注本号,更多精彩内容,敬请期待~

相关文章链接

文章1:小T说:消息中间件,构建RabbitMQ消息发布端代码

文章2:Springboot2.2.6构建RabbitMQ消息接收端

文章3:Springboot2.2.6+RabbitMQ消息异常处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值