RabbitMQ应用问题
消息可靠性保障
- 消息补偿机制,100%确保消息发送成功
图解:
- Producer处理业务并操作数据库,然后向Q1发送消息
- Consumer监听Q1中的消息,做对应的业务处理,并操作数据库,如果处理成功,向Q2发送消息
- 回调检查服务监听Q2确认消息,将消费成功的记录写入MDB中(消费记录表)
- 回调检查服务监听Q3延迟队列,收到消息后去MDB确认该消息是否成功消费,如果未成功消费,则调用Producer服务重新发送消息(流程从头再来),如果已成功消费则不作操作
- 定时检查服务,每隔时间段检查相关数据库中数据是否一致,如不一致(Q1、Q3都没收到消息时),则表明消费未成功消费,则调用Producer服务重新发送消息
消息幂等性保障
幂等指一次或多次请求同一资源,应该得到同样的结果,换言之就是多次执行对资源本身的影响与一次的影响相同
在MQ中指,消费多条同样的消息与消费该消息一次的到的结果相同
乐观锁机制
例如操作数据库是可以添加version=1,消费者在消费时要判断version是否为1,如果不是则证明为重复消费,则不作处理
具体实现不做赘述