- 这篇笔记,主要是基于尚硅谷的ActiveMQ课程,以及这位大佬的笔记。
- 本人初学,在一边学的基础上,一边加上自己的理解写一些笔记,如果有写得不好的地方,请多担待。
1. 简述
- ActiveMQ支持的client-broker通讯协议有:TVP、NIO、UDP、SSL、Http(s)、VM。其中配置Transport Connector的文件在ActiveMQ安装目录的conf/activemq.xml中的
<transportConnectors>
标签之内。vim conf/activemq.xml
- activemq传输协议的官方文档:http://activemq.apache.org/configuring-version-5-transports.html
- 不同的协议会影响传输的效率,一般使用TCP协议,但这是最入门的配置,为了提升效率,还可以选择其他协议。
2. 支持的传输协议
- 对于Java应用来说,一般会使用TCP或者NIO这两种协议。其他协议,如果要使用,代码还不一样,需要修改。
2.1 TCP协议
- Transmission Control Protocol(TCP)是默认的。TCP的Client监听端口61616
- 在网络传输数据前,必须要先序列化数据,消息是通过一个叫wire protocol的来序列化成字节流。
- TCP连接的URI形式如:
tcp://HostName:port?key=value&key=value
,后面的参数是可选的。 - TCP传输的的优点:
- TCP协议传输可靠性高,稳定性强
- 高效率:字节流方式传递,效率很高
- 有效性、可用性:应用广泛,支持任何平台
- 关于Transport协议的可选配置参数可以参考官网 http://activemq.apache.org/tcp-transport-reference
2.2 NIO协议
- New I/O API Protocol(NIO)
- NIO协议和TCP协议类似,但NIO更侧重于底层的访问操作。它允许开发人员对同一资源可有更多的client调用和服务器端有更多的负载。
- 适合使用NIO协议的场景:
- 可能有大量的Client去连接到Broker上,一般情况下,大量的Client去连接Broker是被操作系统的线程所限制的。因此,NIO的实现比TCP需要更少的线程去运行,所以建议使用NIO协议。
- 可能对于Broker有一个很迟钝的网络传输,NIO比TCP提供更好的性能。
- NIO连接的URI形式:
nio://hostname:port?key=value&key=value
- 关于Transport协议的可选配置参数可以参考官网http://activemq.apache.org/configuring-version-5-transports.html
3 NIO协议案例
- 默认配置文件自带的五种协议,都是用BIO作为底层的IO模型。
- 而该案例,就是将使用BIO的TCP协议修改成,使用NIO的TCP协议。
3.1 修改配置文件
vim conf/activemq.xml
- 找到
<transportConnectors>
节点,并在节点下添加这一句话<transportConnector name="nio" uri="nio://0.0.0.0:61618?trace=true" />
- 重启activemq服务器。重启之后,可能还不行,那就检查一下是否开启了61618端口,或者是否关闭整个防火墙。或者试一下整台机子重启一下。
- 成功之后,可以在控制页面看到这样的效果。多了一个nio的connection
- 至此,说明nio已经可以使用了
- 那就将之前的ip及端口号修改一下,修改成这样
nio://192.168.233.134:61618
(示例),然后测试,发现能够正常工作,说明就成功了。
4. NIO协议案例增强
- 上面是Openwire协议传输底层使用NIO网络IO模型。 如何让其他协议传输底层也使用NIO网络IO模型呢?
- 那就需要配置一个自动匹配所有协议的端口。
- 再次修改配置文件。在配置文件中增加一句话。
<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61608?maximumConnections=1000&wireFormat.maxFrameSize=104857600&org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&org.apache.activemq.transport.nio.Se1ectorManager.maximumPoo1Size=50"/>
。 - 然后重启,可以看到下面这一句话。表示配置成功
- 然后测试一下,tcp协议和nio协议,都使用61608端口。
tcp://192.168.233.134:61608
、nioi://192.168.233.134:61608
,如果都能跑通,说明就成功了。