目录
1:编辑安装路径中的activemq.xml文件,新添加一个nio连接器。
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
传输选择项
选项名称 | 默认值 | 描述 |
---|---|---|
backlog | 5000 | 指定传输服务器套接字等待接受的最大连接数。 |
closeAsync | true | 如果true 套接字关闭调用是异步发生的。此参数应设置false 为STOMP等协议,这些协议通常用于为每次读取或写入创建新连接的情况。这样做可确保套接字关闭调用同步发生。同步关闭可防止代理由于连接的快速循环而耗尽可用套接字。 |
connectionTimeout | 30000 | 如果>=1 该值设置连接超时(以毫秒为单位)。值为0 表示没有超时。负值被忽略。 |
daemon | false | 如果true 传输线程将以守护进程模式运行。将此参数设置为true 将代理嵌入Spring容器或Web容器中以允许容器正确关闭。 |
dynamicManagement | false | 如果true 在TransportLogger 可以通过JMX进行管理。 |
ioBufferSize | 8 * 1024 | 指定在TCP层和wireFormat 基于编组的OpenWire层之间使用的缓冲区的大小。 |
jmxPort | 1099 | (仅限客户端)指定JMX服务器将用于管理的端口TransportLoggers 。这应仅由客户端生产者或消费者通过URI设置,因为代理创建自己的JMX服务器。指定备用JMX端口对于在同一台计算机上测试代理和客户端并且需要通过JMX控制这两者的开发人员非常有用。 |
keepAlive | false | 如果true ,在代理连接上启用TCP KeepAlive以防止连接在TCP级别超时。这不应该与使用的KeepAliveInfo 消息混淆InactivityMonitor 。 |
logWriterName | default | 设置org.apache.activemq.transport.LogWriter 要使用的实现的名称。名称映射到resources/META-INF/services/org/apache/activemq/transport/logwriters 目录中的类。 |
maximumConnections | Integer.MAX_VALUE | 此代理允许的最大套接字数。 |
minmumWireFormatVersion | 0 | wireFormat 将被接受的最小远程版本(请注意拼写错误)。注意:当远程wireFormat 版本低于配置的最低可接受版本时,将引发异常并且将拒绝连接尝试。值0 表示不检查远程wireFormat 版本。 |
socketBufferSize | 64 * 1024 | 设置接受的套接字读写缓冲区的大小(以字节为单位)。 |
soLinger | Integer.MIN_VALUE | soLinger 值为时设置套接字的选项> -1 。当设置-1 的soLinger 套接字选项被禁用。 |
soTimeout | 0 | 设置套接字的读取超时(以毫秒为单位)。值为0 表示没有超时。 |
soWriteTimeout | 0 | 设置套接字的写入超时(以毫秒为单位)。如果套接字写操作未在指定的超时之前完成,则套接字将被关闭。值0表示没有超时。 |
stackSize | 0 | 设置传输的后台读取线程的堆栈大小。必须以倍数指定128K 。值为0 表示忽略此参数。 |
startLogging | true | 如果传输堆栈true 的TransportLogger 对象最初将消息写入日志。除非,否则忽略此参数trace=true 。 |
tcpNoDelay | false | 如果设置true 了套接字选项 TCP_NODELAY 。这会禁用Nagle的小数据包传输算法。 |
threadName | N / A | 指定此参数时,将在调用传输期间修改线程的名称。附加远程地址,以便粘贴在传输方法中的调用将在线程名称中包含目标信息。当使用线程转储进行脱气时,这非常有用。 |
trace | false | 导致通过传输发送的所有命令都被记录。要查看记录的输出,请定义Log4j 记录器:log4j.logger.org.apache.activemq.transport.TransportLogger=DEBUG 。 |
trafficClass | 0 | 要在套接字上设置的流量类。 |
diffServ | 0 | (仅限客户端)要在传出数据包上设置的首选差分服务流量类,如RFC 2475中所述。有效整数值:[0,64] 。有效的字符串值:EF ,AF[1-3][1-4] 或CS[0-7] 。使用JDK 6时,仅在JVM使用IPv4堆栈时才有效。要使用IPv4堆栈,请设置系统属性java.net.preferIPv4Stack=true 。注意:同时指定' diffServ和typeOfService ' 是无效的,因为它们在TCP / IP包头中共享相同的位置 |
typeOfService | 0 | (仅限客户端)要在传出数据包上设置的首选服务类型值。有效的整数值:[0,256] 。使用JDK 6时,仅在JVM配置为使用IPv4堆栈时才有效。要使用IPv4堆栈,请设置系统属性java.net.preferIPv4Stack=true 。注意:同时指定' diffServ和typeOfService ' 是无效的,因为它们在TCP / IP包头中共享相同的位置。 |
useInactivityMonitor | true | 当false 该InactivityMonitor 被禁用,连接永不超时。 |
useKeepAlive | true | 在true KeepAliveInfo 空闲连接上发送消息时,防止其超时。如果此参数是false 连接,如果在指定的时间内没有在连接上收到任何数据,则连接仍将超时。 |
useLocalHost | false | 当true 本地连接将使用值进行localhost 的,而不是实际的本地主机名。在某些操作系统上,例如OS X ,无法以本地主机名连接,因此localhost 更好。 |
useQueueForAccept | true | 当true 接受的套接字被放置到队列上以使用单独的线程进行异步处理时。 |
wireFormat | default | wireFormat 要使用的工厂的名称。 |
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& wireFormat.maxFrameSize=104857600& org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize=50"/>