activemq学习第五篇:activemq伪集群学习(代码片段)

yangk1996 yangk1996     2023-05-07     507

关键词:

启动多实例

# 1、将conf文件夹复制一份  
cp -r conf/ conf-1/

#主要是修改conf-1目录activemq.xml
# 2、修改Broker名称
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost-1" dataDirectory="$activemq.data">

#3、数据存储如果使用的是kahaDB,需要更改存储位置,不能出现重复:
      <persistenceAdapter>
            <kahaDB directory="$activemq.data/kahadb_1"/>
        </persistenceAdapter> 
#4、所有涉及的transportConnectors的端口,都要跟conf里面的的不一样
        <transportConnectors>
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61626?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://0.0.0.0:5622?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://0.0.0.0:61623?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1823?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://0.0.0.0:61624?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
        </transportConnectors>
        
#5、修改jetty.xml,端口:
    <bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
             <!-- the default port number for the web console -->
        <property name="host" value="0.0.0.0"/>
        <property name="port" value="8162"/>
    </bean>
#6、到bin下面,复制一个activemq, 叫activemq-1:
cp -r activemq activemq-1

#7、#activemq-1.xml,ACTIVEMQ_PIDFILE、ACTIVEMQ_CONF需要修改
  ACTIVEMQ_PIDFILE="$ACTIVEMQ_DATA/activemq-1.pid"(162行)
ACTIVEMQ_CONF="$ACTIVEMQ_BASE/conf-1" (125行)

技术图片

networkConnector:

??在某些场景下,需要多个ActiveMQ的Broker做集群,那么就涉及到Broker到Broker的通信,这个被称为ActiveMQ的networkConnector。
??ActiveMQ的ne tworkConnector默认是单向的,一 个Broker在一 端发送消息, 另一个Broker在另一端接收消息。这就是所谓的“桥接”。ActiveMQ也支持双向链接,创建一个双向的通道对于两个Broker,不仅发送消息而且也能从相同的通道来接收消息,通常作为duplex connector来映射,如下:
技术图片
Static networks:
??Static networkConnector是用于创建一一个静态的配置对于网络中的多个Broker。这种协议用于复合url,一个复合url包括多个url地址。格式如下:static: (uri1, uri2, uri3,..) ?key=value

// 在broker标签里面配置
<networkConnectors>
    <networkConnector name="local network" 
    uri="static://(tcp://192.168.100.155:61616,tcp://192.168.100.155:61626)"/>
</networkConnectors>

这样配置之后可以看到,当61616发送消息时,61626也是可以接收到的。这个就是单向链接.
当brokerA(61616)和brokerB(61626)使用单向链接时.一般情况下brokerB会比A优先接受消息。
技术图片
networkConnector可用配置:
??1:name:默认是bridge
??2: dynamicOnly: 默认是false,如果为true, 持久订阅被激活时才创建对应的网路持久订阅。默认是启动时激活
??3:decreaseNetworkConsumerPriority:默认是false。设定消费者优先权,如果为true,网络的消费者优先级降低为-5。 如果为false,则默认跟本地消费者一样为0
??4:networkTTL :默认是1 ,网络中用于消息和订阅消费的broker数量
??5:messageTTL :默认是1 ,网络中用于消息的broker数量
??6:consumerTTL:默认是1 ,网络中用于消费的broker数量
??7:conduitSubscriptions :默认true,是否把同一个broker的多个consumer当做一个来处理
??8:dynamicallyIncludedDestinations :默认为空,要包括的动态消息地址,类似于excludedDestinations,如:

 <dynamicallyIncludedDestinations>
     <!-- 需要过滤的消息名称 -->
      <queue physicalName="include.test.foo"/>
      <topic physicalName="include.test.bar"/>
    </dynamicallyIncludedDestinations>

??9:staticallyIncludedDestinations :默认为空,要包括的静态消息地址。类似于excludedDestinations,如:

 <staticallyIncludedDestinations>
      <queue physicalName="always.include.queue"/>
    </staticallyIncludedDestinations>

