1.接收器(Acceptor

在Artemis传输中接收器是一个重要的概念,如下broker.xml中接收器的配置:

<acceptor name="netty">tcp://localhost:61617</acceptor>

可以在acceptor元素中定义一个或多个接收器。每台服务器接收器的数量没有上限。每个接收器定义了一种可以与Artemis服务器建立连接的方式。

URL模式部分定义了Acceptor类型,如tcp或vm,分别对应在Netty Acceptor和VM Acceptor。可以通过键值对方式配置一组特殊的传输属性,如下:

<acceptor name="netty">tcp://localhost:61617?sslEnabled=true&keyStorePath=/path</acceptor>

2.连接器(connector

虽然在服务器使用接收器来定义如何接受连接的方式,但连接器定义如何连接到服务器。

<connector name="netty">tcp://localhost:61617</connector>

可以在connector元素中定义连接器,可以定义一个或者多个连接器,每台服务器的连接数没有上限。

连接器用于当服务器作为客户端连接其他服务器。例如:当一台服务器桥接到另一台服务器;或者当一台服务器作为集群的一部分时。在这些情况下,服务器知道如何连接到其他服务器,这是由连接器定义的。

3.单端口支持

Artemis支持所有协议使用同一个端口,Artemis将自动检测正在使用的协议CORE、AMQP、STOMP等,并且使用相应的Artemis处理程序。同时还会检测是否正在使用例如HTTP或者websocket等协议,使用适当的解码器进行处理。通过acceptor配置限定使用的消息协议:

<acceptor name="netty">tcp://localhost:61617?protocols=CORE,AMQP</acceptor>

4.配置ArtemisNetty TCP

Netty TCP是使用简单的未加密的基于TCP套接字的传输,如果在不受信的网络上运行可以使用SSL或HTTPS。

所有用于Netty TCP方案的有效属性key都在org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants类中定义。大多数参数都可以用于接收端和连接点,有些配置只能用于连接端。如下这些Netty配置可以通过在broker配置的连接器或接收器中的URL属性中进行定义。

 <acceptor name="artemis">tcp://10.0.0.1:61617?remotingThreads=200;directDeliver=false;tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP,STOMP,MQTT,OPENWIRE;useEpoll=true</acceptor>

简单的Netty TCP配置如下:

  • host

指定连接的主机名或者ip地址(配置连接器),或者监听地址(配置接收器)。在接收器中可以通过用逗号分隔多个主机或ip来指定监听地址,也可以指定0.0.0.0来接收服务器所有网络接口的连接。但是为连接器指定多个地址是无效的,连接器只与一个特定地址建立连接。默认值为localhost(只限本地)。

  • port

用于指定连接端口(连接器)或监听的端口(监听器),默认为61616。

  • tcpNoDelay

如果为true将禁用Nagle算法,这是一个java客户端套接字选项。默认为true。

(Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块,要求TCP连接上最多只能有一个未被确认的小分组,在该分组的确认到达之前不能发送其他的小分组)。

  • tcpSendBufferSize

此字段定义TCP发送缓存大小(单位bytes),默认值为32768bytes(32KiB)。应根据网络带宽和延迟来调整TCP缓冲区大小。TCP发送/接收缓冲区大小计算公式如下:

buffer_size = bandwidth * RTT

bandwidth(网络带宽)以每秒字节数为单位,RTT(网络往返时间)以秒为单位,使用ping可以轻松测量RTT。对于快速的网络,可以增加缓冲区大小设置。

  • tcpReceiveBufferSize

此字段定义TCP接收缓存大小,默认值为32768bytes(32KiB)。

  • writeBufferLowWaterMark

此参数确定Netty写缓存的低位阀值,一旦在写缓存区中排队的字节数超过高位阀值(writeBufferHighWaterMark定义的值)后,只有待写入缓存队列大小降到该值以下时,Netty通道才会再次开始写入。默认值为32768bytes(32KiB)

  • writeBufferHighWaterMark

此参数定义Netty写缓存的高位阀值,如果写缓存区中排队的字节数超过此值,则Netty通道将不可写入,默认值为131072字节(128KiB)。

  • batchDelay

在将数据包写入传输通道之前,此配置可以设置最多一次性批量写入此配置的ms数。这个配置可以增加大量小消息的吞吐量,这样做的代价是增加数据传输的平均时延。默认值为0ms。

  • directDeliver

当消息到达服务器并传递给等待的消费者时,默认情况下,消息到达和传递消息是在同一个线程中进行处理的。这在具有相对较小的消息和少量消费者的环境中提供了较好的延迟,但是牺牲总体吞吐量和可伸缩性为代价的-特别是在多核机器上。如果愿意提升些延迟,但是希望吞吐量高可以将此值设置为false。默认为true。

  • remotingThreads

默认情况下Artemis使用三倍的CPU内核(或超线程)数量(Runtime.getRuntime().availableProcessors() 获取的值)的三倍线程来处理输入的包数据。默认值为-1也就是Runtime.getRuntime().availableProcessors() *3的值。

  • localAddress

配置Netty连接器时,知道客户端在连接到远程地址时将使用的本地地址。通常程序服务器上使用,或者用于运行嵌入式时控制哪个地址用于外部连接。如果未设置,则连接器将使用任何可用的本地地址。

  • localPort

在配置Netty连接器时,指定客户端在连接到远程地址时将使用的本地端口。如果使用默认值(0)则连接器将让系统获取临时端口,有效端口为0~65535。

  • connectionAllowed

此配置仅适用于接收器,限制了接收器允许的连接数,达到此限制时,将向日志发出DEBUG级别消息,并拒绝连接。正在使用的客户端类型将决定拒绝连接是会发生什么,在core客户端会导致org.apache.activemq.artemis.api.core.ActiveMQConnectionTimedOutException。

  • handshake-timeout

为了防止未经授权的客户端打开打来连接并且保持打开状态由于每个连接都需要占用文件句柄,因此会消耗句柄导致其他客户端无法使用资源。设置此值为连接握手超时时间,默认值为10s,其值为0或负整数,此功能关闭。更改此值需要重启服务器才能生效。

5.配置Netty本地传输类型

当使用系统平台支持Netty Native Transport,允许Artemis使用本地sockets/io而不是java nio。与基于Java NIO的传输相比,可以产生更少的垃圾,并且通常可以提高性能。客户端和服务器都能从中受益,当前支持的平台:

  • Linux运行64位JVM
  • MacOS运行64位JVM

当检测到支持的平台,Artemis将默认启用相应的本地传输。如果不支持或者加载本机库有问题,自动回退到Java NIO。

5.1 Linux本地传输

在支持本地传输的Linux平台使用Epoll(一种I/O多路复用模型).

如下配置特定用于Linux

useEpoll:默认情况检查到执行Linux系统的64位JVM,将使用epoll,如果此设置为false将强制使用Java NIO,默认为true。

5.2 MacOS本地传输

在MacOS平台中使用KQueue。

如下配置特定于MacOS:

useKQueue:如果检测到运行在MacOS系统的64位JVM,将使用KQueue,如果此设置为false将强制使用Java NIO,默认为true。

6.配置Netty SSL

Netty SSL类似于Netty TCP传输,其通过使用安全套接字层(Secure Sockets Layer SSL)加密TCP连接来获取额外的安全。

Netty SSL包含了Netty TCP的所有属性配置,此外还有如下其他专用的配置:

  • sslEnabled

是否开启SSL,默认为false。

  • keyStorePath

当用于acceptor中定义SSL key存储的路径。它存放了服务器的证书(无论是自签名还是机构签名)。

当在连接器上使用时,它定义了客户端的SSL key存储路径,其存储了客户端的证书。如果使用双向SSL(即互相身份认证),虽然在服务器上配置了此值,但客户端会下载并使用。如果客户端和服务器要使用不同的路径。可以在使用"javax.net.ssl.keyStore"系统属性或特定于ActiveMQ的"org.apache.activemq.ssl.keyStore"来覆盖服务器端设置。

  • keyStorePassword

当用于acceptor时,定义了服务端秘钥库密码。

当用于连接器上时,定义了客户端秘钥库密码。如果使用双向SSL(即互相身份认证),虽然在服务器上配置了此值,但客户端会下载并使用。如果客户端和服务器要使用不同的密码。可以在使用"javax.net.ssl.keyStorePassword"系统属性或特定于ActiveMQ的"org.apache.activemq.ssl.keyStorePassword"来覆盖服务器端设置。

  • trustStorePath

当用于接收器时,用于存储服务器信任的所有客户端的私钥。当使用双向认证时,此配置仅适用于接收器。

在连接器上使用时,该路径用于存储客户端信任的所有服务器公钥。虽然在服务器上配置了此值,但客户端会下载并使用。如果客户端和服务器要使用不同的路径。可以在使用"javax.net.ssl.trustStore"系统属性或特定于ActiveMQ的"org.apache.activemq.ssl.trustStore"来覆盖服务器端设置。

  • trustStorePassword

当用于接收器时,此配置为服务端信任库的密码。当使用双向认证时,此配置仅适用于接收器。

在连接器上使用时,这是客户端信任库的密码。虽然在服务器上配置了此值,但客户端会下载并使用。如果客户端和服务器要使用不同的密码。可以在使用"javax.net.ssl.trustStorePassword"系统属性或特定于ActiveMQ的"org.apache.activemq.ssl.trustStorePassword"来覆盖服务器端设置。

  • enabledCipherSuites

无论是在连接器还是在接收器上使用,这都是用于SSL通讯的以逗号分隔的密文族。默认为null,意味着使用JVM默认值。

  • enabledProtocols

无论是在连接器还是在接收器上使用,这都是用于SSL通讯的以逗号分隔的协议列表。默认为null,意味着使用JVM默认值。

  • needClientAuth

仅用于接收器,定义连接此接收器的客户端需要双向SSL,默认值为false。此属性优先于wantClientAuth,如果其值为true,忽略wantClientAuth。

  • wantClientAuth

仅用于接收器,定义连接到此接收器的客户端需要双向SSL但不是必须的。默认值为false。

  • verifyHost

在接收器上使用时,客户端的CN SSL证书将与其主机名进行比较以验证他们是否匹配。仅用于书双向SSL。

在连接器上使用时,服务器的CN SSL证书将与其主机名进行比较以验证他们是否匹配。单向和双向都可以。

默认值为false。

  • trustAll

在连接器上使用时,客户端将信任隐式信任所提供的服务器证书。无论是否配置了任何信任库。警告:此设置主要仅用于测试,不在生产中使用。默认值为false。

  • useDefaultSslContext

仅在连接器上有效,允许连接器使用默认的SSL上下文(通过SSLContext.getDefault()获取),可以由客户端以变成的方式设置(通过SSLContext.setDefault(SSLContext)设置)。如果为true,则忽略除sslEnabled外的所有其他SSL相关参数。默认为false。

  • sslProvider

用于更改JDK和OPENSSL直接的提供者。默认为JDK。如果使用OPENSSL,可以在类路径中添加netty-tcnative以使用本地安装的openssl。如果想使用特殊的ciphersuite - elliptic组合,这组合是通过openssl而不是JDK提供的。

7.配置Netty HTTP

Netty HTTP包含了Netty TCP的所有属性配置,此外还有如下其他专用的配置:

  • httpEnabled

现在不再需要这个了。 通过单端口支持,Artemis现在将自动检测是否正在使用http并自行配置。

  • httpClientIdleTime

设定客户端空闲连接存活时间。

  • httpClientIdleScanPeriod

扫描空闲客户端的频率(以毫秒为单位)。

  • httpResponseTime

服务器在发送空的http响应以保持连接活动之前可以等待多长时间

  • httpServerScanPeriod

扫描需要响应的客户端的频率(以毫秒为单位)。

  • httpRequiresSessionId

如果为true客户端将在第一次调用后等待以接收会话ID。使用http连接器连接到servlet接收器(不推荐)。

注:此系列文章为Apache Artemis V2.6.2官方使用文档的简要翻译文档(非完全按照官方文档排版进行翻译,有删减),个人能力有限如有错误请谅解。源文档地址:http://activemq.apache.org/artemis/docs/latest/index.html

(7)Artemis传输配置相关推荐

  1. 09-OpenLDAP加密传输配置

    OpenLDAP加密传输配置(CA服务器与openldap服务器异机) 阅读视图 环境准备 CA证书服务器搭建 OpenLDAP服务端与CA集成 OpenLDAP客户端配置 客户端测试验证 故障处理 ...

  2. rtx服务器设置 文件,rtx 服务器 文件传输 配置

    rtx 服务器 文件传输 配置 内容精选 换一换 该任务指导用户使用Loader将数据从HBase导出到SFTP服务器.创建或获取该任务中创建Loader作业的业务用户和密码.确保用户已授权访问作业执 ...

  3. artemis mq配置开机启动 (centos7)(artemis Init Script)

    参考activemq的:https://blog.csdn.net/u012249177/article/details/81322874?utm_medium=distribute.pc_relev ...

  4. 胎儿式保姆级教程:Jetson Xavier NX镜像烧录、开机配置、中文配置、风扇设置、远程桌面、文件传输配置、pycharm安装环境配置,QQ,opencv(cuda编译),torch(GPU).

    一.使用的硬件:nx板子.原装充电器.有线鼠标(USB).有线键盘(USB).有线摄像头(USB).7寸触摸显示屏.20寸大显示屏(显示屏有一个就可以,大屏幕更加方便).SD卡(128G,用64g也可 ...

  5. TMS320C6678 EDMA传输配置

    配置步骤: 注:以下的参考章节均为文末的参考文献内容 Step1 启动DMA/QDMA通道 (a)确定要使用的信道类型(QDMA或DMA). (b)通道映射 (i)如果使用QDMA通道,则使用通道映射 ...

  6. 【STM32G431RBT6】蓝桥杯嵌入式 ADC采样DMA传输配置

    一.介绍 蓝桥杯嵌入式开发板使用的是STM32G431RBT6,这个G系列的mcu使用STM32cubemax配置的时候和普通的F系列不太一样. 二.原理图 同时开发板预留了两个adc采样通道,分别是 ...

  7. 配置ftp服务器实现文件传输,配置ftp服务器实现文件传输

    配置ftp服务器实现文件传输 内容精选 换一换 云堡垒机支持文件传输功能,以及审计传输的文件.Linux主机和Windows主机的文件传输方式有所区别.Linux主机上传/下载文件,可选择Web运维和 ...

  8. fpga map测试_一种基于SELECTMAP的可配置且高速的FPGA配置电路及实现方法与流程

    本发明属于计算机工程领域,与SoC密切相关.具体涉及一种FPGA配置电路及实现方法. 背景技术: 随着大数据的发展,计算能力的提升,人工智能近两年迎来了新一轮的爆发.2016年谷歌AlphaGo赢得了 ...

  9. SAP手记之六:GUI安装后初始配置(中文语言包安装)

    SAP手记之六:GUI安装后初始配置(中文语言包安装) 在初始配置前先要了解的东西,这些东西在我们按照好sap客户端应用程序GUI的时候就可以看到: 元素一:client       如何理解clie ...

最新文章

  1. java input 数组_Java基础之:数组
  2. linux shell declare命令 声明shell变量 显示shell函数
  3. 字符串(strcmp)
  4. 【Bitmap Index】B-Tree索引与Bitmap位图索引的锁代价比较研究
  5. [DeeplearningAI笔记]卷积神经网络2.9-2.10迁移学习与数据增强
  6. 记录 Linux crontab 的使用
  7. HTML5下划线是一个常见的问题
  8. Android开发学习之卡片式布局的简单实现
  9. 输入n个学生的成绩c语言,c语言帮忙改错!输入n个学生的成绩信息,按照每个学生的个人平均成绩从高到低输出他们的信息...
  10. 一位平凡毕业生的大学四年
  11. ZEMAX 中三种设计优化方法
  12. 计算机图形学中的抗锯齿
  13. 台式计算机大全,电脑品牌大全..3MT产品库
  14. 依托TAPD的敏捷实践
  15. 宜信智能监控平台建设实践|分享实录
  16. OpenCV学习(13) 细化算法(1)
  17. l05173芯片针脚图_芯片引脚定义
  18. 浅谈 “ 站内信 ” 的实现
  19. 2022最新软件测试面试题(含答案)
  20. 青龙面板-饿l么(更新)

热门文章

  1. 安全设计 -- 会话安全
  2. android非线性渐变色,不同区域显示不同的渐变效果
  3. 教育元宇宙何时常态化应用?专家建议纳入教育数字化战略行动
  4. IDEA设置类注解模板
  5. 数据库和数据库软件的安装
  6. 正则表达式 “.*“匹配任意字符
  7. 信息技术应用现状的趋势
  8. AI 投资探索路上的一些感受
  9. 【Unity】Unity C#基础(十五)implicit 隐式类型转换、explicit 显式类型转换
  10. SpringBoot Actuator