消息中间件-ACTIVEMQ-7:ActiveMQ的传输协议(nio)

目录

1:ActiveMq的传输协议简介

2:ActiveMQ传输协议的种类

2.1、TCP传输(The TCP Transport)

2.2、NIO传输(The NIO Transport)

 3:NIO协议

1:编辑安装路径中的activemq.xml文件,新添加一个nio连接器。

2:将连接的url换成nio协议的 

4:NIO协议增强(autoNio)


1:ActiveMq的传输协议简介

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

其中配置Transport Connector(传输协议)的文件在ActiveMQ安装目录的conf/activemq.xml中的<transportConnectors>标签内

2:ActiveMQ传输协议的种类

2.1、TCP传输(The TCP Transport)

TCP传输允许客户端使用TCP套接字连接到远程ActiveMQ代理。这些配置选项可用于使用JMS客户端的连接URI字符串或在代理的传输连接器URI上调整客户端上的底层TCP传输。

  • TCP是默认的Broker配置,TCP的Client监听端口61616
  • 在网络传输数据前,必须要序列化数据,消息是通过一个叫wire protocol的来序列化成字节流。默认情况下,ActiveMQ把wire protocol叫做OpenWire,它的目的是促使网络上的效率和数据快速交互。
  • TCP传输的优点:
        TCP协议传输可靠性高,稳定性强
        高效性:字节流方式传递,效率很高
        有效性、可用性:应用广泛,支持任何平台
  • 关于Transport协议的可配置参数,可以参加官网:http://activemq.apache.org/configuring-version-5-transports.html

 

传输选择项