当我们不希望brokerA的所有消息都发送到brokerB上,可以选择配置此项
??10:excludedDestinations :默认为空,指定排除的地址,示例如下:

<networkConnectors>
        <networkConnector uri="static://(tcp://localhost:61616)" name="bridge" dynamicOnly="false" conduitSubscriptions="true" decreaseNetworkConsumerPriority="false">
            <excludedDestinations>
                <!-- 排除 -->
                <queue physicalName="exclude.test.foo"/>
                <topic physicalName="exclude.test.bar"/>
            </excludedDestinations>
            <dynamicallyIncludedDestinations>
                 <!-- 包含 -->
                <queue physicalName="include.test.foo"/>
                <topic physicalName="include.test.bar"/>
            </dynamicallyIncludedDestinations>
            <staticallyIncludedDestinations>
                 <!-- 包含 -->
                <queue physicalName="always.include.queue"/>
                <topic physicalName="always.include.topic"/>
            </staticallyIncludedDestinations>
        </networkConnector>
    </networkConnectors>

??11:duplex :默认false,设置是否能双向通信
??12:prefetchSize :默认是1000,持有的未确认的最大消息数量,必须大于0,因为网络消费者不能自己轮询消息
??13:suppressDuplicateQueueSubscriptions:默认false,如果为true, 重复的订阅关系一产生即被阻止
??14:bridgeTempDestinations :默认true,是否广播advisory messages来创建临时destination
??15:alwaysSyncSend(同步) :默认false,如果为true,非持久化消息也将使用request/reply方式代替oneway方式发送到远程broker。
??16:staticBridge :默认false,如果为true,只有staticallyIncludedDestinations中配置的destination可以被处理。
??17:dynamicOnly:默认是false,如果为true, 持久订阅被激活时才创建对应的网路持久订阅。默认是启动时激活

消息的回流功能:
??有这样的场景,brokerA 和brokerB通过networkGonnector连接,一些consumers 连接到brokerB ,消费brokerA_上的消息。消息先被brokerB从brokerA_上消费掉,然后转发给这些consumers.不幸的是转发部分消息的时候brokerB重启了,这些consumers发现brokerB连接失败,通过failover连接到brokerA上去了,但是有一部分他们还没有消费的消息被brokerA已经分发到了brokerB上去了。这些消息,就好像是消失了,除非有消费者重新连接到brokerB上来消费。即使配置成双向链接,还是会有一部分数据接收不到,只有从新连接brokerB才可以。双向连接会在开始的时候分配两边接收的消息数量
??从5.6版起,在destinationPolicy上新增的选项replayWhenNoConsumers。这个选项使得brokerB上有需要转发的消息但是没有消费者时,把消息回流到它原始的brokerA. 同时把enableAudit设置为false,为了防止消息回流后被当做重复消息而不被分发。需要设置成双向连接且在两个broker的activemq.xml里面配置如下信息:

<destinationPolicy>
      <policyMap>
        <policyEntries>
           <policyEntrytopic=">" enableAudit="false">
             <networkBridgeFilterFactory>
                 <conditionalNetworkBridgeFilterFactoryreplayWhenNoConsumers="true" />
             </networkBridgeFilterFactory>
           </policyEntry>
        </policyEntries>
      </policyMap>
</destinationPolicy>

连接的容错:

Fai lover Protocol:
? 前面讲述的都是Client配置链接到指定的broker上。但是,如果Broker的链接失败怎么办呢?此时,Client有两个选项:要么立刻死掉,要么去连接到其它的broker上。
? Failover协议实现了自动重新链接的逻辑。这里有两种方式提供了稳定的brokers列表对于Client链接。第一种方式:提供一个static的可用的Brokers列表。第二种方式:提供一个dynamic发现的可用Brokers。
Failover Protocol的默认配置:
?   默认的情况下,这种协议用于随机的去选择一个链接去连接,如果连接失败了,那么会连接到其他的Broker上。默认配置定义了延迟重新连接,意味着传输将会在10s后自动去重新连接可用的broker.当然所以有的重新连接参数都可以根据应用的需要而配置的。
Failover Protocol 使用示例:

ConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory("failover:(tcp://192.168.100.155:61616,tcp://192.168.100.155:61626)?randomize=fase");

当发送消息的时候,第一次有可能会发送给brokerA,当把brokerA kill掉之后。再次发送消息的时候,就会发送给brokerB。这其实是一种容错机制。当randomize=true这样设置消息就会出现一种负载均衡。随机发送给不同的broker。可以保证既能容错也能有负载均衡。
Failover Protocol 可用的配置参数:

  1. initialReconnectDelay: 在第一次尝试重新连接之前等待的时间长度(毫秒),默认10
  2. maxReconnectDelay: 最长重连时间间隔(毫秒),默认30000
  3. useExponentialBackOff: 重连时间间隔是否以指数形式增长,默认true
  4. backOffMultiplier:递增倍数:默认2.0
  5. maxReconnectAttempts: 默认1|0,自5.6版本开始,-1为默认值,代表不限重试次数,0标识从不重试(只尝试连接一次,并不重连),5.6以前的版本,0为默认值,代表不重试,如果设置大于0的数,则代表最大重试次数。
  6. startupMaxReconnectAttempts: 初始化时的最大重试次数,一旦连接上,将使用maxReconnectAttempts的配置,默认0
  7. randomize: 使用随机连接,以达到负载均衡的目的,默认true
  8. backup: 提前初始化一个未使用的链接,以便进行快速的失败转移,默认false.
  9. trackMessages: 设置是否缓存(故障发生时)尚未传送完成的消息,当broker一旦重新连接成功,便将这些缓存中的消息刷新到新连接的代理中,使得消息可以在broker切换前后顺利传送。默认false
  10. maxCacheSize: 当trackMessage启动时,缓存的最大子接,默认为127*1024bytes
  11. updateURISupported:设定是否可以动态修改broker uri(自5.4版本开始),默认true.

官方集群文档:

http://activemq.apache.org/masterslave.html

activemq学习系列activemq集群(代码片段)

activemq集群activemq是可以通过 networkConnectors来实现集群的。首页准备多台activemq 1:端口号:8161,服务端口号:616162:端口号:8162,服务端口号:616173:端口号:8163,服务端口号:61618然后在任意一台的/conf/activemq.xml的&nbs... 查看详情

基于docker搭建activemq的高可用集群

  最近刚开始玩Docker和ActiveMQ刚好学习到ActiveMQ集群的搭建,就将其记录了下来给有需要的人,也可以跟大家交流交流。  这里先感谢慕课网和http://blog.csdn.net/lifetragedy/article/details/51869032,在学习ActiveMQ有很大的帮助... 查看详情

ck2129-实战activemq集群与应用(cp1817,cp1818)

CK2129-实战ActiveMQ集群与应用程序员学习大纲http://www.jianshu.com/u/83823fee7405给广大支持者的回馈,留言索取,请大家珍惜,收集不易,认真学习,提供解答服务。本套教程(视频,课件,源码)索取QQ:1225462853  CK2129-实战Acti... 查看详情

activemq集群的安装

activeMQ集群的安装1.解压tarzxvfapache-activemq-5.13.3-bin.tar.gz2.移动解压目录分别生成不同的节点cp-rapache-activemq-5.13.3/usr/local/ActiveMQ-node1cp-rapache-activemq-5.13.3/usr/local/ActiveMQ-node2cp-rapache-activemq-5.13 查看详情

activemq(13):activemq的集群

一、简介1.1消费者集群(Queueconsumerclusters)ActiveMQ支持Consumer对消息高可靠性的负载平衡消费,如果一个Consumer死掉,该消息会转发到其它的Consumer消费的Queue上。如果一个Consumer获得消息比其它Consumer快,那么他将获得更多的消息... 查看详情

activemq集群搭建

集群搭建一:静态网络集群1.简介?当ActiveMQ面对大量消息存储和大量Client交互时,性能消耗将会达到单个broker极限,此时我们需要对ActiveMQ进行水平扩展。ActiveMQ提供了“network”机制,可以把多个broker实例“串联”一起,形成“Fo... 查看详情

