首先,在ActiveMQ中提到【失效转移】这个词语那一定是你的ActiveMQ消息服务器是以“集群”的方式搭建的,否则是不会出现这个词语的。
对于消息服务器集群的简单定义:
主要是指:1.如果集群中的某一台消息服务器宕机,与该台消息服务器相连接的生产者和消费者能否自动连接到其他正常工作的消息服务器。2.如果集群中的某一台消息服务器宕机,该台服务器上未消费的消息能否在该台服务器恢复正常之前由其他服务器转发。
ActiveMQ提供了一种叫做失效转移(也叫故障转移,FailOver)的策略。失效转移提供了在传输层上重新连接到其他任何传输器的功能。使用它很简单,只需要在uri中配置就行了
语法如下:
failover:(uri1,...,uriN)?transportOptions 或者 failover:uri1,...,uriN
例子:
failover:(tcp://localhost:61616,tcp://remotehost:61616)?initialReconnectDelay=100
注:上述例子中?后面的就是语法中的transportOptions
如果某个ActiveMQ客户端发现uri1地址失效了,它会立即转向uri地址列表中其他可以连接的消息服务器进行重连,以保证继续正常工作,请注意,并不是uri1失效了就会选则uri2重连,这种选择其他地址的方式默认是随机的,以保证负载均衡,如果你想关闭随机,可以transportOptions中加入randomize=false。
transportOptions有多种参数可以选择,如下:
initialReconnectDelay:默认为10,单位毫秒,表示第一次尝试重连之前等待的时间。
maxReconnectDelay:默认30000,单位毫秒,表示两次重连之间的最大时间间隔。
useExponentialBackOff:默认为true,表示重连时是否加入避让指数来避免高并发。
reconnectDelayExponent:默认为2.0,重连时使用的避让指数。
maxReconnectAttempts:5.6版本之前默认为-1,5.6版本及其以后,默认为0,0表示重连的次数无限,配置大于0可以指定最大重连次数。
randomize:默认为true,表示在URI列表中选择URI连接时是否采用随机策略,记住,这种随机策略在第一次选择URI列表中的地址时就开始生效,所以,如果为true的话,一个生产者和一个消费者的Failover连接地址都是两个URI的话,有可能生产者连接的是第一个,而消费者连接的是第二个,造成一个服务器上只有生产者,一个服务器上只有消费者的尴尬境地。