场景

现有节点Node1和Node2,建立Exchange:yu.exchange,创建队列yu1.queue镜像队列master位于Node1,yu2.queue镜像队列位于Node2,使用topic模式绑定到Exchange;

当队列发送时设置DeliveryMode=1 No-Persistent 不进行度列持久化时

过程:

1.客户端向Exchange发送消息10条,停掉Node1上的RabbitMQ实例,队列yu1.queue将master切换到Node2,队列正常继续接受,不影响后续的消息接收。(当前消息条数10)

2.客户端继续发送消息5条,然后启动Node1实例,Node1会以从节点的身份恢复到集群中(当前消息条数15条),Node1会以从节点的身份恢复到集群中,此时队列上显示消息不一致“+0+1”的警告,即发生主从消息不一致

3.客户端继续发送消息5条(此时队列内消息为20条),此时队列上依然显示消息不一致“+0+1”的警告

4.暂停Node2实例,此时队列会全部切换master到Node2,队列正常运行,但此刻队列消息条数为5,由于只剩一个节点,所以不再存在消息不一致的“+0+1”警告

5.客户端继续发送5条,启动Node1实例,队列内消息为10条,继续队列上显示消息不一致“+0+1”的警告,即发生主从消息不一致(队列条数10)

小结:对于未设置持久化的消息队列,如果无订阅客户端进行消息消费的话,当发生主从切换时,master实例在关闭到重启为slaver的过程中,如果队列持续接收消息会发生不一致的警告。同时如果该场景重复发生,如果不设置参数“ha-sync-mode: automatic”的话(默认为ha-sync-mode: manual),队列内消息不会进行同步,消息内容以最近master实例内的消息为主。(https://www.rabbitmq.com/admin-guide.html

当队列发送时设置DeliveryMode=2 Persistent 进行度列持久化时

1.客户端向Exchange发送消息10条,停掉Node1上的RabbitMQ实例,队列yu1.queue将master切换到Node2,队列正常继续接受,不影响后续的消息接收。(当前消息条数10)

2.客户端继续发送消息5条,然后启动Node1实例,Node1会以从节点的身份恢复到集群中(当前消息条数15条),Node1会以从节点的身份恢复到集群中,此时队列上显示消息不一致“+0+1”的警告,即发生主从消息不一致

3.客户端继续发送消息5条(此时队列内消息为20条),此时队列上依然显示消息不一致“+0+1”的警告

4.暂停Node2实例,此时队列会全部切换master到Node2,队列正常运行,但此刻队列消息条数为0!!!!,由于只剩一个节点,所以不再存在消息不一致的“+0+1”警告

5.客户端继续发送5条,启动Node1实例,队列内消息为5条,继续队列上显示消息不一致“+0+1”的警告,即发生主从消息不一致(队列条数5)

6.再次关闭Node2实例,master又会切回到Node1,但此处队列内消息再次归0!!!!

当镜像队列部署到多于两个节点时需要注意ha-mode的参数设置 镜像队列数量越少处理速度越快,多一些当然数据的一致性会更高,但吞吐量会下降

最新文章

  1. 控制EasyUI DataGrid高度
  2. android include进来的组件 调用其子元素
  3. *HDU1846HDU2188 巴什博奕
  4. C# Winform中如何让PictureBox的背景透明
  5. MySQL binlog基本操作
  6. 使用__slots__
  7. [转]初探 PhoneGap 框架在 Android 上的表现
  8. Content Factory:辅助 MonoGame 游戏开发
  9. (Abstract Factory)抽象工厂
  10. 【MySql】在Linux下安装MySql数据库
  11. Android—SDCard数据存取&Environment简介
  12. Storm因机器断电等,启动supervisor异常
  13. php练习3——猜拳游戏,评委打分问题
  14. 文件已经加入.gitignore但是vs并没有显示文件处于ignore状态
  15. Hibernate 系列教程8-复合主键
  16. [LeetCode] Merge Two Binary Trees 合并二叉树
  17. mysql 提高一 动态sql 传变量
  18. IntelJ idea下lombok 不生效的问题(@Builder等注解不生效的问题)解决,lombok Plugin插件安装
  19. [POJ2985]The k-th Largest Group
  20. C# mvc 500 内部服务器访问异常

热门文章

  1. Web安全相关(三):开放重定向(Open Redirection)
  2. python_Django 实现登入功能form表单的参数接收处理
  3. php中怎么理解Closure的bind和bindTo
  4. JavaScript的进阶之路(七)客户端JavaScript知识点总结
  5. 【MFC】CDialogBar中按钮不可用
  6. (PowerShell) 重命名文件
  7. python oop常用术语 继承 多态 封装
  8. flask介绍
  9. java基础问题解答
  10. 基于TCP/IP的程序设计