ActiveMQ 传输协议

  • 这篇笔记,主要是基于尚硅谷的ActiveMQ课程,以及这位大佬的笔记
  • 本人初学,在一边学的基础上,一边加上自己的理解写一些笔记,如果有写得不好的地方,请多担待。

1. 简述

  • ActiveMQ支持的client-broker通讯协议有:TVP、NIO、UDP、SSL、Http(s)、VM。其中配置Transport Connector的文件在ActiveMQ安装目录的conf/activemq.xml中的<transportConnectors>标签之内。
    vim conf/activemq.xml
    
    在这里插入图片描述
  • activemq传输协议的官方文档:http://activemq.apache.org/configuring-version-5-transports.html
  • 不同的协议会影响传输的效率,一般使用TCP协议,但这是最入门的配置,为了提升效率,还可以选择其他协议。

2. 支持的传输协议

在这里插入图片描述

  • 对于Java应用来说,一般会使用TCP或者NIO这两种协议。其他协议,如果要使用,代码还不一样,需要修改。

2.1 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

2.2 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

3 NIO协议案例

  • 默认配置文件自带的五种协议,都是用BIO作为底层的IO模型。
    在这里插入图片描述
  • 而该案例,就是将使用BIO的TCP协议修改成,使用NIO的TCP协议。

3.1 修改配置文件

vim conf/activemq.xml
  • 找到<transportConnectors>节点,并在节点下添加这一句话<transportConnector name="nio" uri="nio://0.0.0.0:61618?trace=true" />
    在这里插入图片描述
  • 重启activemq服务器。重启之后,可能还不行,那就检查一下是否开启了61618端口,或者是否关闭整个防火墙。或者试一下整台机子重启一下。
  • 成功之后,可以在控制页面看到这样的效果。多了一个nio的connection
    在这里插入图片描述
  • 至此,说明nio已经可以使用了
  • 那就将之前的ip及端口号修改一下,修改成这样nio://192.168.233.134:61618(示例),然后测试,发现能够正常工作,说明就成功了。

4. NIO协议案例增强

  • 上面是Openwire协议传输底层使用NIO网络IO模型。 如何让其他协议传输底层也使用NIO网络IO模型呢?
  • 那就需要配置一个自动匹配所有协议的端口。在这里插入图片描述
  • 再次修改配置文件。在配置文件中增加一句话。<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"/>
  • 然后重启,可以看到下面这一句话。表示配置成功
    在这里插入图片描述
  • 然后测试一下,tcp协议和nio协议,都使用61608端口。tcp://192.168.233.134:61608nioi://192.168.233.134:61608,如果都能跑通,说明就成功了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值