zoukankan      html  css  js  c++  java
  • ActiveMQ的传输协议

    ActiveMQ的传输协议

    在ActiveMQ的安装路径conf/activemp.xml的<transportConnectors>标签之中有如下配置,它们代表ActiveMQ默认支持的一些传输协议

    <transportConnectors>
    <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    </transportConnectors>


    而我们今天只关注两种传输协议,也就是用到最多的两种,TCP和NIO
    默认采用的就是BIO+TCP的模式,我们可以修改配置使用以TCP协议为基础的NIO网络IO模型:

    TCP传输的优点:

    1. TCP协议传输可靠性高,稳定性强
    2. 高效性:字节流方式传递,效率很高
    3. 有效性、可用性:应用广泛,支持任何平台

    NIO和BIO的区别和使用场景

    BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
    NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

    (1)NIO适合处理连接数目特别多,但是连接比较短(轻操作)的场景,Jetty,Mina,ZooKeeper等都是基于java nio实现。
    (2)BIO方式适用于连接数目比较小且固定的场景,这种方式对服务器资源要求比较高,并发局限于应用中

    修改网络模型

    在conf/activemp.xml的<transportConnectors>标签中添加如下节点

    <transportConnector name="nio" uri="nio://0.0.0.0:61616"/>

    并把之前name属性为"poenwire"的节点给注释掉,同时要将生产者和消费者的服务器地址修改,
    配置语法如下

    nio://hostname:port?key=value

    这样的话就会使用TCP加上NIO传输模型进行传输

    性能优化(采用Auto+NIO传输模式)

    从5.13.0版本开始,ActiveMQ支持wire format协议检测,可以自动检测OpenWire,STOMP,AMQP和MQTT,允许为这4种类型的客户端共享一个传输。要通过NIO TCP连接配置ActiveMQ自动wire format检测,使用  auto+nio传输前缀。

    在conf/activemp.xml的<transportConnectors>标签中添加如下节点,并将之前的其他选项给注释掉,除了之前配置的nio,其他的也可以保留

    <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.SelectorManager.maximumPoolSize=50" />


    更改 activemq.xml配置文件,在<transportConnectors>标签中添加,这里额外设置NIO使用的线程池核心工作线程数和最大工作线程数

    protocolDetectionTimeOut    默认值为30000 连接超时前的时间(以毫秒为单位)。如果客户端建立连接但没有为要检测的协议发送数据或足够的数据,则线程将等待更多数据通过套接字进入。如果代理在一段时间后未完成协议初始化,则会让代理终止连接。默认值为30秒。将默认值设置为<= 0以禁用此功能。
    maxConnectionThreadPoolSize 默认值为MAX_INT 此选项允许配置处理连接尝试的线程池的最大大小。如果有许多不同的客户端同时尝试连接,则降低此数字可以帮助防止代理程序耗尽线程。默认情况下,它通过设置为MAX_INT来关闭

    配置完启动服务,ActiveMQ-admin中的Connnections中如下所示代表配置成功

     如果需要进行测试,需要修改服务器的地址  

    nio://服务器地址:61608
  • 相关阅读:
    计算机网络复习(二) 应用层
    JavaScript实战笔记(二) 数组去重
    计算机网络复习(一) 基本介绍
    计算机网络复习
    Git学习笔记(一) 常用命令
    Git学习笔记
    Python实战笔记(三) 多线程
    Python实战笔记(二) 网络编程
    Python学习笔记
    XBox360自制系统的更新(Update)
  • 原文地址:https://www.cnblogs.com/yjc1605961523/p/11993542.html
Copyright © 2011-2022 走看看