容错的链接
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. tensorflow 使用tfrecords创建自己数据集

    直接采用矩阵方式建立数据集见:https://www.cnblogs.com/WSX1994/p/10128338.html 制作自己的数据集(使用tfrecords) 为什么采用这个格式? TFRe ...

  2. Iterable<T>接口

    https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html public interface Iterable<T> ...

  3. Nginx(高并发)

    Nginx(engine x)高性能和反向代理的web服务器反向代理:保护客户资源,只要是http协议都可以Web服务器:IIS 阿帕奇 NginxNginx可以作为负载均衡(NLB只支持Http)我 ...

  4. Binding的简单使用

    Binding可以看作是数据的桥梁,两端分别为Source和Target,一般情况,Source是逻辑层的对象,Target是UI层的控件对象,可以将数据从逻辑层送往UI层展现 简单的例子: clas ...

  5. luogu题解 P2212 【浇地Watering the Fields】

    题目链接: https://www.luogu.org/problemnew/show/P2212 思路: 一道最小生成树裸题(最近居然变得这么水了),但是因为我太蒻,搞了好久,不过借此加深了对最小生 ...

  6. Zookeeper VS Chubby

    目录 区别的根源      1)一致性      2)Client Cache vs No Cache 总结 参考资料 区别的根源 一个设计良好的系统应该是围绕并为其设计目标服务的. Chubby:p ...

  7. 04 Redis主从同步

    redis主从同步 原理:1. 从服务器向主服务器发送 SYNC 命令.2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令.3 ...

  8. N1试卷常考词汇总结

    免れる まぬがれる 免去,幸免 軽率 けいそつ 轻率,草率 捩れる ねじれる 拧劲儿,扭歪,弯曲 裂ける さける 裂开,破裂 避ける さける 躲避,避开 つまむ 挟,捏,掐 追及 ついきゅう 追上.追 ...

  9. exits 和no exits

    exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:  select name from student where sex = 'm' and mark exists(select ...

  10. uestc summer training #9 牛客第三场 BFS计数

    G.coloring tree BFS计数 题目:给你n(<=5000)个节点的一颗树 你有K(<=5000)种颜色 你可以给每一个节点染一种颜色 总共有Kn种染色方法 在一种染色方法中 ...