首页 > 其他分享 >ActiveMQ集群应用

ActiveMQ集群应用

时间:2023-08-10 22:32:00浏览次数:45  
标签:Slave 实例 集群 消息 应用 Master ActiveMQ




博客分类:


 



ActiveMQ集群

        ActiveMQ具有强大和灵活的集群功能,但在使用的过程中会发现很多的缺点,ActiveMQ的集群方式主要由两种:Master-Slave和Broker Cluster。

1、Master-Slave

        Master-Slave方式中,只能是Master提供服务,Slave是实时地备份Master的数据,以保证消息的可靠性。当Master失效时,Slave会自动升级为Master,客户端会自动连接到Slave上工作。Master-Slave模式分为三类:Pure Master Slave、Shared File System Master Slave和JDBC Master Slave。

(1)Pure Master Slave

Broker,一个作为Master,另一个作为Slave,运行时,Slave通过网络实时从Master处复制数据,同时,如果Slave和Master失去连接,Slave就会自动升级为Master,继续为客户端提供消息服务,如图所示:

ActiveMQ服务器,一个作为Master,Master不需要做特殊的配置;另一个作为Slave,配置${ACTIVEMQ_HOME}/conf/activemq.xml文件,在<broker>节点中添加连接到Master的URI和设置Master失效后不关闭Slave,如下:

 



