我是靠谱客的博主 隐形毛衣,最近开发中收集的这篇文章主要介绍ActiveMQ的传输协议一、面试题二、官网三、简介 四、详解五、NIO协议案例  六、NIO协议案例增强,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、面试题

二、官网

三、简介 

四、详解

五、NIO协议案例 

 六、NIO协议案例增强


一、面试题

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协议

  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协议

 (四)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&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

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

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

 

 

最后

以上就是隐形毛衣为你收集整理的ActiveMQ的传输协议一、面试题二、官网三、简介 四、详解五、NIO协议案例  六、NIO协议案例增强的全部内容,希望文章能够帮你解决ActiveMQ的传输协议一、面试题二、官网三、简介 四、详解五、NIO协议案例  六、NIO协议案例增强所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部