1、在一台服务器上启动多个Brokerapache
2、ActiveMQ的静态网络连接缓存
<networkConnectors> <networkConnector name="local network" uri="static://(tcp://remotehost1:61616,tcp://remotehost2:61616)"/> </networkConnectors>
<dynamicallyIncludedDestinations> <queue physicalName="include.test.foo"/> <topic physicalName="include.test.bar"/> </dynamicallyIncludedDestinations>
九、staticallyIncludedDestinations:默认为空,要包括的静态消息地址。相似于excludedDestinations,如:服务器
<staticallyIncludedDestinations> <queue physicalName="always.include.queue"/> </staticallyIncludedDestinations>
十、excludedDestinations:默认为空,指定排除的地址,示例以下:
十一、duplex:默认false,设置是否能双向通讯
十二、prefetchSize:默认是1000,持有的未确认的最大消息数量,必须大于0,由于网络消费者不能本身轮询消息
1三、suppressDuplicateQueueSubscriptions:默认false,若是为true,重复的订阅关系一产生即被阻止
1四、bridgeTempDestinations:默认true,是否广播advisory messages来建立临时destination
1五、alwaysSyncSend:默认false,若是为true,非持久化消息也将使用request/reply方式代替oneway方式发送到远程broker
1六、staticBridge:默认false,若是为true,只有staticallyIncludedDestinations中配置的destination能够被处理网络
3、“丢失”的消息
存在这样的场景,broker1和broker2经过networkConnector链接,一些consumers链接到broker1,消费broker2上的消息。消息先被broker1从broke2上消费掉,而后转发给这些consumers。不幸的是转发部分消息的时候broker1重启了,这些consumers发现broker1链接失败,经过failover链接到broker2上去了,可是又一部分他们尚未消费的消息被broker2已经分发到broker1上去了。这些消息,就好像是消失了,除非有消费者从新链接到broker1上来消费。
从5.6版起,在destinationPolicy上新增的选项replayWhenNoConsumers。这个选项使得broker1上有须要转发的消息可是没有消费者时,把消息回流到它原始的broker。同时把enableAudit设置为false,为了防止消息回流后被当作重复消息而不被分发,示例以下:负载均衡
<destinationPolicy> <policyMap> <policyEntry queue=">" enableAudit="false"> <networkBridgeFilterFactory> <conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/> </networkBridgeFilterFactory> </policyEntry> </policyMap> </destinationPolicy>
4、容错的链接dom
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory ("failover:(tcp://localhost:61616,tcp://localhost:61617) ?randomize=false");
5、动态网络链接(纯理论)
多播协议multicast
ActiveMQ使用Multicast协议将一个Service和其余的Broker的Service链接起来。IP multicast是一个被用于网络中传输数据到其余一组接收者的技术。
IP multicast传统的概念成为组地址。组地址是ip地址在224.0.0.0到239.255.255.255之间的ip地址。ActiveMQ broker使用multicast协议去创建服务与远程的broker的服务的网络链接。tcp
基本的格式配置
multicast://ip address:port?transportOptions
一、group:表示惟一的组名称,缺省值default
二、minmumWireFormatVersion:被容许的最小的wireformat版本,缺省为0
三、trace:是否追踪记录日志,默认false
四、useLocalHost:表示本地机器的名称是否为localhost,默认true
五、datagramSize:特定的数据大小,默认值41024
六、timeToLive:消息的声明周期值,默认值-1
七、loopBackMode:是否启用loopback模式,默认false
八、wireFormat:默认用wireFormat命名
九、wireFormat.:前缀是wireFormatide
配置示例
1:默认配置,默认状况下是不可靠的多播,数据包可能会丢失
multicast://default
2:特定的ip和端口
multicast://224.1.2.3:6255
3:特定的ip和端口以及组名
multicast://224.1.2.3:6255?group=mygroupnameoop
ActiveMQ使用multicast协议的配置格式以下:测试
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="multicast" dataDirectory="${activemq.data}/data"> <networkConnectors> <networkConnector name="default-nc" uri="multicast://default"/> </networkConnectors> <transportConnectors> <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default"/> </transportConnectors> </broker>
说明:
1:uri="multicast://default"中的default是activemq默认的ip,默认动态 的寻找地址
2:"discoveryUri"是指在transport中用multicast的default的地址传递
3:"uri"指动态寻找可利用的地址
4:若是防止自动的寻找地址?
(1)名称为openwire的transport,移除discoveryUri="multicast:
//default"便可。传输链接用默认的名称openwire来配置broker的tcp多点链接,这将容许其余broker可以自动发现和链接到可用的broker中。
(2)名称为"default-nc"的networkConnector,注释掉或者删除便可。
ActiveMQ默认的networkConnector基于multicast协议的链接的默认名称是default-nc,并且自动的去发现其余broker。去中止这种行为,只须要注销或者删除掉default-nc网络链接。
(3)使brokerName的名字惟一,能够惟一识别Broker的实例,默认是localhost
Discovery协议
Discovery是在multicast协议的功能上定义的。功能相似与Failover功能。它将动态的发现multicast协议的broker的链接而且随机的链接其中一个broker。
<broker name="foo"> <transportConnectors> <transportConnector uri="tcp://localhost:0" discoveryUri="multicast://default"/> </transportConnectors> </broker>
Peer协议
ActiveMQ提供了peer transport connector提供了更加容易的去嵌入broker网络中。它建立一个优于vm链接的p2p网络链接。默认格式以下:
peer://peergroup/brokerName?Key=value
Peer协议的基本使用
当咱们启用了peer协议时,应用将自动的启动内嵌broker,也将会自动的去配置其它broker来创建链接,前提是必需要有一个组。配置以下:
peer://groupa/broker1?Persistent=false
另外,生产者和消费者都各自链接到嵌入到本身应用的broker,而且在本地的同一个组名中相互访问数据。
Fanout协议是同时链接到多个broker,默认的格式以下:
fanout:(fanoutURI)?key=value
示例:fanout:(static:(tcp://host1:61616,tcp://host2:61616))
表示client将试图链接到两个static列表中定义的三个URI