JMS学习(ActiveMQ支持的传输协议)

ActiveMQ提供了一种连接机制,这种连接机制使用传输连接器(TransportConnector)实现客户端与代理(client - to - broker)之间的通信。

网络连接器(networkconnection)实现代理与代理之间的通信。(broker-to- broker);

一、TransportConnector支持的协议

ActiveMQ常用协议:

协议-描述-example

TCP-默认的协议性能相对来说还是可以的-tcp://host:port

NIO-基于TCP协议进行了扩展和优化,具有更好的扩展性-NIO://host:port

UDP-相比TCP性能更好,但是没有tcp可靠-udp://host:port

SSL-安全连接-ssl://host:port

Http(s)-基于http或https的链接-http://host:port

注意使用ssl时要证书Http(s)要导入httpclient相关jar包

具体demo见官网:http://activemq.apache.org/uri-protocols.html

这些传送协议都是在activemq.xml中配置的:

TCP: activemq.xml配置文件配置

<broker>  ...  <transportConnectors>  <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>  </<transportConnectors>  ...
</broker>  

TCP:客户端代码:

connectionFactory = new ActiveMQConnectionFactory("admin", "admin","tcp://127.0.0.1:61616");  

NIO:activemq.xml配置文件配置

<broker>  ...  <transportConnectors>  <transportConnector name="nio" uri="nio://0.0.0.0:61616"/>    </<transportConnectors>  ...
</broker>  

NIO:客户端代码:

connectionFactory = new ActiveMQConnectionFactory("admin", "admin","nio://127.0.0.1:61616");

其他的也都一样!!!

二、newworkConnector(网络连接器)支持的协议

协议 描述      example

Static         静态协议           static://(tcp://ip:port)

Multicast    多点传送协议    uri="multicast://default"

这里先看两种协议,但支持的协议不只这两种。

1、静态网络连接器

静态网络连接器用于为一个网络中多个代理创建静态配置.这种配置协议使用了一种复合的URI--即包含其他URI的URI.

静态协议是broker to broker的连接。

静态网络连接器activemq.xml配置文件配置:可以和多个代理进行通信,进行数据的拉取。

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

实例:

代理A的配置

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="BrokerA" dataDirectory="${activemq.data}">
<transportConnectors>      <transportConnector name="openwire" uri="tcp://127.0.0.1:61616" />
</transportConnectors>
</broker> 

代理B的配置

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="BrokerB" dataDirectory="${activemq.data}">      <transportConnectors>      <transportConnector name="openwire" uri="tcp://127.0.0.1:61617" />      </transportConnectors>      <networkConnectors>      <networkConnector uri="static:(tcp://127.0.0.1:61616)" />      </networkConnectors>
</broker>   

代理B中配置了和代理A的网络连接,这样配置后就能实现数据从B代理到A代理的流动,即使客户端将消息发送到了B代理,但消息消费端访问A代理也能获取并消费发送到B代理的消息,这是因为他们之间配了网络连接即networkConnection,当消费端来消费消息的时候,A代理从B代理哪里吧消息读取过来在给访问A代理的消费者。

2、动态网络连接器

这种动态技术可以实现让客户端和代理之间,代理和代理之间实现动态识别,而不是配置静态的IP组。

多点传送协议,代理会广播自己的服务,也会定位其他代理。同理客户端可以通过多点协议来接收广播,识别出代理。

多址传送协议的URI语法如下: 
multicast://ipadaddress:port?key=value

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="multicast" dataDirectory="${activemq.data}">      <networkConnectors>      <networkConnector name="default-nc" uri="multicast://default"/>      </networkConnectors>      <transportConnectors>      <transportConnector name="openwire" uri="tcp://127.0.0.1:61616" discoveryUri="multicast://default"/>      </transportConnectors>
</broker>    

在上面的例子中,使用群组名称"default"来替代具体的IP地址.上面的配置代码片段中有两个地方比较重要.首先,transport connector的discoveryUri属性用于暴露这个传输连接器的URI到名称为default的群组中.所有的希望查找可用代理的客户端都可以使用这个代理。

network connector的uri属性用于查找可用的代理并与之建立代理网络.这样配置后,代理就像客户端一样,使用多点传送协议来查找其他代理。 
移除discoveryUri属性,客户端就无法通过多点协议扫描到代理。

用多点传送协议的一个缺点是侦测是自动的.如果你不想把某个代理添加到群组中,你必须十分小心的设置。

客户端的自动侦测,通信语法是 
discovery:(discoveryAgentURI)?key=value
如connectionFactory = new ActiveMQConnectionFactory("admin", "admin","discovery:(multicast://default)");
将会自动侦测组名为default的代理。 
上面的配置 <transportConnectorname="openwire" uri="tcp://localhost:61616"discoveryUri="multicast://default"/>代理将会被侦测到。

三、Failover(失效重连协议)

