ActiveMQ教程(5)— 优化1:网络配置优化

标签: ActiveMQ 消息队列
18人阅读 评论(0) 收藏 举报
分类:

基本连接配置


在ActiveMQ的官方网站上,列出了目前ActiveMQ中支持的所有消息协议,它们是:AMQP、MQTT、OpenWire、REST、Stomp、XMPP;

不同的协议需要设置不同的网络监听端口,这个相关设置在ActiveMQ安装目录的/conf/activemq.xml主配置文件中。主配置文件采用XML格式进行描述,其中的transportConnectors标记描述了各种协议的网络监听端口,示例如下:

<transportConnectors>
    <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"/>
    <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>

以上配置了openwire协议的接入端口号为本机所有IP设备的61616(0.0.0.0代表本机所有IP设备);配置amqp协议的接入端口号为本机所有IP设备的5672;配置stomp协议的接入端口号为本机所有IP设备的61613,等等。这里注意以下几个事实:

  • 每一个transportConnector标记的 name 属性和 uri 属性都必须填写,name 属性的值可以随便填写,它将作为一个Connector元素,显示在ActiveMQ管理界面的Connections栏目中;
  • 每一个transportConnector标记的 uri 元素,都有固定写法:
    • uri 头是指定的协议名称,例如:amqp、mqtt、stomp等;
    • 然后是HOST/IP域名,指定端口监听所在的路由信息;
    • 接下来是端口信息,指定的端口不能重复,否则会产生冲突。
  • URI参数部分,每一种协议都有一些特定的参数,读者可参考ActiveMQ官网中,关于协议部分的介绍。但是有些参数却是各种协议都可共用的,例如以上实例中使用的maximumConnections属性,代表这个端口支持的最大连接数量;wireFormat.maxFrameSize属性代表支持协议的“一个完整消息”的最大数据量(单位为byte);您可以在ActiveMQ官网中对wire formats的参数描述中,找到这些默认属性。
  • URI参数部分,各协议可共用的参数还包括基本连接特性相关的参数。另外如果您使用的是TCP协议,您还可以在URI参数部分加入TCP相关的属性描述;如果您使用的是UDP协议,那么您还可以在URI参数部分加入UDP相关的属性描述
  • transportConnector标记中,除了必须填写的 name 属性和 uri 属性以外还有一些可选择的属性,例如:enableStatusMonitorupdateClusterClients。详细的属性介绍可参考官方文档 中 “Server side options”部分章节的介绍。

特别说明


在上文给出的配置信息中,您可以发现我们在描述各种消息协议时,URI描述信息的头部都是采用协议名称。例如,描述amqp协议的监听端口时,采用的URI描述格式为amqp://……;描述Stomp协议的监听端口时,采用的URI描述格式为stomp://……。唯独在进行openwire协议描述时,URI头却采用的tcp://…..。这是因为ActiveMQ中默认的消息协议就是openwire。

ActiveMQ完整支持AMQP协议。但是读者会发现ActiveMQ中并没有存在Exchange这样的结构。这是怎么回事呢?实际上在国际标准组织 (ISO) 和国际电工委员会 (IEC) 制定的AMQP Version 1.0 规范文档中,并没有说AMQP 消息必须经过Exchange规则才能够到达队列,也没有规定Exchange 必须要实现某种规则的路由。所以在支持AMQP协议时,是否需要有Exchange这样的路由处理规则,完全取决于AMQP的消息中间件软件厂商自己的决定。

网络配置优化


ActiveMQ在Version 5.13.0+ 版本后,将OpenWire, STOMP, AMQP, MQTT这四种主要协议的端口监听进行了合并,并使用auto关键字进行表示。也就是说,ActiveMQ将监听这一个端口的消息状态,并自动匹配合适的协议格式。配置如下:

<transportConnectors>
    <transportConnector name="auto" uri="auto://0.0.0.0:61617?maximumConnections=1000" />
</transportConnectors>

以上的URI配置信息中,可以使用所有通用的Connection Configuration、Wire Formats Configuring、Server side options和TCP Transport Configuration配置项。但是这种优化只是让ActiveMQ的连接管理变得简洁了,并没有提升单个节点的处理性能。

如果不特别指定ActiveMQ的网络监听端口,那么这些端口都将使用BIO网络IO模型。所以为了提高单节点的网络吞吐性能,我们需要明确指定Active的网络IO模型,如下所示:

<transportConnectors>  
    <transportConnector name="nio" uri="nio://0.0.0.0:61618?maximumConnections=1000"/>  
</transportConnectors> 

