static networkConnector是用于创建一个静态的配置对于网络中的多个Broker做集群,这种协议用于复合url,一个复合url包括多个url地址。

  1. <networkConnectors>
  2. <networkConnector name="local network" duplex="true"
  3. uri="static://(tcp://192.168.174.104:61616,tcp://192.168.174.104:61676)"/>
  4. </networkConnectors>

常用networkConnector配置的可用属性:

  conduitSubscriptions :默认true,是否把同一个broker的多个consumer当做一个来处理

  duplex :默认false,设置是否能双向通信

  1. 消息发送代码
  1. public class JmsSend {
  2.  
  3. public static void main(String[] args) throws JMSException {
  4. ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.174.104:61616");
  5. Connection connection = connectionFactory.createConnection();
  6.  
  7. connection.start();
  8.  
  9. Session session=connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
  10. Destination queue=session.createQueue("my-queue4");
  11.  
  12. MessageProducer producer=session.createProducer(queue);
  13.  
  14. for(int i=0 ; i<20 ; i++){
  15. TextMessage message=session.createTextMessage("message"+i);
  16. //message.setStringProperty("queue", "queue"+i);
  17. //message.setJMSType("1");
  18. producer.send(message);
  19. }
  20. session.commit();
  21. session.close();
  22.  
  23. connection.close();
  24.  
  25. }
  26.  
  27. }
  1. 192.168.174.104:61616 broker1 接收测试代码
  1. public class JmsReceiver1 {
  2. public static void main(String[] args) throws Exception {
  3.  
  4. ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
  5. "tcp://192.168.174.104:61616");
  6.  
  7. for (int i=0; i<10 ;i++){
  8. new Myhread1(connectionFactory).start();
  9.  
  10. Thread.sleep(1000);
  11.  
  12. }
  13.  
  14. }
  15.  
  16. }
  17.  
  18. class Myhread1 extends Thread {
  19.  
  20. private ConnectionFactory connectionFactory ;
  21.  
  22. public Myhread1(ConnectionFactory connectionFactory) {
  23. super();
  24. this.connectionFactory = connectionFactory;
  25. }
  26.  
  27. public void run() {
  28.  
  29. try {
  30.  
  31. final Connection connection = connectionFactory.createConnection();
  32. connection.start();
  33.  
  34. final Session session = connection.createSession(Boolean.TRUE,
  35. Session.AUTO_ACKNOWLEDGE);
  36.  
  37. Destination queue = session.createQueue("my-queue4");
  38.  
  39. MessageConsumer consumer = session.createConsumer(queue);
  40.  
  41. consumer.setMessageListener(new MessageListener() {
  42. public void onMessage(Message message) {
  43. TextMessage msg = (TextMessage) message;
  44. try {
  45. System.out.println("1======"+msg.getText());
  46. } catch (JMSException e) {
  47. // TODO Auto-generated catch block
  48. e.printStackTrace();
  49. }
  50.  
  51. try {
  52. session.commit();
  53. } catch (JMSException e) {
  54. // TODO Auto-generated catch block
  55. e.printStackTrace();
  56. }
  57.  
  58. try {
  59. session.close();
  60. } catch (JMSException e) {
  61. // TODO Auto-generated catch block
  62. e.printStackTrace();
  63. }
  64.  
  65. try {
  66. connection.close();
  67. } catch (JMSException e) {
  68. // TODO Auto-generated catch block
  69. e.printStackTrace();
  70. }
  71.  
  72. }
  73. });
  74.  
  75. } catch (JMSException e) {
  76. e.printStackTrace();
  77. }
  78.  
  79. }
  80.  
  81. }
  1. 192.168.174.104:61676 broker2 接收测试代码
  1. public class JmsReceiver2 {
  2. public static void main(String[] args) throws Exception {
  3.  
  4. ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
  5. "tcp://192.168.174.104:61676");
  6.  
  7. for (int i=0; i<10 ;i++){
  8. new Myhread2(connectionFactory).start();
  9.  
  10. Thread.sleep(1000);
  11.  
  12. }
  13.  
  14. }
  15.  
  16. }
  17.  
  18. class Myhread2 extends Thread {
  19.  
  20. private ConnectionFactory connectionFactory ;
  21.  
  22. public Myhread2(ConnectionFactory connectionFactory) {
  23. super();
  24. this.connectionFactory = connectionFactory;
  25. }
  26.  
  27. public void run() {
  28.  
  29. try {
  30.  
  31. final Connection connection = connectionFactory.createConnection();
  32. connection.start();
  33.  
  34. final Session session = connection.createSession(Boolean.TRUE,
  35. Session.AUTO_ACKNOWLEDGE);
  36.  
  37. Destination queue = session.createQueue("my-queue4");
  38.  
  39. MessageConsumer consumer = session.createConsumer(queue);
  40.  
  41. consumer.setMessageListener(new MessageListener() {
  42. public void onMessage(Message message) {
  43. TextMessage msg = (TextMessage) message;
  44. try {
  45. System.out.println("2======"+msg.getText());
  46. } catch (JMSException e) {
  47. // TODO Auto-generated catch block
  48. e.printStackTrace();
  49. }
  50.  
  51. try {
  52. session.commit();
  53. } catch (JMSException e) {
  54. // TODO Auto-generated catch block
  55. e.printStackTrace();
  56. }
  57.  
  58. try {
  59. session.close();
  60. } catch (JMSException e) {
  61. // TODO Auto-generated catch block
  62. e.printStackTrace();
  63. }
  64.  
  65. try {
  66. connection.close();
  67. } catch (JMSException e) {
  68. // TODO Auto-generated catch block
  69. e.printStackTrace();
  70. }
  71.  
  72. }
  73. });
  74.  
  75. } catch (JMSException e) {
  76. e.printStackTrace();
  77. }
  78.  
  79. }
  80.  
  81. }