failover:(uri1,...,uriN)?key=value 
或者failover:uri1,...,uriN,如 
failover:(tcp://primary:61616,tcp://secondary:61616)?randomize=false 
详细查看http://activemq.apache.org/failover-transport-reference.html 
默认情况是先随机选择一个连接器,如果该连接器无效,那么会选择下一个。 
失效转移连接器URI:是在客户端方面的协议,客户端在链接代理时需要保证链接的可用和可靠。实际上就算客户端只会连接一个代理,也应该使用failover配置通信协议,保证网络中断等问题时会自动重连。

失效重连协议是客户端方面的额协议,所以activemq.xml配置文件中就不用配置什么了……

实例:

connectionFactory = new ActiveMQConnectionFactory("admin", "admin","failover:(tcp://127.0.0.1:61616,tcp://127.0.0.1:61617)?randomize=false&priorityBackup=true");  

首先连接61616 如果连接失败则连接61617

设置连接优先级:

failover:(tcp://local1:61616,tcp://local2:61616,tcp://remote:61616)?randomize=false&priorityBackup=true&priorityURIs=tcp://local1:61616,tcp://local2:61616  

其他配置见管网.

总结:

1、传输连接器:主要是用户客户端到消息服务端的连接,在activemq的传输连接器<TransportConnector> 中配置,同时客户端ConnectionFactory中也配置同样的协议!

2、网络连接器:主要是代理和代理之间通信的,通信的目的就是数据的拉取!

3、失效重连协议:这个协议是客户端的协议,在创建ConnectionFactory 对象的时候可以指定多个JMS服务,并且可以指定优先级,这样就会按照优先级进行连接,如果优先级最高的能连上则连接他如果优先级最高的机器连接不上则连接连接优先级次高的以此类推。

JMS学习十 ActiveMQ支持的传输协议相关推荐

  1. ActiveMQ支持的传输协议

    连接到ActiveMQ Connector:ActiveMQ提供的,用来实现连接通信的功能.包括:client-to-broker.broker-to-broker.ActiveMQ允许客户端使用多种 ...

  2. JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系...

    一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent deliver ...

  3. JMS学习(2):ActiveMQ简单介绍以及安装

    现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JM ...

  4. 消息中间件ActiveMQ 4: 传输协议

    文章目录 ActiveMQ的传输协议 1. Transmiss Control Protocol(TCP)默认 2.New I/O API Protocol (更好的性能) 3.由于主要是Java开发 ...

  5. CSR867x学习笔记:低音炮音频传输协议(SWAT)

    为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[淘宝链接:思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入 ...

  6. Linux音视频学习--常见的音视频传输协议及基本概念介绍

    一.引言 二.流媒体格式与介绍 ------> 1.相关格式 ------------> 1.1.视频流编码格式 ------------> 1.2.音频流编码格式 ------&g ...

  7. JMS学习(3):--ActiveMQ简单的HelloWorld实例

    第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...

  8. JMS学习九 ActiveMQ的消息持久化到Mysql数据库

    1.将连接Mysql数据库驱动包,放到ActiveMQ的lib目录下 2,修改ActiveMQ的conf目录下的active.xml文件,修改数据持久化的方式 2.1  修改原来的kshadb的持久化 ...

  9. JMS学习十一 ActiveMQ Consumer高级特性之独有消费者(Exclusive Consumer)

    一.简介 Queue中的消息是按照顺序被分发到consumers的.然而,当你有多个consumers同时从相同的queue中提取消息时, 你将失去这个保证.因为这些消息是被多个线程并发的处理.有的时 ...

最新文章

  1. 报班学python到底怎么样-你们都是怎么学 Python 的?
  2. 在程序中进行make以后出现的一些错误以及解决方法
  3. .net你不行——是你的父亲把你封装的太死,还是你的子孙们太懒,未把你发扬光大。...
  4. wprintf显示中文
  5. 任务二 用户注册界面设计
  6. The server sent a disconnect packet.Received ieof for nonexistent channel 0. (code: 2)
  7. Linux 安装 OpenOffice
  8. 2017年9月27日日志
  9. 数字社交圈里的白酒“新”消费——腾讯2021白酒行业数字营销洞察白皮书
  10. centos linux下vnc server远程桌面配置详解,CentOS 6.0 VNC远程桌面配置
  11. 最近的任务安排得很混乱
  12. python表单_python-基于添加表单的Django编辑表单?
  13. python单词的含义-python实现单词本功能
  14. 树莓派3B 开启串口
  15. Flixel Dame 坦克大战(三)完成基本逻辑
  16. blender动作_Blender实现小人行走
  17. 第二篇第五章防火防烟分区于分隔
  18. IPv6地址自动配置
  19. 计算机上怎样保护c盘,6个方法教你释放你的C盘空间
  20. LeetCode 到底怎么刷?GitHub 上多位大厂程序员亲测的高效刷题方式

热门文章

  1. kafka是存储到本地磁盘么_Kafka 中的消息存储在磁盘上的目录布局是怎样的?
  2. 【OpenCV 例程200篇】13. 图像的加法运算(cv2.add)
  3. paramiko执行nohup_记一次使用django+paramiko远程操作时报错无法返回问题
  4. 两数之和-给定一个整数数组nums和一个目标值target,请你在该数组找出和为目标值的那两个整数,并返回他们的数组下标,你可以假设每种输入只会对应一个答案。但是,数组同一个元素不能使-python
  5. maven运行tomcat6出现错误Exception starting filter encodingFilter怎么解决
  6. .NET的轻量级IOC框架芮双随笔
  7. phpcms文件所需权限
  8. Silverlight 出现“无法加载 URI 的内容。URI 可能无效”错误的解决方案
  9. Windows服务无法引用.dll的错误
  10. 生成指定大小的空文件