分布式-信息方式-ActiveMQ静态网络连接的容错
Posted caoyingjielxq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式-信息方式-ActiveMQ静态网络连接的容错相关的知识,希望对你有一定的参考价值。
容错的链接
Failover Protocol
前面讲述的都是client配置链接到指定的 broker上。但是,如果 Broker的链接失败怎么办呢?此
时, Client有两个选项:要么立刻死掉,要么去连接到其它的 broker上。
Failover协议实现了自动重新链接的逻辑。这里有两种方式提供了稳定的 brokers列表对于
Client链接。第一种方式:提供一个 static的可用的 Brokers列表。第二种方式:提供一个 dynamic发
现的可用 Brokers
Failover Protocol的配置方式
failover:(uri1,,,uriN)?key= value 或者 failover:uri1,...,uriN
Failover Protocol的默认配置
默认情况下,这种协议用于随机的去选择一个链接去链接,如果链接失败了,那么会链接到其他
的 Broker上。默认的配置定义了延迟重新链接,意味着传输将会在10秒后自动的去重新链接可用的
broker。当然所有的重新链接参数都可以根据应用的需要而配置。
Failover Protocol的使用示例,在客户端程序里面:
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
"failover: (tcp: //192.168.145.100:61616, tcp: //192.168.145.100:61676)
?randomize=false")
代码如下:
randomize=false 说明按顺序---》192.168.145.100:61616服务失败,再尝试192.168.145.100:61676
package test.mq.staitsnetwork; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class Sender { public static void main(String[] args) throws JMSException, InterruptedException { ConnectionFactory ConnectionFactory=new ActiveMQConnectionFactory( //"tcp://192.168.145.100:61616"); "failover:(tcp://192.168.145.100:61616,tcp://192.168.145.100:61676)?randomize=false"); Connection connection=ConnectionFactory.createConnection(); connection.start(); Session session=connection.createSession(Boolean.TRUE, Session.CLIENT_ACKNOWLEDGE); Destination destination=session.createQueue("my_queue"); MessageProducer Producer=session.createProducer(destination); for(int i=0;i<30;i++){ TextMessage message=session.createTextMessage("message----"+i); //Thread.sleep(1000); Producer.send(message); } session.commit(); session.close(); connection.close(); } }
结果如下:
第一种情况:192.168.145.100:61616服务成功
第二种情况:192.168.145.100:61616服务失败,再尝试192.168.145.100:61676服务失败服务成功
randomize=ture 说明随机
4次连续发送信息
结果为:
负载均衡
FailoverProtocol可用的配置参数
1: initialReconnectDelay:在第一次尝试重连之前等待的时间长度(毫秒),默认10
2: maxReconnectDelay:最长重连的时间间隔(毫秒),默认3000
3: useExponentialBackoff:重连时间间隔是答以指数形式增长,默认true
4: backoffultiplier:递增倍数,默认2.0
5: maxReconnectAttempts:默认-1|0,自版本5.6起:-1为默认值,代表不限重试次数;0代表从不重试
只尝试连接一次,并不重连),5.6以前的版本:0为默认值,代表不限重试次数所有版本:如果设置
为大于0的数,代表最大重试次数
6: startuplaxReconnectAt tempts:初始化时的最大重连次数。一旦连接上,将使用 maxReconnectAttempts
的配置,默认0
7: randomize:使用随机链接,以达到负载均衡的目的,默认true
8: backup:提前初始化一个未使用连接,以便进行快速失败转移,默认 false
9: timeout:设置发送操作的超时时间(毫秒),默认-1
10: trackmessages:设置是否缓存[故障发生时]尚未传送完成的消息,当 broker-旦重新连接成功,便将
这些缓存中的消息刷新到新连接的代理中,使得消息可以在 broker切换前后顺利传送,默认fals
11: maxcachesize:当 trackMessages启用时,缓存的最大字节,默认为128米1024 bytes
12: updateURIsSupported:设定是否可以动态修改 broker uri(自版本5.4起),默认true
以上是关于分布式-信息方式-ActiveMQ静态网络连接的容错的主要内容,如果未能解决你的问题,请参考以下文章