“丢失”的消息

broker1和broker2通过networkConnector连接,一些consumers连接到broker2,消费broker1上的消息。消息先被broker2从broker1上消费掉,然后转发给这些consumers。不幸的是转发部分消息的时候broker2重启了,这些consumers发现broker2连接失败,通过failover连接到broker1上去了,但是有一部分他们还没有消费的消息被broker1已经分发到了broker2上去了。这些消息,就好像是消失了。

broker1 中my-queue4 接收到20条消息。

broker1通过静态网络与broker2连接,与broker2相连的消费者消费后,broker1中Number of Pending Messages为0,即消息先被broker2从broker1上消费掉。

一些consumers连接到broker1,没法从broker1获取消息消费。

针对“丢失”的消息,配置replayWhenNoConsumers选项

这个选项使得broker1上有需要转发的消息但是没有消费者时,把消息回流到它原始的broker。同时把enableAudit设置为false,为了防止消息回流后被当做重复消息而不被分发。

  1. <policyEntries>
  2. <policyEntry queue=">" enableAudit="false">
  3. <networkBridgeFilterFactory>
  4. <conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/>
  5. </networkBridgeFilterFactory>
  6. </policyEntry>
  7. </policyEntries>

容错的链接--Failover

Failover协议实现了自动重新链接的逻辑。默认情况下,这种协议用于随机的去选择一个链接去链接,如果链接失败了,那么会链接到其他
的Broker上。默认的配置定义了延迟重新链接,意味着传输将会在10秒后自动的去重新链接可用的broker。当然所有的重新链接参数都可以根据应用的需要而配置。

  1. ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("failover:(tcp://192.168.174.104:61616,tcp://192.168.174.104:61676)?randomize=false");
  1. randomize:使用随机链接,以达到负载均衡的目的,默认true

