Java 消息中间件 - ActiveMQ之传输协议

一、是什么?

ActiveMQ支持的client-broker通讯协议有:TCP、NIO、UDP、SSL、Http(s)、VM。其中配置Transport Connector的文件在activeMQ安装目录的conf/activemq.xml中的< transportConnectors >标签之内。如图:
在这里插入图片描述
在上文给出的配置信息(activemq.xml)中,
URL描述信息的头部都是采用协议名称:例如,
描述amqp协议的监听端口时,采用的URL描述格式为“amqp://…”;
描述Stomp协议的监听端口时,采用的URL描述格式为“stomp://…”。
唯独在进行openwire协议描述时,URL头却采用的“tcp:…”。这是因为ActiveMQ中默认的消息协议就是openwire

二、有哪些?

1、Transmission Control Protocol(TCP)我是默认 (重点)

1)这是默认的Broker配置,TCP的Client监听端口是61616
2)在网络传输数据前,必须要序列化数据,消息是通过一个叫wire protocol的来序列化成字节流。
默认情况下ActiveMQ把wire protocol叫做OpenWire,它的目的是促使网络上的效率和数据快速交互。
3)TCP连接的URL形式如:tcp:hostname:port?key=value&key=value,后面的参数是可选
4)TCP传输的优点:

  • TCP协议传输可靠性高,稳定性强
  • 高效性:字节流方式传递,效率很高
  • 有效性、可用性:应用广泛,支持任何平台

5)关于Transport协议的可配置参数可以参考官网:http://activemq.apache.org/configuring-version-5-transports.html

2、New I/O API Protocol(NIO)(重点)

1:NIO协议和TCP协议类似,但NIO更侧重于底层的访问操作。它允许开发人员对同一资源可有更多的client调用和服务端有更多的负载。
2:适合使用NIO协议的场景:
(1)可能有大量的Client去链接到Broker上一般情况下,大量的Client去链接Broker是被操作系统的线程数所限制的。因此,NIO的实现比TCP需要更少的线程去运行,所以建议使用NIO协议
(2)可能对于Broker有一个很迟钝的网络传输NIO比TCP提供更好的性能
3:NIO连接的URI形式:nio://hostname:port?key=value
4:Transport Connector配置示例:

<transportConnectors>
  <transportConnector
    name="tcp"
    uri="tcp://localhost:61616?trace=true" />
  <transportConnector
    name="nio"
    uri="nio://localhost:61618?trace=true" />
</transportConnectors>

3、AMQP协议

即Advanced Message Queuing Protocaol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。

4、stomp协议

Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议。

5、Secure Sockets Layer Protocol (SSL)

1:连接的URI形式:ssl://hostname:port?key=value
2:Transport Connector配置示例:

<transportConnectors>
    <transportConnector name="ssl" uri="ssl://localhost:61617?trace=true"/>
</transportConnectors>

5、mqtt协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有物联网物品和外部连接起来。被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。

6、小总结

在这里插入图片描述

7、NIO协议

修改配置文件

<transportConnectors>
    <transportConnector name="nio" uri="nio://0.0.0.0:61616?trace=true"/>  
</<transportConnectors>

如果不特别指定ActiveMQ的网络监听端口,这些端口都将使用BIO网络IO模型,如OpenWire,STOMP,AMQP等,
所以为了提高单节点的网络吞吐量,我们需要明确指定Active的网络IO模型。
如图:
在这里插入图片描述

8、NIO增强

问题:URI 格式以 nio 开头,表示这个端口使用 tcp 协议为基础的NIO 网络 IO 模型,但这样设置让它只支持 tcp 、 nio 的连接协议。如何让它支持多种协议?

解决:使用 auto 关键字
auto 就像是一个网络协议的适配器,可以自动检测协议的类型,并作出匹配。使用"+"符号来为端口设置多种特性。

<transportConnector name="auto" uri="auto://localhost:5671?auto.protocols=default,stomp"/>

配置文件修改:

<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61608?maximumConnections=1000
&wireFormat.maxFrameSize=104857600&org.apache.activemq.transport.nio.SelectorManager.corelPoolSize=20
&org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize=50"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值