集群方案主要为了解决系统架构中的两个关键问题:高可用和高性能。ActiveMQ服务的高可用性是指,在ActiveMQ服务性能不变、数据不丢失的前提下,确保当系统灾难出现时ActiveMQ能够持续提供消息服务,高可靠性方案最终目的是减少整个ActiveMQ停止服务的时间。ActiveMQ服务的高性能是指,在保证ActiveMQ服务持续稳定性、数据不丢失的前提下,确保ActiveMQ集群能够在单位时间内吞吐更高数量的消息、确保ActiveMQ集群处理单条消息的时间更短、确保ActiveMQ集群能够容纳更多的客户端稳定连接。

一、ActiveMQ的高可用集群Master-Slave
  Master-Slave方式中,只能是Master提供服务,Slave是实时地备份Master的数据,以保证消息的可靠性。当Master失效时,Slave会自动升级为Master,客户端会自动连接到Slave上工作。Master-Slave模式分为三类:
    a、Pure Master Slave:需要两台Broker,一台作为Master,另一台作为Slave,运行时,Slave通过网络实时从Master处复制数据,同时,如果Slave和Master失去连接,Slave就会自动升级为Master,继续为客户端提供消息服务。这种方式只能两台机器做集群,可以起到很好的双机热备功能,但只能失效一次,只能停机恢复Master-Slave结构。
    b、Shared File System Master Slave:只能在一台机器进行,如果各个ActiveMQ实例需要运行在不同的机器,就需要用到分布式文件系统了。
    c、 JDBC Master Slave:JDBC Master Slave模式实现方式稍微复杂一点,可以实现消息的多点热备功能,Master、Slave的交替完全是即时的,自动的,无需重启任何broker;队列可以实现消息的异步和点对点发送。这种方式的集群相对Shared File System Master Slave更加简单,更加容易地进行分布式部署,但是如果数据库失效,那么所有的ActiveMQ实例都将失效。
二、高性能集群Broker Cluster 

  Broker Cluster方式主要是通过network of Brokers在多个ActiveMQ实例之间进行消息的路由。通过把多台不同的broker连接在一起,作为一个整体对外提供服务,从而提高整体对外的消息服务能力。通过这种方式,brokers可以共享队列和消费者列表,从而达到分布式队列的目的。Broker的集群分为Static Discovery和Dynamic Discovery两种。通过实现静态发现或动态发现(组播协议),client可以在一台broker挂了之后,自动地监测并且连接到网络中其它的broker上,同时,也可用于一台broker去发现并且连接到网络中其它的broker上。

Master-Slave模式不支持负载均衡,但可以通过消息的实时备份或共享保证消息服务的可靠性,Broker Cluster模式支持负载均衡,可以提高消息的消费能力,但不能保证消息的可靠性。所以为了支持负载均衡,同时又保证消息的可靠性,我们可以采用Msater-Slave+Broker Cluster的模式。

架构设计:系统间通信(25)——ActiveMQ集群方案(上) - JAVA入门中 - CSDN博客

架构设计:系统间通信(26)——ActiveMQ集群方案(下) - JAVA入门中 - CSDN博客

ActiveMQ集群(2) - 子夜™ - 博客园

最新文章

  1. service 03 iis之服务器无访问权限
  2. Oracle 语法
  3. PowerShell脚本自动设置安卓手机wifi代理
  4. Groovy入门教程
  5. PAT 1020. 月饼 (25)
  6. git查看提交历史
  7. Java Runtime.availableProcessors()方法
  8. 程序4-5 打开一个文件,然后unlink
  9. windows命令行
  10. 【技能】使用纯CSS+html写出方向箭头,简单慷慨,好看
  11. 同步 VS 异步
  12. IP_ADD_MEMBERSHIP 失败
  13. Kafka相关内容总结(概念和原理)
  14. 批量检测服务器是否能telnet连通
  15. 隐藏input光标和输入内容方法
  16. C#连接Access数据库
  17. Jenkins报错'Gradle build daemon disappeared unexpectedly'的问题解决
  18. Python开发之数据类型
  19. DB2自增长ID
  20. Java多线程实现异步调用

热门文章

  1. 『Scipy』常用方法记录
  2. android升级adt和sdk之后无法识别SDK Location的一个解决方式
  3. 关于InputStream类的available()方法
  4. Scrum介绍——续
  5. Access-Control-Allow-Origin实现跨域访问 跨域
  6. ssh的配置,ssh打开密钥登陆,关闭密码登陆。
  7. L1-018 大笨钟
  8. iOS ipv6 被拒
  9. Python学习(002)--Python介绍
  10. Swift中WebView的应用