ActiveMQ集
Queue consumer clusters:
简介:ActiveMQ支持订阅同一个queue的consumers上的集。如果一个consumer失效,那么所有未被确认(unacknowledged)的消息都会被发送到这个queue上其它的consumers。如果某个consumer的处理速度比其它consumers更快,那么这个consumer就会消费更多的消息。
主要是解决consumers间的负载平衡。
配置:不需要特殊配置(个人理解)
Broker clusters/ Networks of brokers
简介:一个常见的场景是有多个JMS broker,有一个客户连接到其中一个broker。如果这个broker失效,那么客户会自动重新连接到其它的broker。在ActiveMQ中使用failover:// 协议来实现这个功能。如果某个网络上有多个brokers而且客户使用静态发现(使用Static Transport或Failover Transport)或动态发现(使用Discovery Transport),那么客户可以容易地在某个broker失效的情况下切换到其它的brokers。当有多个broker时,如果某个broker 上没有consumers,那么这个broker上的消息可能会因得不到处理而积压起来。目前的解决方案是使用Network of brokers,以便在broker之间存储转发消息。
存储转发机制:
static/dynamic
discovery
配置:
备注:使用两个broker,分则负责不同的队列和主题
Broker1:
<broker xmlns="/schema/core" brokerName="static-broker1" dataDirectory="${activemq.base}/data">
<networkConnectors>
<networkConnector uri="static:(tcp://localhost:61621)"
name="bridge"
dynamicOnly="false"
conduitSubscriptions="true"
decreaseNetworkConsumerPriority="false">
<dynamicallyIncludedDestinations>
<queue physicalName="dataQueue"/>
<topic physicalName="dataTopic"/>
</dynamicallyIncludedDestinations>
<staticallyIncludedDestinations>
<queue physicalName="businessQueue"/>
<topic physicalName="businessTopic"/>
</staticallyIncludedDestinations>
<excludedDestinations>
<queue physicalName="commandQueue"/>
<topic physicalName="commandTopic"/>
</excludedDestinations>
</networkConnector>
</networkConnectors>
<persistenceAdapter>
<kahaDB directory="${activemq.base}/data/static-broker1/kahadb" /> </persistenceAdapter>
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61620"/>
</transportConnectors>
</broker>
Broker2:
<broker xmlns="/schema/core" brokerName="static-broker2" dataDirectory="${activemq.base}/data">
<networkConnectors>
<networkConnector uri="static:(tcp://localhost:61620)"
name="bridge"
dynamicOnly="false"
conduitSubscriptions="true"
decreaseNetworkConsumerPriority="false">
<dynamicallyIncludedDestinations>
<queue physicalName="dataQueue"/>
<topic physicalName="dataTopic"/>
</dynamicallyIncludedDestinations>
<excludedDestinations>
<queue physicalName="businessQueue"/>
<topic physicalName="businessTopic"/>
</excludedDestinations>
<staticallyIncludedDestinations>
<queue physicalName="commandQueue"/>
<topic physicalName="commandTopic"/>
</staticallyIncludedDestinations>
</networkConnector>
</networkConnectors>
<persistenceAdapter>
<kahaDB directory="${activemq.base}/data/static-broker2/kahadb" /> </persistenceAdapter>
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61621"/>
</transportConnectors>
</broker>
Jndi:
java.naming.provider.url=tcp://192.168.1.20:61620
主要是解决负载平衡和高可用性问题。
Master Slave
简介:在一个网络内运行多个brokers或者stand alone brokers时存在一个问题,这就是消息在物理上只
被一个broker持有,因此当某个broker失效,那么你只能等待直到它重启后,这个broker上的消息才能够被继续发送(如果没有设置持久化,那么在这种情况下,消息将会丢失)。Master Slave 背后的想法是,消息被复制到slave broker,因此即使master broker遇到了像硬件故障之类的错误,你也可以立即切换到slave broker而不丢失任何消息。主要分为三类:Pure Master Slave/ Shared File System Master Slave/ JDBC Master Slave
Pure Master Slave:一个master只对应一个slave
配置:
Master:
<broker xmlns="/schema/core" brokerName="master" dataDirectory="${activemq.base}/data" destroyApplicationContextOnStop="true">
activemq集环境搭建
<transportConnectors>
<transportConnector name="openwire" uri="tcp://127.0.0.1:61616"/> </transportConnectors>
</broker>
Slave:
<broker xmlns="/schema/core"
brokerName="slave"
masterConnectorURI="tcp://127.0.0.1:61616"
shutdownOnMasterFailure="false"
dataDirectory="${activemq.base}/data"
destroyApplicationContextOnStop="true">
<transportConnectors>
<transportConnector uri="tcp://127.0.0.1:62001"/>
</transportConnectors>
</broker>
Jndi:
java.naming.provider.url=failover://(tcp://192.168.1.20:61616,tcp://192.168.1.20:6200 1)?randomize=false
Shared File System Master Slave:一个master对应多个slave
配置:
备注:NFS采用Microsoft Windows Services For Unix 3.5,规划为三个broker
Broker1:
<broker xmlns="/schema/core" brokerName="localhost" dataDirectory="${activemq.base}/data" destroyApplicationContextOnStop="true">
<persistenceAdapter>
<kahaDB directory="/share/aciveMQ"/>
</persistenceAdapter>
<transportConnectors>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。