七,RabbitMQ收到 消费端的的ACK,如何让生产者知道,如何确保一致性呢?
1,调用生产者API,修改数据库中表的状态,只要API没被调用,数据状态没有被修改,则认为下游系统没有收到这条消息
2,发送相应消息给生产者
如果生产者的API没有被调用,也没有收到消费者的响应消息,如何处理?
建立补偿机制
后台代码中创建定时任务,
如30s跑一次,找到业务表里面的这条业务状态是中间状态的记录,查询出来,构建为MQ消息,重新发送。
发送时间可以衰减,1分钟,10分钟,60分钟,
重发消息要控制次数:比如设置成3次
重复发送一模一样的消息
八,如何避免出现重复消息?
九,rabbitMQ节点类型与集群
我们一般把应用连接诶到内存节点(读写快),磁盘节点用来备份。
集群的配置步骤:
1,配置Hosts以便互相通信
2,同步erlang.cookie
3,加入集群(join cluster命令)
Rabbit有两种集群模式:普通集群模式和镜像队列模式。
1,普通集群模式下,不同的节点之间只会互相同步元数据(交换机,队列,绑定关系,Vhost的定义),而不会同步消息
同理,如果消费者连接的是节点2,要从队列1上拉取消息,消息会从节点1抓饭到节点2,。其它节点起到了一个路由的作用,类似于指针。
2,镜像集群模式