深入浅出 JMS(三) - ActiveMQ 消息传输
深入浅出 JMS(三) - ActiveMQ 消息传输
一、消息协商器(Message Broker)
broke:消息的交换器,就是对消息进行管理的容器。ActiveMQ 可以创建多个 Broker,客户端与 ActiveMQ 交互,实际上都是与 ActiveMQ 中的 Broker 交互,Broker 配置在 ${MQ_HOME}/conf/activemq.xml。
二、连接器(Connectors)
(一)传输连接器(transportConnectors)
transportConnectors 连接器:就是建立broker与消息生产者、消息消费者之间的交互。
传输连接器常用的协议:
在 ActiveMQ 中常用的连接协议:tcp、udp、nio、ssl、http、https、vm。如果使用 ssl 协议需要配置证书,使用 http 或者 https 需要使用httpclient 来发送接收消息。
(1)TCP 默认的协议
-
使用 TCP 协议的好处:
- 高效的:该协议连接使用了 OpenWire 协议,通过把消息转换成字节流,性能非常好
- 可用性:TCP 是使用非常广泛的网络协议,基本上所有的平台都支持
-
TCP 连接的 URI 形式:tcp://hostname:port?key=value&key=value,后面的参数选填
-
TCP 配置示例 conf/activemq.xml:
<transportConnectors> <!--activemq 的默认连接 tcp--> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/> </transportConnectors>
(2)NIO
-
NIO 协议和 TCP 协议类似,但 NIO 更侧重于底层的访问操作。它允许开发人员对同一资源可有更多的 client 调用和服务端有更多的负载。
-
适合使用 NIO 协议的场景:
- 可能有大量的 Client 去链接到 Broker 上。一般情况下,大量的 Client 去连接 Broker 是被操作系统的线程数所限制的。因此, NIO 的实现比 TCP 需要更少的线程去运行,所以建议使用 NIO 协议。
- 可能对于 Broker 有一个很迟钝的网络传输。NIO 比 TCP 提供更好的性能。
-
NIO 连接的 URI 形式:nio://hostname:port?key=value,后面的参数选填。
-
NIO 配置实例 conf/activemq.xml:
<transportConnectors> <!-- 设置一个NIO的连接--> <transportConnector name="nio" uri="nio://0.0.0.0:61617"/> </transportConnectors>
(3)UDP
-
UDP 和 TCP 的区别
- TCP 是一个原始流的传递协议,意味着数据包是有保证的,换句话说,数据包是不会被复制和丢失的。UDP,它是不会保证数据包的传递的可靠性。
- TCP 是被用在稳定可靠的场景中使用的;UDP 通常用在快速数据传递和不怕数据丢失的场景中,还有 ActiveMQ 通过防火墙时,只能用 UDP。
-
UDP 连接的 URI 形式:udp://hostname:port?key=value
-
配置实例 conf/activemq.xml:
<transportConnectors> <transportConnector name="udp" uri="udp://localhost:61618"/> </transportConnectors>
(4)、SSL
底层是 TCP 协议,但是对传输数据进行了加密。
-
适用场景:MQ 暴露在外网,要求客户端与 broker 之间通讯
-
SSL 的连接的 URI 形式:ssl://hostname:port?key=value
-
配置实例 conf/activemq.xml:
<transportConnectors> <transportConnector name="ssl" uri="ssl://localhost:61619"/> </transportConnectors>
使用步骤:
-
创建 SSL 协议:
-
配置 Broker SSL 协议 conf/activemq.xml:
<sslContext> <sslContext keyStore="F:/beifeng/apache-activemq-5.6.0/conf/mybroker.ks" keyStorePassword="test123" /> </sslContext>
-
配置客户端 SSL 协议:
(5)HTTP、HTTPS
-
通过 jetty 容器来接收 http 协议的 mq 消息。
-
用于只允许基本 HTTP 服务通过的网络环境。
-
通过 httpclient 来发送/接收消息,需要添加额外的 java 包 Httpclient、Xstream、activemq-optional。
-
HTTP、HTTPS 的连接的 URI 形式:URI:http://hostname:port?key=value。
-
配置实例conf/activemq.xml:
<transportConnectors> <transportConnector name="http" uri="http://localhost:8080"/> </transportConnectors>
配置 HTTPS 则需要在 jetty.xml 中配置相关证书 HTTPS=HTTP + SSL
(二)网络连接器(NetWorkConnectors)
NetWorkConnectors:用于 Broke 与 Broke 之间的交互 ,主要是 ActiveMq 集群部署时。
每天用心记录一点点。内容也许不重要,但习惯很重要!