--------------------------------------------------------------------

(1)ActiveMQ的networkConnector是什么

  在某些情况下,需要多个ActiveMQ的Broker做集群,那么就涉及到Broker到Broker的通信,这个就称为ActiveMQ的networkConnector.

  ActiveMQ的networkConnector默认是单向的,一个Broker在一端发送消息,另一个Broker在另一端接收消息,这就是所谓的"桥接"。ActiveMQ也支持双向链接,创建一个双向的通道对于两个Broker不仅发送消息而且也能从相同的通道接收消息,通常作为duplex connector来映射,如下:

(2)有两种配置Client到Broker的链接方式

  第一种: Client通过Staticlly配置的方式去连接Broker(静态链接)

  第二种:  Client通过discover agent来dynamically的发现Brokers(动态链接)

Static networks:

  Static networkConnector是用于创建一个静态的配置对于网络中的多个Broker,这种协议用于复合url,一个复合url包括多个url地址,格式如下:

  static:(uri1,uri2,uri3, ...)?key=value

 <networkConnectors>
<networkConnector name="local network" uri="static://(tcp://ip:prot,tcp://ip:port)"/>
</networkConnectors>

  在activemq.xml配置如下:

 下面启动两个Broker实例,一个端口:61616,另一个端口:61716,然后通过程序往61616端口的Broker发送数据,再从61716端口的Broker接收数据

JmsSend程序如下:

 import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class JmsSend {
public static void main(String[] args) throws Exception {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.1.81:61616");
Connection connection = connectionFactory.createConnection();
connection.start(); Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("my-queue"); MessageProducer producer = session.createProducer(destination);
for(int i = 0;i < 10;i++){
TextMessage message = session.createTextMessage("message,1212 --->" + i);
Thread.sleep(1000);
//通过生产者发出消息
producer.send(message);
}
session.commit();
session.close();
connection.close();
}
}

JmsReceiver程序如下:

 import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class JmsReceiver {
public static void main(String[] args) throws Exception {
ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://192.168.1.81:61716");
Connection connection = cf.createConnection();
connection.start(); Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("my-queue");
MessageConsumer consumer = session.createConsumer(destination);
int i = 0;
while(i < 10){
i++;
TextMessage message = (TextMessage)consumer.receive();
session.commit();
System.out.println("接收到的消息是:"+message.getText());
}
session.close();
connection.close();
}
}

运行结果:

(3)networkConnector配置的可用属性

  1.name: 默认的bridge
  2.dynamicOnly: 默认是false,如果为true,持久订阅被激活时才创建对应的网络持久订阅。默认是启动时激活
  3.decreaseNetworkConsumerPriority: 默认是false。设定消费者优先权,如果为true,网络的消费者优先级降低为-5。如果为false,则默认跟本地消费者一样为0
  4.networkTTL: 默认是1,网络中用于消息和订阅消费的broker数量
  5.messageTTL: 默认是1,网络中用于消息的broker数量
  6.consumerTTL: 默认是1,网络中用于消费的broker数量
  7.conduitSubscriptions: 默认true,是否把同一个broker的多个consumer当做一个来处理(在做集群的时候如果有多个consumer,需要设置为false)
  8.dynamicallyIncludedDestinations:默认为空,要包括的动态消息地址,类适于excludedDestinations,如:

 <dynamicallyIncludedDestinations>
<queue physicalName="include.test.foo"/>
<topic physicalName="include.test.bar"/>
</dynamicallyIncludedDestinations>    

  9.staticallyIncludedDestinations:默认为空,要包括的静态消息地址。类似于excludedDestinations,如:

 <staticallyIncludedDestinations>
<queue physicalName="always.include.queue"/>
</staticallyIncludedDestinations>

  10.excludedDestinations: 默认为空,指定排除的地址,示例如下:

 <networkConnectors>
  <networkConnector uri="static://(tcp://localhost:61617)" name="bridge" dynamicOnly="false" conduitSubscriptions="true" decreaseNetworkConsumerPriority="false">
  <excludedDestinations>
    <queue physicalName="exclude.test.foo">
    <topic physicalName="exclude.test.bar">
  </excludedDestinations>
  <dynamicallyIncludedDestinations>
    <queue physicalName="include.test.foo"/>
    <topic physicalName="include.test.bar"/>
  </dynamicallyIncludedDestinations>
  <staticallyIncludedDestinations>
    <queue physicalName="always.include.queue"/>
  </staticallyIncludedDestinations>
  </networkConnector>
</networkConnectors>

  12. prefetchSize: 默认是1000,持有的未确认的最大消息数量,必须大于0,因为网络消费者不能自己轮询消息
  13. suppressDuplicateQueueSubscriptions: 默认false,如果为true,重复的订阅关系一产生即被阻止
  14. bridgeTempDestinations: 默认true,是否广播advisory messages来创建临时的destination
  15. alwaysSyncSend: 默认false,如果为true,非持久化消息也将使用request/reply方式代替oneway方式发送到远程broker
  16. staticBridge: 默认false,如果为true,只有staticallyIncludedDestinations中配置的destination可以被处理

最新文章

  1. 解决Firefox/Opera 不支持onselectstart事件实现不允许用户select
  2. linux实践之程序破解
  3. HTML5基本特性和新功能
  4. 自定义UIDatePikerView
  5. Java生成和操作Excel文件
  6. (十) 一起学 Unix 环境高级编程 (APUE) 之 线程控制
  7. PHP5各个版本的新功能和新特性总结(转载 http://www.jb51.net/article/48150.htm)
  8. [Arduino] Leonardo 中文介绍
  9. tornado解析http body的过程分析
  10. Altium Designer PCB 常用功能键
  11. Android 控件布局常用属性
  12. Clonezilla SE---克隆linux------转载
  13. img的属性alt 与 title的区别
  14. JSP 内置对象(上)
  15. 一步一步安装SQL Server 2017
  16. 使用npm安装webpack失败时,可能被墙要为cmd命令行设置代理
  17. LINQ之路16:LINQ Operators之集合运算符、Zip操作符、转换方法、生成器方法
  18. dml语句和ddl语句 区别
  19. 如何让一个div水平和垂直居中对齐
  20. Java HttpClient PostMethod

热门文章

  1. java http工具类和HttpUrlConnection上传文件分析
  2. Vim插件管理
  3. NYOJ 734
  4. java 移位运算符
  5. Excel到底最多可以有多少行
  6. 微信小程序之使用weui.wxss(八)
  7. 关于javascript中apply()和call()方法的区别
  8. angularjs + fis +modJS 对于支持amd规范的组建处理(PhotoSwipe 支持,百度webUpload支持)
  9. JS/CSS缓存杀手——VS插件
  10. [转]Java线程安全总结