ActiveMQ的broker-broker方式有两种,一种 静态连接一种是动态连接,一般使用静态连接,动态连接了解就好,没有过多的去测试。

1. 多播协议multicast

  ActiveMQ使用Multicast 协议将一个Service和其他的Broker的Service连接起来。IP multicast是一个被用于网络中传输数据到其它一组接收者的技术。Ip multicast传统的概念称为组地址。组地址是ip地址在224.0.0.0到239.255.255.255之间的ip地址。 ActiveMQ broker使用multicast协议去建立服务与远程的broker的服务的网络链接。

基本的协议格式

multicast://ipadaddress:port?transportOptions

transportOptions如下:

1:group:表示唯一的组名称,缺省值default

2:minmumWireFormatVersion:被允许的最小的wireformat版本,缺省为0

3:trace:是否追踪记录日志,默认false

4:useLocalHost:表示本地机器的名称是否为localhost,默认true

5:datagramSize:特定的数据大小,默认值4 * 1024

6:timeToLive:消息的生命周期,默认值-1

7:loopBackMode:是否启用loopback模式,默认false

8:wireFormat:默认用wireFormat命名

9:wireFormat.*:前缀是wireFormat

配置示例

1:默认配置,请注意,默认情况下是不可靠的多播,数据包可能会丢失

multicast://default

2:特定的ip和端口

multicast://224.1.2.3:6255

3:特定的ip和端口以及组名

multicast://224.1.2.3:6255?group=mygroupname

Activemq使用multicast协议的配置格式如下

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="multicast"
dataDirectory="${activemq.base}/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

Multicast 协议和普通的tcp协议

它们是差不多的,不同的是Multicast能够自动的发现其他broker,从而替代了使用static功能列表brokers。用multicast协议可以在网络中频繁的添加和删除ip不会有影响。

multicast协议的好处是:能够适应动态变化的地址。

缺点:自动的链接地址和过度的销耗网络资源。

2.    Discovery协议

  Discovery是在multicast协议的功能上定义的。功能类似与failover功能。它将动态的发现multicast 协议的broker的链接并且随机的链接其中一个broker。类似于静态连接的failover。

基本配置格式如下

discovery:(discoveryAgentURI)?transportOptions

transportOptions如下:

1:reconnectDelay:再次寻址等待时间,缺省值10

2:initialReconnectDelay:初始化设定再次寻址等待时间,缺省值10

3:maxReconnectDelay:最大寻址等待时间, 缺省值30000

4:useExponentialBackOff:是否尝试BackOff重链接,默认是true

5:backOffMultiplier:尝试Backoff的次数,默认是2

6:maxReconnectAttempts:如果异常,最大的重新链接个数,默认是0

7:group:组唯一的地址,默认是default

示例:

