ActiveMQ的传输协议

导读:本篇文章讲解 ActiveMQ的传输协议,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

一、面试题

二、官网

三、简介 

四、详解

五、NIO协议案例 

 六、NIO协议案例增强


一、面试题

1.默认的61616端口如何修改

与conf/activemq.xml中的配置文件的传输协议有关,可以通过修改配置文件该端口号

ActiveMQ的传输协议 

2.生产上的链接协议如何配置的?使用tcp吗?

隐含意思:是否使用过其他的传输协议:nio,amqp,stomp…

tcp只是入门级别的,nio比tcp性能更高

二、官网

上网站查看传输协议:http://activemq.apache.org/configuring-version-5-transports.html 

 ActiveMQ的传输协议

三、简介 

 ActiveMQ支持的client-broker通讯协议有:TVP、NIO、UDP、SSL、Http(s)、VM。

其中配置Transport Connector的文件在ActiveMQ安装目录的conf/activemq.xml中的<transportConnectors>标签之内。

ActiveMQ的传输协议

在上文给出的配置信息中,URI描述信息的头部都是采用协议名称:例如

描述amqp协议的监听端口时,采用的URI描述格式为“amqp://······”;

描述Stomp协议的监听端口时,采用URI描述格式为“stomp://······”;

唯独在进行openwire协议描述时,URI头却采用的“tcp://······”。这是因为ActiveMQ中默认的消息协议就是openwire

四、详解

除了tcp和nio协议,其他的了解就行。各种协议有各自擅长该协议的中间件,工作中一般不会使用activemq去实现这些协议。如: mqtt是物联网专用协议,采用的中间件一般是mosquito。ws是websocket的协议,是和前端对接常用的,一般在java代码中内嵌一个基站(中间件)。stomp好像是邮箱使用的协议的,各大邮箱公司都有基站(中间件)。

注意:协议不同,我们的代码都会不同。

(一)TCP协议

  1. Transmission Control Protocol(TCP)是默认的。TCP的Client监听端口61616
  2. 在网络传输数据前,必须要先序列化数据,消息是通过一个叫wire protocol的来序列化成字节流。
  3. TCP连接的URI形式如:tcp://HostName:port?key=value&key=value,后面的参数是可选的。
  4. TCP传输的的优点:

TCP协议传输可靠性高,稳定性强

  •                 高效率:字节流方式传递,效率很高
    •                 有效性、可用性:应用广泛,支持任何平台

关于Transport协议的可选配置参数可以参考官网http://activemq.apache.org/tcp-transport-reference

 

(二)NIO协议

  1. New I/O API Protocol(NIO)
  2. NIO协议和TCP协议类似,但NIO更侧重于底层的访问操作。它允许开发人员对同一资源可有更多的client调用和服务器端有更多的负载。
  3. 适合使用NIO协议的场景:

可能有大量的Client去连接到Broker上,一般情况下,大量的Client去连接Broker是被操作系统的线程所限制的。因此,NIO的实现比TCP需要更少的线程去运行,所以建议使用NIO协议。

可能对于Broker有一个很迟钝的网络传输,NIO比TCP提供更好的性能。

  1. NIO连接的URI形式:nio://hostname:port?key=value&key=value
  2. 关于Transport协议的可选配置参数可以参考官网

http://activemq.apache.org/configuring-version-5-transports.html

(三)MAQP协议

ActiveMQ的传输协议

 (四)STMOP协议

ActiveMQ的传输协议

  (四)MQTT协议

ActiveMQ的传输协议

五、NIO协议案例 

ActiveMQ这些协议传输的底层默认都是使用BIO网络的IO模型。只有当我们指定使用nio才使用NIO的IO模型。

(一)修改activemq.xml并重启activemq

加上nio的transactionConnector

ActiveMQ的传输协议

查看管理后台,可以看到页面多了nio

 ActiveMQ的传输协议

 

(二)生产者消费者代码修改

public static final String ACTIVEMQ_URL = "nio://193.179.123.10:61618";
public static final String QUEUE_NAME = "transport";

ActiveMQ的传输协议 

ActiveMQ的传输协议 

 六、NIO协议案例增强

(一)问题

上面是Openwire协议传输底层使用NIO网络IO模型。 如何让其他协议传输底层也使用NIO网络IO模型,达到下图的第三个层次呢

ActiveMQ的传输协议

(二)解决

ActiveMQ的传输协议 

auto : 针对所有的协议,他会识别我们是什么协议。

nio :使用NIO网络IO模型

1.修改activemq.xml文件并重新启动服务

添加以下语句

<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61608?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600&amp;org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&amp;org.apache.activemq.transport.nio.Se1ectorManager.maximumPoo1Size=50"/>

 2.查看前台可以发现多出了一个auto+nio

ActiveMQ的传输协议

 3.生产者消费者代码修改

    public static final String ACTIVEMQ_URL = “nio://193.179.123.10:61608”;
    public static final String QUEUE_NAME = “nio_auto”;

ActiveMQ的传输协议

ActiveMQ的传输协议 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118470.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!