2. RabbitMQ应用问题
2.1 消息可靠性保障
提出需求:如何能够保证消息的 100% 发送成功?
首先大家要明确任何一个系统都不能保证消息的 100% 投递成功,我们是可以保证消息以最高最可靠的发送给目标方。
在RabbitMQ中采用 消息补充机制 来保证消息的可靠性
步骤分析:
参与部分:消息生产者、消息消费者、数据库、三个队列(Q1、Q2、Q3)、交换机、回调检查服务、定时检查服务
- 消息的生产者将业务数据存到数据库中
- 发送消息给 队列Q1
- 消息的生产者等待一定的时间后,在发送一个延迟消息给队列 Q3
- 消息的消费方监听 Q1 队列消息,成功接收后
- 消息的消费方会 发送 一条确认消息给 队列Q2
- 回调检查服务监听 队列Q2 发送的确认消息
- 回调检查服务接收到确认消息后,将消息写入到 消息的数据库表中
- 回调检查服务同时也会监听 队列Q3延迟消息, 如果接收到消息会和数据库比对消息的唯一标识
- 如果发现没有接收到确认消息,那么回调检查服务就会远程调用 消息生产者,重新发送消息
- 重新执行 2-7 步骤,保证消息的可靠性传输
- 如果发送消息和延迟消息都出现异常,定时检查服务会监控 消息库中的消息数据,如果发现不一致的消息然后远程调用消息的生产者重新发送消息。
2.2 消息幂等性处理
幂等性指一次和多次请求某一个资源,对于资源本身应该具有同样的结果。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。
在MQ中指,消费多条相同的消息,得到与消费该消息一次相同的结果。
在本教程中使用 乐观锁机制 保证消息的幂等操作
果。
在本教程中使用 乐观锁机制 保证消息的幂等操作