ActiveMQ集群应用_java



    1. <broker xmlns="http://activemq.apache.org/schema/core" brokerName="pure_slave" masterConnectorURI="tcp://0.0.0.0:61616" shutdownOnMasterFailure="false" dataDirectory="${activemq.base}">



     

    Slave的服务端口,如:

     



    ActiveMQ集群应用_java


    1. <transportConnectors>
    2. <transportConnector name="openwire" uri="tcp://0.0.0.0:61617"/>
    3. </transportConnectors>


     

    为了看到实践的效果,Master和Slave的消息持久化介质都是采用MySQL,并且Master和Slave分别连接不同的数据库。

    Spring配置文件中添加以下红色内容:

     



    ActiveMQ集群应用_java


    1. <property name="brokerURL" value="failover:(tcp://localhost:61616,tcp://localhost:61617)?initialReconnectDelay=100" />



         配置完成后,我们可以通过以下步骤来进行测试:



    A、启动Master和Slave,启动消息生产者应用,并分别发送一些Queue消息和Topic消息,如果此时订阅Topic消息的消费者设置了clientID,我们就可以在Master的数据库和Slave的数据库中看到尚未消费的消息,包括Queue和Topic的消息;

    B、启动消费者应用,可以接收到消息;

    C、关闭消费者,生产者继续发送一些消息A;

    D、停止Master;

    E、生产者继续发送消息B;

    F、启动消费者应用,消费者可以接收到消息A和消息B,说明Slave接替了Master的工作并复制了Master的消息。

    Master-Slave结构。

    (2)Shared File System Master Slave

            Shared File System Master Slave就是利用共享文件系统做ActiveMQ集群,是基于ActiveMQ的默认数据库kahaDB完成的,kahaDB的底层是文件系统。这种方式的集群,Slave的个数没有限制,哪个ActiveMQ实例先获取共享文件的锁,那个实例就是Master,其它的ActiveMQ实例就是Slave,当当前的Master失效,其它的Slave就会去竞争共享文件锁,谁竞争到了谁就是Master。这种模式的好处就是当Master失效时不用手动去配置,只要有足够多的Slave。Shared File System Master Slave模式如图所示:

    ActiveMQ实例,需要对ActiveMQ的配置文件做一些简单的配置,就是把持久化适配器的存储目录改为本地磁盘的一个固定目录,三个实例共享这个目录,如下:

     



    ActiveMQ集群应用_java

    1. <span style="color: #ff0000;"><persistenceAdapter>
    2. <kahaDB directory="E:/XXX/XXX/XXX/cluster/shared_file/data/kahadb" />
    3. </persistenceAdapter></span>


    然后修改ActiveMQ实例的服务端口和jetty的服务端口,防止端口占用异常。启动三个ActiveMQ实例,就可以进行测试了。

     

    ActiveMQ实例需要运行在不同的机器,就需要用到分布式文件系统了。

    (3)JDBC Master Slave

            JDBC Master Slave模式和Shared File Sysytem Master Slave模式的原理是一样的,只是把共享文件系统换成了共享数据库。我们只需在所有的ActiveMQ的主配置文件中(${ACTIVEMQ_HOME}/conf/activemq.xml)添加数据源,所有的数据源都指向同一个数据库,如:

     



    ActiveMQ集群应用_java


    1. <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    2. <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    3. <property name="url" value="jdbc:mysql://localhost:3306/cluster_jdbc?relaxAutoCommit=true"/>
    4. <property name="username" value="root"/>
    5. <property name="password" value="root"/>
    6. <property name="maxActive" value="200"/>
    7. <property name="poolPreparedStatements" value="true"/>
    8. </bean>



    Shared File System Master Slave更加简单,更加容易地进行分布式部署,但是如果数据库失效,那么所有的ActiveMQ实例都将失效。

     

        以上三种方式的集群都不支持负载均衡,但可以解决单点故障的问题,以保证消息服务的可靠性。

    2、Broker Cluster

            Broker Cluster主要是通过network of Brokers在多个ActiveMQ实例之间进行消息的路由。Broker的集群分为Static Discovery和Dynamic Discovery两种。

    (1)Static Discovery集群

     

    Static Discovery集群就是通过硬编码的方式使用所有已知ActiveMQ实例节点的URI地址。如:消息生产者应用连接一个ActiveMQ实例,我们暂时称为MQ1,所有的消息都由该实例提供;两个消息消费者应用分别连接另外两个ActiveMQ实例,分别为MQ2和MQ3,两个消息消费者需要消费MQ1上的消息,但它们连接的都不是MQ1,可以通过Static Discovery方式把MQ1上的消息路由到MQ2和MQ3,为了保证消费者不因某个节点的失效而导致不能消费消息,在消费者应用中需要配置所有节点的URI。

     

    ActiveMQ实例不需要特殊的配置,所有的消费者ActiveMQ实例需要添加networkConnectors节点,连接到生产者MQ实例,如:

     



    ActiveMQ集群应用_java

    1. <span style="color: #ff0000;"><networkConnectors>
    2. <networkConnector uri="static:failover://(tcp://localhost:61616)" duplex="true" />
    3. </networkConnectors></span>


     

    上面这段配置需要加在<persistenceAdapter>节点的前面。然后在消费者应用中设置brokerURL的值如:

     



    ActiveMQ集群应用_java


    1. <property name="brokerURL" value="<span style="color: #ff0000;">failover:(tcp://localhost:61617)</span>?initialReconnectDelay=100" />

     



             Static Discovery集群方式有些缺点,如不能解决单点故障问题,若某个 Broker失效时,有可能造成数据的丢失,动态添加节点不够智能化。



     

     

    http://activemq.apache.org/networks-of-brokers.html

    (2)Dynamic Discovery集群

            Dynamic Discovery集群方式在配置ActiveMQ实例时,不需要知道所有其它实例的URI地址,只需在所有实例的${ACTIVEMQ_HOME}/conf/activemq.xml文件中添加以下内容:

     



    ActiveMQ集群应用_java

    1. <span style="color: #ff0000;"><networkConnectors>
    2. <networkConnector uri="multicast://default" />
    3. </networkConnectors></span>


     

    <transportConnectors>节点中添加以下红色部分内容:

     



    1. <transportConnectors>
    2. <transportConnector name="openwire" uri="tcp://0.0.0.0:61616" <span style="color: #ff0000;">discoveryUri="multicast://default"</span> />
    3. </transportConnectors>


     

    这样就可以实现消息在所有ActiveMQ实例之间进行路由。Dynamic Discovery集群方式的缺点和Static Discovery一样。

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

     

     

     

     

     

    标签:Slave,实例,集群,消息,应用,Master,ActiveMQ
    From: https://blog.51cto.com/u_16087105/7040767

    相关文章

    • 使用eNSP,VMware搭建网络平台,Linux中通过Docker搭建应用管理系统,在eNSP中的主机里可以
      课程设计要求拓扑图部署过程总结1.课程设计要求使用eNSP,VMware搭建网络平台,Linux中通过Docker搭建应用管理系统,在eNSP中的主机里可以访问。2.拓扑图![](C:\Users\31223\Pictures\Screenshots\屏幕截图2023-08-10133154.png)设备:云,主机(client机)3.部署过程实验1:docke......
    • 加速未来!汽车之家App应用性能优化总结与后续展望
      背景汽车之家App作为汽车之家链接全球5亿用户的重要承载工具,是汽车之家的核心业务之一。在激烈的市场竞争中,为广大用户提供优质的产品和服务是我们的核心竞争力。面对日益增长的用户需求和技术挑战,满足用户对卓越体验的追求,客户端研发部制定了:"铸精品,释产能,启未来"的基本方向。......
    • Hadoop集群启停命令以及Web UI界面的相关介绍
      1、Hadoop集群的启停命令(我是将文件都配置好了,直接使用最方便的启停命令就能进行使用)start-all.shstop-all.sh2、HDFS集群的WebUI界面主要是通过命令行:ifconfig获取到本虚拟机的ip地址,然后输入:ip:9870进行访问即可3、YARN集群的WebUI界面可以使用以下命令访问:ht......
    • 1.Elasticsearch集群包安装、二进制安装与Docker安装
      ElasticsearchElasticsearch是一个实时的全文搜索,存储库和分析引擎https://www.elastic.co/cn/what-is/elasticsearchElasticsearch在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,可用于多种场景:应用程序搜索网站搜索企业搜索日志处理和分析基础设施指标和......
    • 3.Elasticsearch集群安装脚本
      #!/bin/bashES_VERSION=7.17.5#ES_VERSION=7.9.3#ES_VERSION=7.6.2UBUNTU_URL="https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/apt/pool/main/e/elasticsearch/elasticsearch-${ES_VERSION}-amd64.deb"RHEL_URL="https://mirrors.tuna.tsinghu......
    • VMware搭建Hadoop集群 for Windows(完整详细,实测可用)
      目录一、VMware虚拟机安装(1)虚拟机创建及配置 (2)创建工作文件夹二、克隆虚拟机三、配置虚拟机的网络(1)虚拟网络配置(2)配置虚拟机主机名(3)配置虚拟机hosts(4)配置DNS、网关等(5)reboot重启虚拟机四、配置SSH服务(1)确认ssh进程 (2)生成秘钥(3)秘钥拷贝 五、JDK安装(1)把JDK安装包传输到虚拟机(2)......
    • 【升职加薪秘籍】我在服务监控方面的实践(5)-应用监控
      大家好,我是蓝胖子,关于性能分析的视频和文章我也大大小小出了有一二十篇了,算是已经有了一个系列,之前的代码已经上传到github.com/HobbyBear/performance-analyze,接下来这段时间我将在之前内容的基础上,结合自己在公司生产上构建监控系统的经验,详细的展示如何对线上服务进行监控,内......
    • 开合屏应用于剪彩仪式,是一种什么体验?
      剪彩泛指新造车船出厂、道路桥梁首次通车、大型建筑物落成、展览开幕、公司开业等等开幕式上进行剪断彩带的仪式。  从古至今这个仪式都是想要取得头彩,以后事事顺心的含义,随着科技的发展,剪彩的设备也要不断升级,而开合屏作为一种新型移动设备,在剪彩仪式中的应用,可以给参与者带来......
    • 雷池 Web 应用防火墙安装
      官方网站:https://waf-ce.chaitin.cn/GitHub托管地址:https://github.com/chaitin/safeline 【简介】一款足够简单、足够好用、足够强的免费WAF。基于业界领先的语义引擎检测技术,作为反向代理接入,保护网站不受黑客攻击。 【特点】 一、安装部署配置需求操作系......
    • 使用 Kafka Tools(现已更名为 Offeset Exploer)无法连接虚拟机的 Kafka 集群,报错error c
      发生缘由学习Kafka的使用,结果发现使用KafkaTools(现已更名为OffesetExploer)无法连接虚拟机的Kafka集群,报错信息:errorconnectingtothecluster.unabletoconnecttozookeeperserverxxx.xxx.xxx.xxx2181withtimeoutof10000ms运行环境电脑系统版本:Windows1......