容错的链接
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静态网络连接的容错的更多相关文章

  1. 分布式-信息方式-ActiveMQ静态网络连接信息回流功能

    “丢失”的消息 有这样的场景, broker1和 broker2通过 netwoskconnector连接,一些 consumers连接到 broker1,消费 broker2上的消息.消息先被 br ...

  2. 分布式-信息方式-ActiveMQ静态网络连接多线程的consumer(消费者)访问集群

    操作如下: 1:把整个conf文件夹复制一份,比如叫做conf22:修改里面的 activemq.xml文件(1)里面的 brokerName不能跟原来的重复(2)数据存放的文件名称不能重复,比如:& ...

  3. 分布式-信息方式-ActiveMQ的静态网络连接

                           ActiveMQ的静态网络连接 在一台服务器上启动多个Broker步骤如下:1:把整个conf文件夹复制一份,比如叫做conf22:修改里面的 activ ...

  4. 分布式-信息方式-ActiveMQ的Message dispatch高级特性之(指针) Message cursors

    Message dispatch高级特性之 Message cursors概述            ActiveMQ发送持久消息的典型处现方式是:当消息的消费者准备就绪时,消息发送系统把存储的 消息 ...

  5. 分布式-信息方式-ActiveMQ的Destination高级特性3

    虚拟destination用来创建逻辑destination,客户端可以通过它来生产和消费消息,它会把消息映射到物理destination. ActiveMQ支持2种方式: 1:虚拟主题(Virtua ...

  6. 分布式-信息方式-ActiveMQ的Destination高级特性1

    ActiveMQ的Destination高级特性 Destination高级特性----->Composite Destinations 组合队列Composite Destinations : ...

  7. 分布式-信息方式-ActiveMQ的集群

    ActiveMQ的集群Queue consumer clusters              ActiveMQ支持 Consumer对消息高可靠性的负载平衡消费,如果一个 Consumer死掉,该消 ...

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

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

  9. 分布式-信息方式-ActiveMQ的消息存储持久化

    ActiveMQ的消息存储持久化■概述ActiveMQ不仅支持 persistent和 non-persistent两种方式,还支持消息的恢复( recovery)方式PTPQueue的存储是很简单的 ...

随机推荐

  1. windows下php配置环境变量

    这样重启终端后,通过php -v可查看新使用的php版本信息. 注:在path配置在上方的先生效

  2. Echarts常见问题汇总

    关于echarts使用的常见问题总结  来源:李文杨 关于echarts使用的问题总结1.legend图例不显示的问题:在legend中的data为一个数组项,数组项通常为一个字符串,每一项需要对应一 ...

  3. 学习.NET中的AppDomain

    学习.NET中的AppDomain 什么是AppDomain?AppDomain是一组程序集的逻辑容器,AppDomain是为了提供隔离而设计的.它提供了保护.配置和终止其中每一个应用程序的隔离 Ap ...

  4. Zookeeper启动失败,报错 can not open chanel to 2

    zookeeper 3.4.8 安装在 7 台不同的虚拟机上,配置文件如下: tickTime= initLimit= syncLimit= dataDir=/var/zookeeper client ...

  5. Redis常见的七种使用场景

    简单字符串缓存实战简单队列实战简单发布订阅实战简单计数器实战排行榜实战简单字符串悲观锁实战简单事务的乐观锁实战   简单字符串缓存实战 $redis->connect('127.0.0.1', ...

  6. maven中使用jetty插件

    <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin ...

  7. .htaccess 一段神奇的跳转代码

    <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_REFERER} ^.*(google|ask|yahoo|you ...

  8. 多线程-生产者消费者(lock同步)

    二.采用Lock锁以及await和signal方法是实现 import java.io.IOException; import java.util.concurrent.locks.Condition ...

  9. springboot rabbitmq direct exchange和topic exchange 写法上关于路由键的区别

    这是direct exchange写法中消息发送写法,可见下图红色框中路由键是queue队列中定义的路由键 这是topic exchange写法中消息发送写法,可见下图红色框中路由键是exchange ...

  10. 【CF1187E】Tree Painting

    题目大意:给定一棵 N 个点的树,初始全是白点.要求你做 N 步操作,每一次选定一个与一个黑点相隔一条边的白点,将它染成黑点,然后获得该白点被染色前所在的白色联通块大小的权值.第一次操作可以任意选点, ...