目录
一、面试题
1.默认的61616端口如何修改
与conf/activemq.xml中的配置文件的传输协议有关,可以通过修改配置文件该端口号
2.生产上的链接协议如何配置的?使用tcp吗?
隐含意思:是否使用过其他的传输协议:nio,amqp,stomp…
tcp只是入门级别的,nio比tcp性能更高
二、官网
上网站查看传输协议:http://activemq.apache.org/configuring-version-5-transports.html
三、简介
ActiveMQ支持的client-broker通讯协议有:TVP、NIO、UDP、SSL、Http(s)、VM。
其中配置Transport Connector的文件在ActiveMQ安装目录的conf/activemq.xml中的<transportConnectors>标签之内。
在上文给出的配置信息中,URI描述信息的头部都是采用协议名称:例如
描述amqp协议的监听端口时,采用的URI描述格式为“amqp://······”;
描述Stomp协议的监听端口时,采用URI描述格式为“stomp://······”;
唯独在进行openwire协议描述时,URI头却采用的“tcp://······”。这是因为ActiveMQ中默认的消息协议就是openwire
四、详解
除了tcp和nio协议,其他的了解就行。各种协议有各自擅长该协议的中间件,工作中一般不会使用activemq去实现这些协议。如: mqtt是物联网专用协议,采用的中间件一般是mosquito。ws是websocket的协议,是和前端对接常用的,一般在java代码中内嵌一个基站(中间件)。stomp好像是邮箱使用的协议的,各大邮箱公司都有基站(中间件)。
注意:协议不同,我们的代码都会不同。
(一)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
(二)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
(三)MAQP协议
(四)STMOP协议
(四)MQTT协议
五、NIO协议案例
ActiveMQ这些协议传输的底层默认都是使用BIO网络的IO模型。只有当我们指定使用nio才使用NIO的IO模型。
(一)修改activemq.xml并重启activemq
加上nio的transactionConnector
查看管理后台,可以看到页面多了nio
(二)生产者消费者代码修改
public static final String ACTIVEMQ_URL = "nio://193.179.123.10:61618"; public static final String QUEUE_NAME = "transport";
六、NIO协议案例增强
(一)问题
上面是Openwire协议传输底层使用NIO网络IO模型。 如何让其他协议传输底层也使用NIO网络IO模型,达到下图的第三个层次呢?
(二)解决
auto : 针对所有的协议,他会识别我们是什么协议。
nio :使用NIO网络IO模型
1.修改activemq.xml文件并重新启动服务
添加以下语句
<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"/>
2.查看前台可以发现多出了一个auto+nio
3.生产者消费者代码修改
public static final String ACTIVEMQ_URL = “nio://193.179.123.10:61608”;
public static final String QUEUE_NAME = “nio_auto”;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118470.html