discovery:(multicast://default)?initialReconnectDelay=100

Discovery协议的配置示例

<broker name="foo">
<transportConnectors>
<transportConnector uri="tcp://localhost:0" discoveryUri="multicast://default"/>
</transportConnectors>
</broker>

2.    Peer协议

ActiveMQ提出了peer transport connector 以让你更加容易的去嵌入broker中网络中。它将创建一个优于vm链接的p2p网络链接。 默认格式如下:

peer://peergroup/brokerName?key=value

Peer协议基本使用

当我们启动了用peer协议时,应用将自动的启动内嵌broker,也将会自动的去配置其它broker来建立链接,当然了,前提是必须属于一个组。 配置如下:

peer://groupa/broker1?persistent=false

另外,生产者和消费者都各自链接到嵌入到自己应用的broker,并且在在本地的同一个组名中相互访问数据。

Peer协议的基本原理示意图:

  在本地机器断网的情况下,本地的client访问本地brokerA将任然正常。在断网的情况下发送消息到本地brokerA,然后网路链接正常后,所有的消息将重新发送并链接到brokerB

3.  Fanout协议

Fanout协议是同时链接多个broker,默认的格式如下:
fanout:(fanoutURI)?key=value
示例:fanout:(static:(tcp://host1:61616,tcp://host2:61616,tcp://host3:61616))
表示client将试图链接到三个static列表中定义的三个URI

Fanout协议的配置方式如下:

fanout:(discoveryURI)?transportOptions
transportOptions如下:
1:initialReconnectDelay:重新链接的等待时间,默认是10
2:maxReconnectDelay:最大重新链接的等待时间,默认是30000
3:useExponentialBackOff:是否尝试BackOff重链接,默认是true
4:backOffMultiplier:尝试Backoff的次数,默认是2
5:maxReconnectAttempts:如果异常,最大的重新链接个数,默认是0
6:fanOutQueues:是否将topic消息转换queue消息,默认false
7:minAckCount:Broker链接的最小数,默认是2
配置示例:
  fanout:(static:(tcp://localhost:61616,tcp://remotehost:61616))?initialReconnectDelay=100
注意:
  Activemq不推荐使Consumer使用fanout协议。当Provider发送消息到多个broker中,测试Consumer可能收到重复的消息

  这篇文章纯属了解记录,没有进行任何测试,估计实际也没用的吧。

 

ActiveMQ 动态网络链接的更多相关文章

  1. 分布式-信息方式-ActiveMQ的动态网络链接

    ActiveMQ的动态网络链接多播协议 multicast ActiveMQ使用 Multicast协议将一个 Service和其他的 Broker的 Service连接起来,IPmulticast是 ...

  2. ActiveMQ静态网络链接(broker-to-broker)

    ActiveMQ的网络连接分为静态连接和动态连接.本章研究静态连接. 1.ActiveMQ的networkConnector是什么 在某些情况下,需要多个ActiveMQ的Broker做集群,那么就涉 ...

  3. Java消息队列--ActiveMq 实战

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

  4. ActiveMQ 入门helloworld

    1.下载安装ActiveMQ 官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Unix 等几个版本 ...

  5. 熟悉activemq的初步试用

      1.在服务器(阿里云ubuntu16.04)上安装activemq,我是直接下载activemq: wget http://archive.apache.org/dist/activemq/apa ...

  6. java activemq初体验

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

  7. Java消息队列--ActiveMq 初体验

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

  8. java消息队列--ActiveMQ

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

  9. jms和activemq

    一.什么是JMS JMS是java message service的缩写即java消息服务,是java定义的消息中间件(MOM)的技术规范(类似玉JDBC).用于程序之间的异步通信,如果两个应用程序需 ...

随机推荐

  1. 解决python安装错误问题

    遇到的问题描述: An error occurred during the installation of assemblyA Microsoft.VC90. CRT, version=9-0.307 ...

  2. 【强大的视频编辑工具】Adobe Premiere Pro CC 2019 for Mac

    [简介] PR CC是视频编辑爱好者和专业人士必不可少的视频编辑工具.它可以提升您的创作能力和创作自由度,它是易学.高效.精确的视频剪辑软件.PR CC提供了采集.剪辑.调色.美化音频.字幕添加.输出 ...

  3. 解析:为什么程序员应该有一台Mac个人电脑?

    对于开发来讲,使用Mac电脑的好处,下面简单列举几个: 首先,macOS很安全和稳定,Mac 系统的底层是最原始的unix操作系统,很多大型的银行和军工企业都是这个操作系统,安全性很高,基本不需要安装 ...

  4. puppeteer,新款headless chrome

    puppeteer puppeteer是一种谷歌开发的Headless Chrome,因为puppeteer的出现,业内许多自动化测试库停止维护,比如PhantomJS,Selenium IDE fo ...

  5. JVM 内存初学 堆(heap)、栈(stack)和方法区(method)

    这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有比较大的帮助.废话不想讲了.入主题:先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(he ...

  6. MyBatis-resultType 几种返回类型

    一.返回集合 1.返回JavaBean集合 public List<MyUser> selectMyUserByNameLike(String name); <!-- resultT ...

  7. SpringBoot集成原生redis

    redis的使用之一是Spring-data-redis,前面有介绍. 本篇介绍原生redis也就是jedis.这个效率更高 1.maven引入依赖 <!--springBoot-->&l ...

  8. VScode 1.13 gocode提示dial tcp 216.239.37.1:443: connectex: A connection attempt failed because the connected..

    在将VScode升级至 1.13后让升级gocode,在升级时报出如下错误 D:\go_work\src>go get -u -v github.com/mdempsky/gocode gith ...

  9. UESTC - 1999 也许这是唯一能阻止乐爷AK的方法( Just for Fun )(回文树)

    https://vjudge.net/problem/UESTC-1999 题意 对于一个初始为空的字符串S,你可以进行以下两种操作: 1. 在S的末尾加一个小写字母. 2. 移除S的最后一个字母. ...

  10. python--numpy、pandas

    numpy 与 pandas 都是用来对数据进行处理的模块, 前者以array 为主体,后者以 DataFrame 为主体(让我想起了Spark的DataFrame 或RDD) 有说 pandas 是 ...