ActiveMQ(12):容错的链接和动态网络连接

一、简介

前面讲述的都是Client配置链接到指定的broker上。但是,如果Broker的链接失败怎么办呢?

此时,Client有两个选项:

1、要么立刻死掉

2、要么去连接到其它的broker上。

Failover协议实现了自动重新链接的逻辑。这里有两种方式提供了稳定的brokers列表对于Client链接。

第一种方式:提供一个static的可用的Brokers列表。

第二种方式:提供一个dynamic 发现的可用Brokers。

二、容错的链接(客户端配置)

2.1 Failover Protocol 的配置方式

failover:(uri1,...,uriN)?key=value 或者 failover:uri1,...,uriN

默认情况下,这种协议用于随机的去选择一个链接去链接,如果链接失败了,那么会链接到其他的Broker上。默认的配置定义了延迟重新链接,意

味着传输将会在10秒后自动的去重新链接可用的broker。当然所有的重新链接参数都可以根据应用的需要而配置。默认情况下,这种协议用于随机的

去选择一个链接去链接,如果链接失败了,那么会链接到其他的Broker上。默认的配置定义了延迟重新链接,意味着传输将会在10秒后自动的去重新

链接可用的broker。当然所有的重新链接参数都可以根据应用的需要而配置。

在客户端程序里面:

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("liuy","123456","failover:(tcp://192.168.91.8:61616,tcp://192.168.91.8:61676)?randomize=false");

可用的配置参数:

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:timeout:设置发送操作的超时时间(毫秒),默认-1

10:trackMessages:设置是否缓存[故障发生时]尚未传送完成的消息,当broker一旦重新连接成功,便将这些缓存中的消息刷新到新连接的代

理中,使得消息可以在broker切换前后顺利传送,默认false

11:maxCacheSize:当trackMessages启用时,缓存的最大字节,默认为128*1024bytes

12:updateURIsSupported:设定是否可以动态修改broker uri(自版本5.4起),默认true

三、动态网络链接

多播协议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

3.1 配置示例

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

3.2 Multicast 协议和普通的tcp协议

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

的添加和删除ip不会有影响。

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

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

3.3 Discovery协议

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

基本配置格式如下:

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>

3.4 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.5 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可能收到重复的消息

时间: 2024-09-21 11:12:15

ActiveMQ(12):容错的链接和动态网络连接的相关文章

linux硬链接和符号连接

linux硬链接与软链接1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接.[硬连接]硬连接指通过索引节点来进行连接.在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index).在Linux中,多个文件名指向同一索引节点是存在的.一般这种连接就是硬连接.硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬

基于Metronic的Bootstrap开发框架经验总结(12)--页面链接收藏夹功能的实现

在一个系统里面,往往有很多菜单项目,每个菜单项对应一个页面,一般用户只需要用到一些常用的功能,如果每次都需要去各个层次的菜单里面去找对应的功能,那确实有点繁琐.特别是在菜单繁多,而客户又对系统整体不熟悉的情况下,如果有一个类似浏览器的收藏夹模块,把一些常用的菜单连接保存起来,每次从这个收藏夹主页去找对应的页面,那样确实是省事省力,非常方便.本篇随笔就是介绍在基于Metronic的Bootstrap开发框架里面实现这个收藏夹的思路. 1.系统的收藏夹界面处理效果 为了实现这个收藏夹功能,我们也需要

内链接、左右连接、union并集

第一个:内链接 inner join select   *   from   a   inner   join   b   on   a.id=b.id where a.id =b.id (这种用法非常见) select   *   from   a,b   where   a.id=b.id  第二种: 左连接 left join on.....,查询结果为左边的所有记录,右表无的记录显示null 右连接 right join on .....,查询结果为右边的所有记录,左表无的显示为null

socket链接的关闭连接与close和shutdown的区别

TCP主动关闭连接 appl: close(), --> FIN FIN_WAIT_1 //主动关闭socket方,调用close关闭socket,发FIN <-- ACK FIN_WAIT_2 //对方操作系统的TCP层,给ACK响应.然后给FIN <-- FIN --> ACK "TIME_WAIT" -- 2MSL timeout -->CLOSED //TIME_WAIT,防止ACK没有给到对方. 注意:close时,如果TCP发送队列中还有数据,

SQL Server 不同数据间建立链接服务器进行连接查询

    在平时查询以及导数据时,经常会遇到需要使用两个数据库里数据的情况,这时就会用到在两个服务器之间建立一个链接,进行操作,脚本语句如下: 举例:例如你在测试服务器上想要查询业务库里的数据信息,此脚本就需要在测试服务器上执行,输入业务服务器的IP地址.业务服务器的账户.密码,然后执行语句即可:反之,如果你需要将测试数据库的数据导入正式库内,就需要在正式库内建立可以连接到测试库的链接. --创建链接服务器 exec sp_addlinkedserver 'ITSV' , '' , 'SQLOLE

服务器之间socket传输单链接和多连接测试结果

今天做了一下测试,目的是看看局域网内服务器a,通过一个连接往服务器b传输数据,和通过多个连接传输的不同. 结果发现和多少个连接没关系,一个进程一个连接就能跑满网卡,只要write的时候够快,read的时候够快就可以.1000m网卡,tcp能跑到910m 下面是golang写的程序: server: package mainimport ( "fmt" "net" "os")func main() { l, err := net.Listen(&q

链接文件 (硬连接 与 符号连接)

硬连接创建一个单独的文件,其中包括有关源文件的信息和位置,引用该硬连接文件的效果跟引用源文件相同;; cp 中 -l  --link hard link files instead of copying 用于创建一个 硬连接 可以看出 inode 位置是相同的;;; 即它们是同一个文件,, 注意/: 在同一个物理介质的文件之间只能创建一个硬连接,不能在不同的挂载点下的文件之间创建硬连接,这种情况下,必须使用符号连接 ;; cp -s, --symbolic-link make symbolic

内连接,外链接(左连接、右连接、全连接),交叉连接大总结+附SQL JOINS图解[转]

1.什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据. 目的:实现多个表查询操作. 2.分类: 首先划分一下,连接分为三种:内连接.外连接.交叉连接 内连接(INNER JOIN): 分为三种:等值连接.自然连接.不等连接 外连接(OUTER JOIN): 分为三种:      左外连接(LEFT OUTER JOIN或LEFT JOIN)      右外连接(RIGHT OUTER JOIN或RIGHT JOIN)      全外连接(FULL OUTER JOI

django 短链接改成长连接

1 from django.conf import settings 2 from django.core.wsgi import get_wsgi_application 3 from gunicorn.app.base import Application 4 # gunicorn 一个Python WSGI UNIX的HTTP服务器,按我的理解,它的作用可能就是用来代替django自带server的. 5 # 有了它就不用自带的runserver了,自带的server只能单线程运行,而这个