Apache ActiveMQ 负载均衡

前面讲到Apache ActiveMQ 集群配置方法 的实现,主要是为了解决点单故障的情况,如果要对AMQ进行分流、提高吞吐率,那么可以尝试搭建一个负载均衡的AMQ集群。

要搭建这样的一个环境也是非常的简单,我们只需要增加几行配置项到activemq.xml里就好,剩下的事情全部都由AMQ去做。


AMQ负载均衡的实现有三种方案:

1、static

2、Multicast Discovery

3、MasterSlave Discovery

可以参考官网实现:

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


本例使用的是静态路由static,他的缺点就是需要把已知的节点都要预先配置进去,不像动态路由灵活。

Apache ActiveMQ单点基本配置基础上,用新的activemq.xml替换:

activemq.xml:

<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:amq="http://activemq.apache.org/schema/core"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <value>file:${activemq.conf}/credentials.properties</value>
        </property>
    </bean>

    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="brokerTester3" dataDirectory="${activemq.data}">
        <destinationPolicy>
            <policyMap>
              <policyEntries>
                <!-- 属性enableAudit=false,是防止消息在回流后被当做重复消息而不被转发 -->
                <policyEntry queue=">" producerFlowControl="false" memoryLimit="10mb" enableAudit="false">
                     <!-- 属性replayWhenNoConsumers=true,保证在该节点断开,并重启后,且consumers已经连接到另外一个节点上的情况下,消息自动回流到原始节点 -->
                     <networkBridgeFilterFactory>
			<conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/>
		     </networkBridgeFilterFactory>
                </policyEntry>
              </policyEntries>
            </policyMap>
        </destinationPolicy>

        <managementContext>
            <managementContext createConnector="false"/>
        </managementContext>

        <!-- 该节点的配置必须要在persistenceAdapter节点之前 -->
	<networkConnectors>
            <!-- 静态路由 -->
            <networkConnector uri="static:(tcp://192.168.0.87:61617)" duplex="true"/>
	</networkConnectors>
       
        <persistenceAdapter>
           <kahaDB directory="${activemq.data}/kahadb"
					enableIndexWriteAsync="true"
					enableJournalDiskSyncs="false"/>
        </persistenceAdapter>

          <systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="1400 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="100 gb"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="50 gb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>

        <transportConnectors>
            <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
            <transportConnector name="openwire" uri="nio://0.0.0.0:61616?maximumConnections=1000&wireformat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://0.0.0.0:5671?maximumConnections=1000&wireformat.maxFrameSize=104857600"/>
        </transportConnectors>

        <shutdownHooks>
            <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
        </shutdownHooks>

    </broker>

    <import resource="jetty.xml"/>

</beans>


同样需要注意的是,如果在一台设备上部署多个AMQ实例,要注意修改对应的端口号。


e.g.:这里会存在一个问题,假设这里配置的节点数为3个节点(A,B,C),且配置了消息回流。

1、假设节点A不接收消费者,只接受生产者;

2、当消费者X连接到B节点消费A节点上的消息(由于AMQ的机制,B节点会预先消费A节点上一定数量的消息到B节点,默认值1000,且假设只有1000个消息待消费),在消费过程中B节点断开,且B节点上有未消费的消息存在,这时消费者X自动路由到C节点上想继续消费未消费完成的消息;

3、由于当前的未消费的消息都存储于B节点上,当B节点重启后按照当前的配置方式,AMQ的逻辑应该是当X与A节点建立连接后B节点消息会回流,且可以正常消费,而当前消费者X是连接到了C节点上。


如果在业务上发生上面的这个场景,以当前的集群负载配置方式是无法满足需求的。





  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据引用\[1\],你可以从Apache的官方网站下载适用于不同操作系统的Apache ActiveMQ安装包。对于Linux和MAC系统,你可以下载apache-activemq-5.14.0-bin.tar.gz文件,而对于Windows系统,你可以下载apache-activemq-5.14.5-bin.zip文件。 根据引用\[2\],Apache ActiveMQ是一个开源的消息总线,可以用于实现JMS消息服务。然而,在官方网站上并没有找到同时满足高可用和集群部署的方案。因此,作者通过试用验证后,提供了一种集群+高可用部署方案。 根据引用\[3\],单点的ActiveMQ无法满足高可用和集群的需求,因此ActiveMQ提供了多种部署方式,包括master-slave和broker cluster。作者认为需要将这两种部署方式相结合,才能满足公司的分布式和高可用需求。具体来说,可以使用Master-Slave部署方式中的shared filesystem来实现这一目标。 综上所述,你可以根据你的需求选择合适的Apache ActiveMQ安装包,并参考作者提供的集群+高可用部署方案来进行安装和部署。 #### 引用[.reference_title] - *1* [activeMQ介绍及安装部署](https://blog.csdn.net/XueFeng0210/article/details/88235709)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [开源jms服务ActiveMQ负载均衡+高可用部署方案探索 ](https://blog.csdn.net/u014419512/article/details/84598507)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值