activemq实战-集群

原文:http://blog.csdn.net/lifetragedy/article/details/51869032 ActiveMQ的集群 内嵌代理所引发的问题:消息过载管理混乱如何解决这些问题——集群的两种方式:Masterslave BrokerclustersActiveMQ的集群有两种方式:MASTER/SLAVE模式Cluster模... 查看详情

activemq高可用集群方案

...稳定性要求极高的系统中,高可用的是必不可少的,当然ActiveMQ也有自己的集群方案。从ActiveMQ5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper+LevelDB的Master-Slave实现方式。相关文章:范例项目:&nbs... 查看详情

mq_学习_01_资源帖

...vaSystemMessageQueue3.7UR1技术概述消息队列-推/拉模式学习&ActiveMQ及JMS学习分布式消息中间件(五)——MQ基础详解三、参考资料-集群ActiveMQ高可用集群方案ActiveMQ的集群与高可用 查看详情

activemq高可用+集群

原文地址:http://blog.csdn.net/lifetragedy/article/details/51869032ActiveMQ的集群 内嵌代理所引发的问题:消息过载管理混乱如何解决这些问题——集群的两种方式:Masterslave BrokerclustersActiveMQ的集群有两种方式:MASTER/SLAVE模式Cluster模... 查看详情

activemq集群配置高可用

自从activemq5.9.0开始,activemq的集群实现方式取消了传统的PureMasterSlave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数据库共享依然存在。 1、Master-Slave部署方式 1)、SharedFilesystemMaster-Slave方式 ... 查看详情

activemq的单节点和集群部署

平安寿险消息队列用的是ActiveMQ。单节点部署:下载解压后,直接cd到bin目录,用activemqstart命令就可启动activemq服务端了。ActiveMQ默认采用61616端口提供JMS服务,使用8161端口提供管理控制台服务,执行以下命令以便检验是否已经成... 查看详情

activemq+zookeper高可用集群方案配置

...稳定性要求极高的系统中,高可用的是必不可少的,当然ActiveMQ也有自己的集群方案。从ActiveMQ5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper+LevelDB的Master-Slave实现方式。相关文章:范例项目:&nbs... 查看详情

47.activemq集群

...Sec原创)  使用ZooKeeper实现的Master-Slave实现方式,是对ActiveMQ进行高可用的一种有效的解决方案,高可用的原理:使用ZooKeeper(集群)注册所有的ActiveMQBroker。只有其中的一个Broker可以对外提供服务(也就是Master节点),其他... 查看详情

activemq的集群方案对比及部署

转载:http://blog.csdn.net/lifetragedy/article/details/51869032ActiveMQ的集群 内嵌代理所引发的问题:消息过载管理混乱如何解决这些问题——集群的两种方式:Masterslave BrokerclustersActiveMQ的集群有两种方式:MASTER/SLAVE模式Cluster模式&nb... 查看详情

activemq使用(代码片段)

 一、Windows安装ActiveMQ1.下载解压2.启动服务二、Linux安装ActiveMQ1.下载解压2.启动访问三、队列模式1.创建maven项目2.生产者3.消费者四、主题模式1.修改队列名字2.修改主题五、Spring集成ActiveMQ1.pom.xml2.消息接口3.... 查看详情

activemq集群(代码片段)

ZooKeeper+ActiveMQ可以实现主从模式和集群模式一、主从模式  Master-Slave主从模式是一种高可用解决方案,在Zookeeper中注册若干ActiveMQBroker,其中只有一个Broker提供对外服务(Master),其他Broker处于待机状态(Slave)。当Master出现... 查看详情

activemq集群搭建(代码片段)

一、Activemq主备搭建  SharedFilesystemMaster-Slave方式  sharedfilesystemMaster-Slave部署方式主要是通过共享存储目录来实现master和slave的热备,所有的ActiveMQ应用都在不断地获取共享目录的控制权,哪个应用抢到了控制权,它就成为mast... 查看详情