赞
踩
如常用ABCD系统中,BCD系统都需要从A系统中调用接口返回数据,这时候突然来了E系统,也需要A系统数,又或者C系统不想要用这个接口数据了,而且A系统还得考虑,如果BCD接收不到数据,接收失败咋整之类的问题。
如果基于消息队列,这些问题就迎刃而解了。
A系统直接把数据扔到Mq中,BCDE系统直接从Mq中消费,如果消费失败,则重试消费。
就rabbitMq而言,有镜像模式概念,就是用户在发送数据时候,发送到mq机器上,并且持久化磁盘,然后通过设置镜像的queue,把数的持久化地址对应表同步到另外mq机器上。这种就有效防止一台mq挂了以后,另外的mq可以直接对外提供消费功能。
1、通过设置事务,进行事务回滚重试
2、通过发送者确认模式开启
方式一:channel.waitForConfirms()普通发送方确认模式;
方式二:channel.waitForConfirmsOrDie()批量确认模式;
方式三:channel.addConfirmListener()异步监听发送方确认模式;
就mq本身而言,需要做队列的持久化到磁盘的操作。
1、queque队列的持久化,通过channel.queue_declare(queue=‘hello’, durable=True);设置
2、设置消息的持久化,通过delivery_mode=2来进行设置。
mq消费者而言,开启手动ACK模式,也就是需要真正的消费者入库成功,才会进行消费成功的确认。
总结就是一句话:发送者确认模式开启,消息持久化默认开启,消费者消费开启手动ack
rocketMq而言,生产者发送消息,生产者默认模式
rocketMq持久化方式中,消息持久化通过如下配置
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。