选项名称默认值描述
backlog5000指定传输服务器套接字等待接受的最大连接数。
closeAsynctrue如果true套接字关闭调用是异步发生的。此参数应设置false为STOMP等协议,这些协议通常用于为每次读取或写入创建新连接的情况。这样做可确保套接字关闭调用同步发生。同步关闭可防止代理由于连接的快速循环而耗尽可用套接字。 
connectionTimeout30000如果>=1该值设置连接超时(以毫秒为单位)。值为0表示没有超时。负值被忽略。
daemonfalse如果true传输线程将以守护进程模式运行。将此参数设置为true将代理嵌入Spring容器或Web容器中以允许容器正确关闭。
dynamicManagementfalse如果trueTransportLogger可以通过JMX进行管理。
ioBufferSize8 * 1024指定在TCP层和wireFormat基于编组的OpenWire层之间使用的缓冲区的大小。
jmxPort1099(仅限客户端)指定JMX服务器将用于管理的端口TransportLoggers。这应仅由客户端生产者或消费者通过URI设置,因为代理创建自己的JMX服务器。指定备用JMX端口对于在同一台计算机上测试代理和客户端并且需要通过JMX控制这两者的开发人员非常有用。
keepAlivefalse如果true在代理连接上启用TCP KeepAlive以防止连接在TCP级别超时。这应该与使用的KeepAliveInfo消息混淆InactivityMonitor
logWriterNamedefault设置org.apache.activemq.transport.LogWriter要使用的实现的名称。名称映射到resources/META-INF/services/org/apache/activemq/transport/logwriters目录中的类。
maximumConnectionsInteger.MAX_VALUE此代理允许的最大套接字数。
minmumWireFormatVersion0wireFormat将被接受的最小远程版本(请注意拼写错误)。注意:当远程wireFormat版本低于配置的最低可接受版本时,将引发异常并且将拒绝连接尝试。值0表示不检查远程wireFormat版本。
socketBufferSize64 * 1024设置接受的套接字读写缓冲区的大小(以字节为单位)。
soLingerInteger.MIN_VALUEsoLinger值为时设置套接字的选项> -1。当设置-1soLinger套接字选项被禁用。
soTimeout0设置套接字的读取超时(以毫秒为单位)。值为0表示没有超时。
soWriteTimeout0设置套接字的写入超时(以毫秒为单位)。如果套接字写操作未在指定的超时之前完成,则套接字将被关闭。值0表示没有超时。
stackSize0设置传输的后台读取线程的堆栈大小。必须以倍数指定128K。值为0表示忽略此参数。
startLoggingtrue如果传输堆栈trueTransportLogger对象最初将消息写入日志。除非,否则忽略此参数trace=true
tcpNoDelayfalse如果设置true了套接字选项  TCP_NODELAY。这会禁用Nagle的小数据包传输算法。
threadNameN / A指定此参数时,将在调用传输期间修改线程的名称。附加远程地址,以便粘贴在传输方法中的调用将在线程名称中包含目标信息。当使用线程转储进行脱气时,这非常有用。
tracefalse导致通过传输发送的所有命令都被记录。要查看记录的输出,请定义Log4j记录器:log4j.logger.org.apache.activemq.transport.TransportLogger=DEBUG
trafficClass0要在套接字上设置的流量类。
diffServ0(仅限客户端)要在传出数据包上设置的首选差分服务流量类,如RFC 2475中所述。有效整数值:[0,64]。有效的字符串值:EFAF[1-3][1-4]CS[0-7]。使用JDK 6时,仅在JVM使用IPv4堆栈时才有效。要使用IPv4堆栈,请设置系统属性java.net.preferIPv4Stack=true。注意:同时指定' diffServtypeOfService ' 是无效的,因为它们在TCP / IP包头中共享相同的位置
typeOfService0(仅限客户端)要在传出数据包上设置的首选服务类型值。有效的整数值:[0,256]。使用JDK 6时,仅在JVM配置为使用IPv4堆栈时才有效。要使用IPv4堆栈,请设置系统属性java.net.preferIPv4Stack=true。注意:同时指定' diffServtypeOfService ' 是无效的,因为它们在TCP / IP包头中共享相同的位置。
useInactivityMonitortruefalseInactivityMonitor被禁用,连接永不超时。
useKeepAlivetruetrue KeepAliveInfo空闲连接上发送消息时,防止其超时。如果此参数是false连接,如果在指定的时间内没有在连接上收到任何数据,则连接仍将超时。
useLocalHostfalsetrue本地连接将使用值进行localhost的,而不是实际的本地主机名。在某些操作系统上,例如OS X,无法以本地主机名连接,因此localhost更好。
useQueueForAccepttruetrue接受的套接字被放置到队列上以使用单独的线程进行异步处理时。
wireFormatdefaultwireFormat要使用的工厂的名称。
wireFormat。*N / A具有此前缀的属性用于配置wireFormat

2.2、NIO传输(The NIO Transport)

NIO Transport与常规TCP传输非常相似。不同之处在于它是使用NIO API实现的,它可以帮助提高性能和可扩展性,不用将Java NIO包与IBM的AIO4J包混淆。。NIO仅是服务器端传输选项。尝试在客户端使用它将实例化常规TCP传输。要从TCP切换到NIO,只需更改URI的方案部分。这是在代理的XML配置文件中定义的示例。

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

NIO和TCP协议类似,但NIO更侧重于底层的访问操作,允许开发人员对同一资源可有更多的client调用和服务端有更多的负载。
适合使用NIO协议的场景:

  • 可能有大量的Client去连接到Broker上,一般情况下,大量的Client去连接Broker是被操作系统的线程所限制的。因此,NIO的实现比TCP需要更少的线程去运行,所以建议使用NIO协议
  • 可能对于Broker有一个很迟钝的网络传输,NIO比TCP提供更好的性能。

配置语法

nio://hostname:port?key=value

 3:NIO协议

1:编辑安装路径中的activemq.xml文件,新添加一个nio连接器。

<transportConnector name="nio" uri="nio://0.0.0.0:61618?trace=true"/>

 

2:将连接的url换成nio协议的 

4:NIO协议增强(autoNio)

上述的nio协议只能访问nio的tcp协议;现在使用AUTONIO就可以自动适配;既可以使用NIO又可以使用TCP并且该端口还能使用其他的各种协议

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

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苍煜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值