ActiveMQ的静态网络配置的更多相关文章

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

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

  2. ActiveMQ 集群配置 高可用

    自从activemq5.9.0开始,activemq的集群实现方式取消了传统的Pure Master Slave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数 ...

  3. ActiveMQ Cluster (ActiveMQ 集群) 配置

    构建高可用的ActiveMQ系统在生产环境中是非常重要的,对于这个apache的消息中间件实现高可用非常简单,只要在Apache ActiveMQ单点基本配置基础上做一次配置变更(如果在一台设备上部署 ...

  4. centos7静态网络配置

    centos7静态网络配置 cd /etc/sysconfig/network-scripts 找到当前网卡名字 vim ifcfg-ens33 TYPE="Ethernet" # ...

  5. spring+activemq实战之配置监听多队列实现不同队列消息消费

    摘选:https://my.oschina.net/u/3613230/blog/1457227 摘要: 最近在项目开发中,需要用到activemq,用的时候,发现在同一个项目中point-to-po ...

  6. linux下activemq安装与配置activemq-5.15.2

    linux下activemq安装与配置 前提 配置好jdk环境   一.下载:apache-activemq-5.15.2-bin.tar.gz https://archive.apache.org/ ...

  7. ActiveMQ的静态网络链接

    -------------------------------------------------------------------- (1)ActiveMQ的networkConnector是什么 ...

  8. ActiveMQ (二) 常用配置简介

    ActiveMQ的主要配置文件 ActiveMQ的一些常用的属性很多可以在对应的配置文件中进行配置的.比如访问web console的管理端的端口,用户名密码,连接MQ时的用户名和密码,持久化设置,是 ...

  9. linux下activemq安装与配置

    一.下载:apache-activemq-5.14.0-bin.tar.gz http://activemq.apache.org/activemq-5140-release.html   二.安装a ...

随机推荐

  1. Flask上下文源码分析(二)

    前面第一篇主要记录了Flask框架,从http请求发起,到返回响应,发生在server和app直接的过程. 里面有说到,Flask框架有设计了两种上下文,即应用上下文和请求上下文 官方文档里是说先理解 ...

  2. leetcode 108. Convert Sorted Array to Binary Search Tree 、109. Convert Sorted List to Binary Search Tree

    108. Convert Sorted Array to Binary Search Tree 这个题使用二分查找,主要要注意边界条件. 如果left > right,就返回NULL.每次更新的 ...

  3. Angular 中的 dom 操作(ViewChild)以及父子组件中通过 ViewChild 调用子组件的方法

    <app-header #header></app-header> <div #myBox> 我是一个dom节点 </div> <button ( ...

  4. LinearGradient线型渐变效果

    public LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, TileM ...

  5. StringBuider类

    特点: 线程不安全的可变字符序列 ; 线程不安全对应的效率高 ; 用法同StringBuffer一致

  6. 【转载】 一文看懂深度学习新王者「AutoML」:是什么、怎么用、未来如何发展?

    原文地址: http://www.sohu.com/a/249973402_610300 原作:George Seif 夏乙 安妮 编译整理 ============================= ...

  7. ISO/IEC 9899:2011 条款5——5.2.2 字符显示语义

    5.2.2 字符显示语义 1.活动位置是在一个显示设备上的位置,由fputc函数所输出的下一个字符会出现在那个位置上.写一个打印字符(由isprint函数)到显示设备的意图是为了在活动位置上显示那字符 ...

  8. java 获取String中的数字

    随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取出来呢?大致有以下几种方法, ...

  9. https://www.cnblogs.com/

    Linux如何查看端口 1.lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000 # lsof -i:8000 COMMAND PID USER ...

  10. Qt编写自定义控件57-直方波形图

    一.前言 直方波形图控件非原创控件,控件大全中大概有20-30个控件非自己原创,而是参考了网上开源的代码,自己加以整理和完善,新增了插件的代码使得可以直接集成到QtDesigner或者QtCreato ...