请注意,URI格式头以nio开头,表示这个端口使用以TCP协议为基础的NIO网络IO模型。但是这样的设置方式,只能使这个端口支持Openwire协议。那么我们怎么既让这个端口支持NIO网络IO模型,又让它支持多个协议呢?ActiveMQ的服务端设置,允许开发人员使用+符号来为端口设置多种特性,如下:

// 表示这个端口使用NIO模型支持Stomp协议
<transportConnector name="stomp+nio" uri="stomp+nio://0.0.0.0:61613?transport.transformer=jms"/>

// 表示这个端口支持amqp和ssl密文传输
<transportConnector name="amqp+ssl" uri="amqp+ssl://localhost:5671"/>

所以如果我们既需要某一个端口支持NIO网络IO模型,又需要它支持多个协议,那么可以进行如下的配置:

<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61608?maximumConnections=1000" />

另外,如果是为了生产环境进行的配置,那么至少应该还要配置这个端口支持的最大连接数量、设置每一条消息的最大传输值、设置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管理控制台中Connections页面显示的内容。注意ws协议的端口是额外保留的配置——因为auto模式中的协议不支持ws:
这里写图片描述

查看评论

程序员简历优化指南

-
  • 1970年01月01日 08:00

ActiveMQ安装优化

ActiveMQ性能测试http://m.blog.csdn.net/blog/brushli/417506151、下载ActiveMQ 官网:http://activemq.apache.org/...
  • catoop
  • catoop
  • 2016-01-05 15:14:25
  • 3778

ActiveMQ系列—ActiveMQ性能优化(中1)(处理规则和优化)

序:处理规则概述在ActiveMQ单个服务节点的优化中,除了对ActiveMQ单个服务节点的网络IO模型进行优化外,生产者发送消息的策略和消费者处理消息的策略也关乎整个消息队列系统是否能够高效工作。请...
  • u012758088
  • u012758088
  • 2017-09-20 18:00:39
  • 529

ActiveMQ性能优化

ActiveMq运行是比较稳定的,数据的吞吐速度也很高,如果出现入队列或者出队列慢的问题,先检查一下自己的代码,是不是本身取到数据后处理过慢。 本文的关于性能优化,其实是列举出一些需要注意的点,...
  • u010598327
  • u010598327
  • 2016-12-11 17:22:45
  • 1237

activemq性能优化

转自:http://www.tuicool.com/articles/MfMNzy ActiveMq运行是比较稳定的,数据的吞吐速度也很高,如果出现入队列或者出队列慢的问题,先检查一下自己的代码...
  • zhangyunpengchang
  • zhangyunpengchang
  • 2015-12-26 14:01:11
  • 772

activemq jms spring 发送调优

原先的配置 测试插入一万条数据,耗时290秒,然后测试添...
  • xiaxiaorui2003
  • xiaxiaorui2003
  • 2016-11-29 17:40:01
  • 522

ActiveMQ系列—ActiveMQ性能优化(上)(网络配置优化)

序:性能优化思路前面几篇文章中,主要介绍消息中间件ActiveMQ的安装和基本使用。从给出的安装配置和示例代码来看,我们既没有修改ActivieMQ服务节点的任何配置,也没有采用任何的集群方案。这种情...
  • u012758088
  • u012758088
  • 2017-09-20 08:32:55
  • 586

ActiveMQ系列—ActiveMQ性能优化(中2)(处理规则和优化)

4、消费者策略:Dispatch Async讨论完了消息生产者的关键性能点,我们再将目光转向消息消费者(接收者端);就像本小节开始时描述的那样,比起消息生产者来说消息消费者的性能更能影响ActiveM...
  • u012758088
  • u012758088
  • 2017-09-20 18:53:43
  • 392

activeMQ性能优化--对象池管理connection

activeMQ的某个应用场景,消费者和服务器只需建立一个长连接,而生产者的情况集中在服务器,需要对服务器端的生产者连接进行优化。 首先maven引入jar包依赖 [java] vie...
  • yzh_2017
  • yzh_2017
  • 2016-12-18 13:13:00
  • 1399

ActiveMQ5.5安全配置

ActiveMQ5.5安全配置分两种:控制台安全配置(即访问127.0.0.1:8161时用户认证)和JMS服务安全配置(程序访问ActiveMQ时的安全设置) 1.控制台安全配置 Act...
  • buyaore_wo
  • buyaore_wo
  • 2011-12-18 12:21:47
  • 1929
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 2万+
    积分: 2003
    排名: 2万+
    博客专栏
    文章存档
    最新评论