ActiveMQ笔记:一个高稳定,可扩展的的部署方案
2018-03-19 00:28
239 查看
本文介绍一个笔者在实际工作中的实施的基于ActiveMQ的一个高稳定,可扩展的异步消息系统。
ActiveMQ是一个成熟的基于Java语言的开源消息系统,在实际应用中被大量使用。ActiveMQ在系统稳定性,系统的容错和扩展等方面都有很多成熟的方案,也有很多开源的管理工具,是部署异步消息系统的一个很好的选择。
l Queue模式:Producer发出到Queue里的消息,只能由一个Consumer来使用。
l Topic模式:Producer发送到Topic里的消息,会传送到Subscribe这个Topic的每一个Consumer。
Producer发出的消息有两种Delivery模式。
l Persistent:Broker需要保存消息,然后把消息发送到Consumer。如果Broker崩溃后,重新启动后保存的消息可以重新发送给Consumer。
l NonPersistent:Broker不需要保存消息,直接把消息发送到Consumer。
ActiveMQ可以通过Networksof Brokers方式将多个Broker组成一个Cluster。Producer和Consumer可以任意的连接到该Cluster中的任意一个Broker。Producer发送的消息可以通过Cluser传送到需要的Consumer。
ActiveMQ提供了Master Slave机制实现Broker的HA,有以下几种方式:
l JDBC Master Slave
l Shared File System Master Slave
l KahaDB Replication(ZooKeeper experimental)
同一个Broker,只能有一个Master来传送消息。当Master崩溃后,其他的一个Slave可以作为Master。采用HA的模式,会增加系统的复杂性,也会影响系统的性能。
在两个node上部署ActiveMQ的Broker,通过ActiveMQ的Networks of Brokers方式来组成Cluster。
系统里的消息应用Instance通过ActiveMQ提供的client类库采用failover TCP的方式随机的接入到ActiveMQ的cluster中。正常情况下,消息应用Instance可以通过ActiveMQ的cluster机制正常通信。如果某个ActiveMQ的node崩溃后,client会自动检测到该情况,切换到另一个ActiveMQ的node。
由于本系统只采用Queue的消息工作方式,而且消息的传送采用persistent的模式。如果一个node崩溃后,重新启动后,保存的消息还可以重新发送到Consumer。对Broker,就不采用Master/Slave的HA模式,避免增加系统的复杂性和降低系统的性能。
#Broker 1:
<!-- The transport connectors ActiveMQ will listen to -->
<transportConnectors>
<transportConnectorname="openwire" uri="tcp://0.0.0.0:61616"/>
</transportConnectors>
<!--
The store and forward broker networksActiveMQ will listen to.
We'll leave it empty as duplex networkwill be configured by another broker.
-->
<networkConnectors>
</networkConnectors>
#Broker 2:
<!-- The transport connectors ActiveMQ will listen to -->
<transportConnectors>
<transportConnectorname="openwire" uri="tcp://0.0.0.0:61616"/>
</transportConnectors>
<!--
The store and forward broker networksActiveMQ will listen to
Create a duplex connector to the firstbroker
-->
<networkConnectors>
<networkConnectoruri="static:(tcp://{Broker1Ip}:61616)" duplex="true"/>
</networkConnectors>
ActiveMQ是一个成熟的基于Java语言的开源消息系统,在实际应用中被大量使用。ActiveMQ在系统稳定性,系统的容错和扩展等方面都有很多成熟的方案,也有很多开源的管理工具,是部署异步消息系统的一个很好的选择。
ActiveMQ工作机制
ActiveMQ有两种消息使用方式:l Queue模式:Producer发出到Queue里的消息,只能由一个Consumer来使用。
l Topic模式:Producer发送到Topic里的消息,会传送到Subscribe这个Topic的每一个Consumer。
Producer发出的消息有两种Delivery模式。
l Persistent:Broker需要保存消息,然后把消息发送到Consumer。如果Broker崩溃后,重新启动后保存的消息可以重新发送给Consumer。
l NonPersistent:Broker不需要保存消息,直接把消息发送到Consumer。
ActiveMQ可以通过Networksof Brokers方式将多个Broker组成一个Cluster。Producer和Consumer可以任意的连接到该Cluster中的任意一个Broker。Producer发送的消息可以通过Cluser传送到需要的Consumer。
ActiveMQ提供了Master Slave机制实现Broker的HA,有以下几种方式:
l JDBC Master Slave
l Shared File System Master Slave
l KahaDB Replication(ZooKeeper experimental)
同一个Broker,只能有一个Master来传送消息。当Master崩溃后,其他的一个Slave可以作为Master。采用HA的模式,会增加系统的复杂性,也会影响系统的性能。
方案
实际部署中,ActiveMQ采用Queue的消息使用模式。Producer发送的消息使用Persistent的Delivery模式。在两个node上部署ActiveMQ的Broker,通过ActiveMQ的Networks of Brokers方式来组成Cluster。
系统里的消息应用Instance通过ActiveMQ提供的client类库采用failover TCP的方式随机的接入到ActiveMQ的cluster中。正常情况下,消息应用Instance可以通过ActiveMQ的cluster机制正常通信。如果某个ActiveMQ的node崩溃后,client会自动检测到该情况,切换到另一个ActiveMQ的node。
由于本系统只采用Queue的消息工作方式,而且消息的传送采用persistent的模式。如果一个node崩溃后,重新启动后,保存的消息还可以重新发送到Consumer。对Broker,就不采用Master/Slave的HA模式,避免增加系统的复杂性和降低系统的性能。
配置
ActiveMQ的Broker的配置如下。#Broker 1:
<!-- The transport connectors ActiveMQ will listen to -->
<transportConnectors>
<transportConnectorname="openwire" uri="tcp://0.0.0.0:61616"/>
</transportConnectors>
<!--
The store and forward broker networksActiveMQ will listen to.
We'll leave it empty as duplex networkwill be configured by another broker.
-->
<networkConnectors>
</networkConnectors>
#Broker 2:
<!-- The transport connectors ActiveMQ will listen to -->
<transportConnectors>
<transportConnectorname="openwire" uri="tcp://0.0.0.0:61616"/>
</transportConnectors>
<!--
The store and forward broker networksActiveMQ will listen to
Create a duplex connector to the firstbroker
-->
<networkConnectors>
<networkConnectoruri="static:(tcp://{Broker1Ip}:61616)" duplex="true"/>
</networkConnectors>
相关文章推荐
- 如何部署一个稳定高效可扩展的前端
- 【原创】一个普适于各种情况易于操作的高可用服务器部署方案
- ActiveMQ实现负载均衡+高可用部署方案
- 4000 ActiveMQ实现负载均衡+高可用部署方案
- ActiveMQ笔记(2):基于ZooKeeper的HA方案
- 制定一个合理可扩展IP地址的分配方案
- ActiveMQ实现负载均衡+高可用部署方案
- 解决些重复性工作---对GridView的一个扩展方案
- ActiveMQ的集群方案对比及部署
- [BizTalk][Adapter][部署]BTS学习笔记1:建立一个简单的Biztalk数据交换项目(一)
- Event Handler的开发与部署--扩展练习:开发一个通用的EventHandler
- 4000 ActiveMQ实现负载均衡+高可用部署方案
- Sharepoint学习笔记—Site Definition系列--6、基于一个已经部署的List Template来创建List Instance
- [置顶] 【第一部分-django论坛从搭建到部署】一个完整的Django入门指南学习笔记
- ActiveMQ实现负载均衡+高可用部署方案
- 一个简单的tomcat部署方案
- Docker笔记--镜像中部署一个tomcat
- 4000 ActiveMQ实现负载均衡+高可用部署方案
- 博文搬家(iteye)--开源jms服务ActiveMQ的负载均衡+高可用部署方案探索
- ActiveMQ笔记(3):基于Networks of Brokers的HA方案