本章节为每个版本提供以下信息
-
指向完整发行说明的链接,其中包含版本中解决的所有问题。
-
简要的“亮点”列表(如果适用)。
-
如果需要,从先前版本升级时所需的特定步骤。
如果升级跨越多个版本,则需要按顺序遵循每个版本的步骤。 |
除了此处概述的任何特定版本升级说明外,请遵循升级代理章节中概述的一般升级程序。 |
1. 2.38.0
1.1. 亮点
-
现在支持 WebSocket 压缩。当通过 WebSockets 进行通信时,此压缩可用于 AMQP、STOMP 或 MQTT 透明地使用。
-
ActiveMQServerMessagePlugin
现在具有messageMoved()
回调。 -
核心桥接配置现在支持
client-id
,这将使识别远程代理上的桥接连接变得更加容易。 -
consumer
CLI 命令现在支持通过为--receive-timeout
指定-1
来“永久”使用消息。 -
身份验证和授权缓存现在具有详细的调试日志记录。
-
代理管理已进行了一些更新
-
TextFileCertificateLoginModule
现在支持 DN 属性值的规范化。有关更多详细信息,请参见ARTEMIS-5102
1.2. 从 2.37.0 升级
-
由于 ARTEMIS-5096,Web 控制台的归档文件(即
console.war
)现在将被解压缩。此更改是必要的,以便从归档文件中删除某些 jar 文件,这些文件已经分发在代理的主要lib
目录中。消除这些重复的 jar 文件将减少代理分发的尺寸,并且这也意味着控制台在某些情况下将使用更新的依赖项,并防止安全工具标记旧的 jar 文件。 -
由于 ARTEMIS-5101,用于对称密码屏蔽的默认敏感字符串编解码器中使用的
two-way
算法现在已弃用。它将继续工作,但它将在日志中打印警告。这是消除密码存储在配置文件中的过程中的一步,除了那些由强单向哈希算法编码的密码。其他用例将被推向基于证书的安全(例如,双向 TLS)或不需要密码的等效内容。 -
由于 ARTEMIS-5085,参数
retryIntervalMultiplier
和maxRetryInterval
现在将应用于“初始”连接尝试(即通过initialConnectAttempts
控制)。这是为了修复一个错误,即这些参数被错误地忽略了。
2. 2.37.0
2.1. 亮点
-
除了运行之外,CLI 命令的环境变量可以通过
artemis-utility.profile
文件配置。 -
除了运行之外,CLI 命令的日志记录配置可以通过
log4j2-utility.properties
文件配置。 -
运行命令已从 artemis shell 中删除,请使用
artemis
脚本(Windows 上为artemis.cmd
)执行它。 -
作为 ARTEMIS-4986的一部分,修复了投票(无共享复制仲裁协议)的版本兼容性
2.2. 从 2.36.0 升级
除了运行之外,CLI 命令现在需要通过artemis-utility.profile
文件定义环境变量,并通过log4j2-utility.properties
文件定义日志记录配置。有关更多信息,请参见 日志记录。
3. 2.36.0
3.1. 亮点
-
与 GitHub 的 Dependabot 集成引发的许多依赖项升级。
-
通过 ARTEMIS-4949 针对涉及较慢 IO 设备(例如 NFS)和 NIO 日志的用例的稳定性改进。
-
地址管理器中的代码优化,以降低 CPU 利用率并提高涉及大量地址和队列的用例的代理可扩展性,这得益于 ARTEMIS-4814。
-
通过 ARTEMIS-3509 针对涉及通过 WebSockets 连接的 STOMP 客户端的用例的稳定性改进。
-
针对开发人员的许多内部“代码整理”改进,使代码库更简单、更一致。
5. 2.34.0
5.2. 从 2.33.0 升级
-
由于 ARTEMIS-4712,
LDAPLoginModule
中不再支持通过login.config
中的connectionPool
属性配置的连接池功能。login.config
仍然可以使用connectionPool
属性。不会抛出错误。但是,无论配置如何,连接将不再池化。 -
由于 ARTEMIS-4498,Web 控制台现在将报告所有内部对象。
-
这样做是为了允许管理员在事情无法按预期工作时采取行动,以获取这些对象的指标,并为代理提供更大的透明度。
-
这包括所有 Openwire Advisor 队列和地址、MQTT 内部对象、集群存储和转发 (SNF) 队列、镜像 SNF。
-
如果您打算控制 Web 控制台上某些用户的访问权限,则可能需要重新审视授权。
-
-
CLI 操作
./artemis queue stat
的输出已改进和更新。如果您在脚本中解析了以前的输出,您将看到输出中的差异。-
不建议解析 CLI 操作的输出。您可以改为使用具有适当 JSON 输出的管理上的 jolokia 调用。
-
6. 2.33.0
6.1. 亮点
-
支持 CLI
producer
命令上的 JSON 格式的类型化属性 -
新的 CLI 命令
pwd
,用于显示与当前实例相关的目录 -
Maven 物料清单 (BOM)
artemis-bom
,用于简化集成 -
计划消息的“FirstMessage”API
-
新的 “查看”和“编辑” 权限,用于通过
broker.xml
中的security-settings
配置的管理操作 -
在
bootstrap.xml
中配置的嵌入式 Web 服务器的新sslAutoReload
参数,用于检测 SSL 存储在磁盘上的更改并自动重新加载 -
镜像和分页的性能改进
-
日志记录指标,以降低错过日志中
WARN
或ERROR
消息的风险。 -
对 网络隔离(又名脑裂) 的文档大幅改进
-
可插拔锁管理器(又名可插拔仲裁投票)已从“实验性”状态中移出,并已准备好投入通用使用
6.2. 从 2.32.0 升级
-
由于 ARTEMIS-4532,与 MQTT 主题和订阅相关的地址和队列的名称可能会更改。如果同时满足以下两个条件,这将影响 MQTT 用例
-
代理配置为使用通配符语法,该语法不匹配MQTT 通配符语法(例如,默认的通配符语法)。
-
您在 MQTT 主题名称或过滤器中使用来自代理的通配符语法的字符。例如,如果您正在使用默认的通配符语法和名为
1.0/group/device
的 MQTT 主题。此处的点 (.
) 字符是代理通配符语法的一部分,并且它正在 MQTT 主题的名称中使用。在这种情况下,来自代理的通配符语法的字符(与 MQTT 通配符语法中的字符不匹配)将用反斜杠 (
\
) 转义。为了避免这种转换,您可以配置代理以使用 MQTT 通配符语法,或者更改 MQTT 主题名称或过滤器的名称。
此更改还将影响使用
#
而不是<
进行通配符目的的 OpenWire JMS 消费者。在以前的版本中,#
字符在从 OpenWire 通配符格式转换为核心通配符格式时只是直接传递。但是,现在#
字符在转换过程中被转义。对于应用程序而言,将#
用作 OpenWire JMS 客户端的通配符是一个错误;>
是在 ActiveMQ Classic 文档中的通配符 中指定的使用适当字符。 -
-
由于 ARTEMIS-4559,嵌入代理并依赖于
artemis-quorum-ri
和/或artemis-quorum-api
模块,或者使用org.apache.activemq.artemis.core.config.ha.DistributedPrimitiveManagerConfiguration
的用户需要分别使用artemis-lockmanager-ri
、artemis-lockmanager-api
和org.apache.activemq.artemis.core.config.ha.DistributedLockManagerConfiguration
。之前,这些在文档中被标记为“实验性”,并且在名称上严格更改以从概念上阐明其用途。此外,有关高可用性和网络隔离(即脑裂)的文档已得到重大重构,以使其更清晰和更全面。
7. 2.32.0
7.1. 亮点
-
镜像核心消息现在可以在其原生格式下发送,无需转换
-
镜像错误修复和改进
-
ActiveMQ Artemis 现在采用 更具包容性的语言定义。
-
示例现在位于其自己的存储库中:https://github.com/apache/activemq-artemis-examples/
7.2. 从 2.31.x 升级
-
由于 ARTEMIS-4501,MQTT 订阅队列将在相应的会话过期时自动删除,无论是基于 MQTT 5 客户端传递的会话过期时间间隔,还是基于为 MQTT 3.x 客户端或未显式传递会话过期时间间隔的 MQTT 5 客户端配置的
defaultMqttSessionExpiryInterval
。在此更改之前,删除订阅队列依赖于通用的
auto-delete-*
address-settings
。这些设置现在不再需要。
改为配置
defaultMqttSessionExpiryInterval
。 -
由于 ARTEMIS-3474,以下配置元素已更改其出现位置(例如
broker.xml
、bootstrap.xml
等),尽管所有之前的配置目前仍将得到支持-
master
→primary
-
slave
→backup
-
check-for-live-server
→check-for-active-server
-
whitelist
→allowlist
-
blacklist
→denylist
此外,文档和管理界面中对这些元素的引用也发生了更改。集群拓扑信息(例如,从
listNetworkTopology
返回)将包含充当主服务器的节点的primary
**和**live
条目。 -
10. 2.31.0
10.1. 亮点
-
引入了 交互式 shell 用于运行 CLI 命令,以及 Bash & ZSH 自动完成支持。
-
添加了一个 CLI 集群验证工具来帮助监视代理拓扑。使用
check cluster
命令。 -
queue stat
命令现在能够在使用集群时验证整个集群拓扑上的消息计数。 -
添加了对代理连接的 AMQP 联邦 支持。
-
显着改进了分页 JDBC 持久性。
-
将大部分文档从 MarkDown 转换为 AsciiDoc。有关更多详细信息,请参阅 ARTEMIS-4383。
-
许多其他错误修复和改进。
10.2. 从 2.30.0 升级
-
由于 ARTEMIS-4372 和新 Artemis shell 功能的引入,当您调用
./artemis
时,它现在将启动新 shell 以浏览 CLI 命令,而不是仅仅输出help
文本。
12. 2.29.0
12.2. 从 2.28.0 升级
-
由于 ARTEMIS-4151,现在未在
management.xml
的role-access
或allowlist
中定义的 MBean 的默认访问权限为只读。这是一种预防措施,以确保与代理一起部署的任何意外 MBean 不会构成风险。但是,这也将影响特定于 JVM 和平台的 MBean(例如,允许手动垃圾回收、“飞行记录”等)。现在必须通过更改default-access
(不建议)或在management.xml
中专门为特定 MBean 配置role-access
来手动启用对这些 MBean 的写访问权限和一般操作访问权限。这适用于所有 MBean 访问,包括直接通过 JMX 和通过 Jolokia JMX-HTTP 桥访问。 -
由于 ARTEMIS-4212,代理将拒绝在
broker.xml
中未指定路由类型的地址定义,例如<address name="myAddress"/>
此类配置需要更改为指定路由类型,例如
<address name="myAddress"> <anycast/> </address>
或者
<address name="myAddress"> <multicast/> </address>
如果配置了没有路由类型的地址,代理将抛出类似的异常并无法启动
java.lang.IllegalArgumentException: AMQ229247: Invalid address configuration for 'myAddress'. Address must support multicast and/or anycast. at org.apache.activemq.artemis.core.deployers.impl.FileConfigurationParser.parseAddressConfiguration(FileConfigurationParser.java:1580) at org.apache.activemq.artemis.core.deployers.impl.FileConfigurationParser.parseAddresses(FileConfigurationParser.java:1038) at org.apache.activemq.artemis.core.deployers.impl.FileConfigurationParser.parseMainConfig(FileConfigurationParser.java:804) at org.apache.activemq.artemis.core.config.impl.FileConfiguration.parse(FileConfiguration.java:56) at org.apache.activemq.artemis.core.config.FileDeploymentManager.readConfiguration(FileDeploymentManager.java:81) at org.apache.activemq.artemis.integration.FileBroker.createComponents(FileBroker.java:120) at org.apache.activemq.artemis.cli.commands.Run.execute(Run.java:119) at org.apache.activemq.artemis.cli.Artemis.internalExecute(Artemis.java:212) at org.apache.activemq.artemis.cli.Artemis.execute(Artemis.java:162) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.activemq.artemis.boot.Artemis.execute(Artemis.java:144) at org.apache.activemq.artemis.boot.Artemis.main(Artemis.java:61)
-
由于 ARTEMIS-3707,从 JCA 资源适配器中删除了所有
javax.transaction.TransactionManager
的使用。但是,这使transactionTimeout
激活配置属性变得无用。一些现有用户依赖于此行为,因此它已被恢复并为将来删除而适当弃用。
13. 2.28.0
13.1. 亮点
-
错误修复和改进一如既往
-
ARTEMIS-4136 镜像同步复制
-
镜像现在有一个选项可以设置 sync=true。来自客户端的阻塞操作将等待镜像上的往返行程。
-
-
ARTEMIS-4065 分页计数器日志记录已删除
-
我们不再在日志中存储分页计数器记录,这应该可以简化操作并提高性能。
-
13.2. 从 2.27.0 升级
-
由于 ARTEMIS-3871,用于 MQTT 共享订阅队列的命名模式已更改。以前,订阅队列的命名方式是根据 MQTT
SUBSCRIBE
数据包中提供的订阅名称。但是,MQTT 允许在多个订阅中使用相同的名称,而代理中的队列必须具有唯一的名称。现在,订阅队列的命名方式将根据订阅名称和主题名称,以确保所有订阅队列名称都是唯一的。在升级之前,请确保所有 MQTT 共享订阅都是空的。当订阅者重新连接时,他们将获得一个新的订阅队列。如果它们不为空,您可以通过管理方式将消息移动到新的订阅队列。
15. 2.27.0
15.2. 从 2.26.0 升级
希望进行日志记录的客户端应用程序现在需要提供适当的 SLF4J 支持日志记录实现,并根据其需要进行适当配置。有关更多信息以及有关使用 Log4J 2 的示例,请参阅 客户端应用程序日志记录。
代理分发现在包含并配置 Log4J 2 作为其日志记录实现,有关更多详细信息,请参阅 日志记录。如果要升级现有代理实例而不是创建新实例,则需要对代理现有实例的 /etc 和 /bin 文件进行一些配置等更新。
您可以使用从新下载的代理中获取的新 升级辅助工具 来刷新现有代理实例的各种配置文件和脚本。broker.xml 和数据保持原样。
在运行命令之前,您应该备份现有代理实例。 |
可以通过从新下载的代理主目录运行 ./artemis upgrade <path-to-your-instance>
来执行该命令。
在刷新文件过程中,大多数对旧配置文件和脚本的现有自定义内容将丢失。因此,您应该将旧配置文件与刷新的配置文件进行比较,然后根据需要移植您可能已进行的任何缺失的自定义内容。升级命令本身会将它更改的旧文件复制到实例目录中的 同样,如果您已自定义旧的 |
还要注意,broker.xml
中的 configuration-file-refresh-period
设置不再涵盖日志记录配置刷新。Log4J 2 具有自己的配置重新加载处理,通过 Log4J 配置文件本身内的 monitorInterval
属性进行配置。创建的默认 <instance>/etc/log4j2.properties
文件具有设置为 5 秒的 monitorInterval
值,以与之前的默认代理行为保持一致。
15.3. 手动更新
或者,除了使用上面概述的升级辅助工具之外,您还可以按照以下步骤手动执行更新,遵循 一般升级步骤 以及以下附加步骤
-
应使用 Log4J 2 配置创建新的
<instance>/etc/log4j2.properties
文件。“artemis create” CLI 命令使用的文件可以从以下位置下载:log4j2.properties -
应删除旧的
<instance>/etc/logging.properties
JBoss 日志记录配置文件。 -
需要相关的启动脚本或配置文件清理:自 2.26.0 以来所需更改的差异文件可从 此处(适用于 *nix)或 此处(适用于 Windows)获取。
16. 2.26.0
16.1. 亮点
-
错误修复和改进
16.2. 从 2.25.0 升级
-
由于ARTEMIS-4006,
artemis-jms-client-all
和artemis-jakarta-client-all
客户端已从二进制发行版中的lib/client
目录中删除。如果您使用这些库,则可以在Maven Central(例如这里)找到它们。有关更多信息,请参阅客户端类路径文档。 -
我们从代码库和文档中删除了REST接口。如果您仍然需要REST接口,则可以访问仍然可行的最新版本。您仍然可以按照先前文档中的步骤构建和部署该接口。但是,您应该停止使用它,因为它将不再维护。
-
由于ARTEMIS-3980,Web内容已从二进制发行版中删除。我们现在将使用根目标重定向Web请求到管理控制台。要在当前实例上启用此新的重定向行为,您必须更新
bootstrap.xml
。更改<web path="web">
到
<web path="web" rootRedirectLocation="console">
如果您以前自定义过索引页面或在
web
文件夹中添加了自定义内容,请参阅Web服务器文档以获取有关禁用重定向和启用Web内容的更多信息。
18. 2.24.0
18.1. 亮点
-
简化的页面缓存和文件只需读入队列,而无需软缓存。
18.2. 从2.23.0升级
-
由于ARTEMIS-3851,为使用
CleanSession=1
的MQTT 3.x订阅者创建的队列现在是**非持久的**而不是持久的。这可能会影响MQTT客户端的security-settings
,这些客户端以前只对其角色具有createDurableQueue
。他们现在还需要createNonDurableQueue
。同样,这只会对使用CleanSession=1
的MQTT 3.x客户端产生潜在影响。 -
由于ARTEMIS-3892,分配给队列的用户名将基于**验证后的**用户,而不仅仅是客户端应用程序提交的用户名。这将影响以下用例
-
当
login.config
配置了GuestLoginModule
,导致某些用户在身份验证过程中被分配特定用户名和角色时。 -
当
login.config
配置了CertificateLoginModule
,导致用户被分配与其SSL证书中的主体DN相对应的用户名和角色时。
在这种情况下,代理将使用此分配的(即验证后的)用户名创建任何与连接关联的队列。在过去,队列的用户名将为空。
-
19. 2.23.1
19.1. 亮点
-
ARTEMIS-3856 - 无法将通道状态更改为ReadyForWriting:java.util.ConcurrentModificationException
20. 2.23.0
22. 2.21.0
22.2. 从2.20.0升级
-
由于XML模式更改以更正不准确的域名,因此需要更新2个文件
-
etc/bootstrap.xml
-
etc/management.xml
在这两个文件中,将XML命名空间从
activemq.org
更改为activemq.apache.org
,例如,在bootsrap.xml
中使用<broker xmlns="https://activemq.apache.org/schema">
并在
management.xml
中使用<management-context xmlns="https://activemq.apache.org/schema">
-
-
**如果您使用JDBC持久性**,则由于ARTEMIS-3679中的更改,您将需要更新数据库。
NODE_MANAGER_STORE
上的HOLDER_EXPIRATION_TIME
列已从TIMESTAMP
更改为BIGINT
(或Oracle上的NUMBER(19)
)。您将必须停止访问该表的任何代理,并将其删除或对您的数据库执行适当的ALTER TABLE
语句。如果您删除该表,则它将在代理重新启动时自动重新创建,并使用新的自动生成的节点ID重新填充。 -
**如果您使用JGroups**,则由于ARTEMIS-2413中的更改,其中JGroups已从3.x更新到5.x,您将需要更新您的JGroups配置。许多协议已经改变,而且没有自动工具可以将旧的配置更新到最新版本,因此请参阅JGroups文档以获取有关新配置的更多详细信息。您可以在JGroups存储库(例如
tcp.xml
和udp.xml
)中找到示例配置。
24. 2.19.0
24.1. 亮点
-
通过管理API重新播放保留的日志记录的新功能。
-
使用默认编解码器时设置掩码密码的“密钥”的新环境/系统属性。
-
通过新的
OFF_WITH_REDISTRIBUTION
类型禁用消息负载均衡并仍然允许重新分配的功能。 -
MQTT会话状态现在可以自动清理,以避免在客户端没有清理其自身会话的情况下过度累积。
-
在
lib/client
目录中分发完整的Jakarta Messaging 3.0客户端,以及如何在examples/features/standard/queue-jakarta
中使用它的新示例。
25. 2.18.0
25.1. 亮点
-
双镜像支持提高AMQP镜像用于灾难恢复的功能
-
用于核心桥接的并发配置。
-
用于核心桥接的XPath过滤器表达式(与ActiveMQ“经典”版本一致)。
25.2. 从2.17.0升级
-
由于ARTEMIS-3367,核心连接器上
verifyHost
的默认设置已从false
更改为true
。这意味着**核心客户端现在将期望代理SSL证书的CN
或Subject Alternative Name值与客户端URL中的主机名匹配**。这会影响所有基于核心的客户端,包括核心JMS客户端和集群节点之间的核心连接。虽然这是一个“重大”更改,但不执行主机名验证存在安全风险(例如,由于中间人攻击)。默认情况下启用它使核心客户端的行为与行业标准保持一致。为了解决这个问题,您可以执行以下操作之一
-
更新您的SSL证书以使用与客户端URL中的主机名匹配的主机名。这是关于安全的推荐选项。
-
更新使用
sslEnabled=true
的任何连接器,使其也使用verifyHost=false
。使用此选项意味着您将不会获得主机名验证的额外安全性,但无需更改任何证书。这本质上恢复了以前的默认行为。
有关更多详细信息,请参阅RFC 2818“HTTP over TLS”的第3.1节。
-
-
由于ARTEMIS-3117,SSL密钥库和信任库不再自动重新加载。以前,为每个连接创建了一个
javax.net.ssl.SSLContext
实例。这将隐式地获取对任何新连接的密钥库和信任库的任何更改。但是,这非常低效,因此在连接数量很多的情况下无法很好地扩展。更改了行为,因此仅为每个acceptor
创建了一个javax.net.ssl.SSLContext
。但是,仍然可以在不重启代理的情况下从磁盘重新加载密钥库和信任库。只需在acceptor
上使用reload
管理操作即可。这可以通过JMX、Web控制台、Jolokia等方式实现。以下是一个示例
curl
命令,您可以使用Jolokia来调用artemis
接收器的reload
操作curl --user admin:admin --header "Content-Type: application/json" --request POST --data '{"type":"exec", "mbean":"org.apache.activemq.artemis:broker=\"0.0.0.0\",component=acceptors,name=\"artemis\"", "operation":"reload"}' https://127.0.0.1:8161/console/jolokia/exec
当然,您需要调整用户名和密码以及代理和接收器名称,以适合您的环境。
-
队列的“速率”指标已通过ARTEMIS-3397从Web控制台中删除。这是对2.16.0中ARTEMIS-2909(在下面的升级说明中引用)的后续操作。“速率”指标在从管理API中删除后错误地显示在Web控制台中。
-
由于ARTEMIS-3141、ARTEMIS-3128和ARTEMIS-3175,任何返回消息数据的“列表”或“浏览”管理方法返回的数据(包括通过Web控制台公开的数据)默认情况下都会被截断。这样做是为了避免大量消息数据造成的负面情况,这些情况可能会对代理稳定性产生负面影响。
management-message-attribute-size-limit
地址设置控制此行为。如果您希望恢复以前的(并且可能很危险的行为),那么您可以为此指定-1
。默认情况下为256
。
26. 2.17.0
27. 2.16.0
27.1. 亮点
-
可配置的临时队列命名空间
-
支持复制的“基本”
SecurityManager
实现 -
支持为单个 STOMP 客户端设置消费者窗口大小
-
改进的 JDBC 连接管理
-
基于 Hawtio 2 的全新 Web 控制台
-
身份验证和授权的性能优化(例如缓存)
-
支持 JCA 资源适配器中的管理对象,便于部署到第三方 Java EE 应用程序服务器
-
能够阻止接收器自动启动
27.2. 从 2.15.0 升级
-
由于 ARTEMIS-2893,用户管理的实现方式不得不发生改变,以避免与并发修改相关的数据完整性问题。从用户的角度来看,主要发生了两项改变
-
当代理离线时,不再可以使用
artemis user
命令进行用户管理。当然,用户仍然可以自由地直接修改此情况下的属性文件。 -
artemis user
命令的参数发生了改变。不再使用类似以下内容./artemis user add --user guest --password guest --role admin
改为使用以下内容
./artemis user add --user-command-user guest --user-command-password guest --role admin
简而言之,使用
user-command-user
代替user
,使用user-command-password
代替password
。user
和password
参数现在都适用于用于向代理发送命令的连接。有关更多详细信息,请参见 ARTEMIS-2893 和 ARTEMIS-3010
-
-
由于 ARTEMIS-2909,“速率”指标已从队列的管理 API 中删除。简而言之,
org.apache.activemq.artemis.core.server.Queue#getRate
方法用于检测慢速消费者,并且设计为仅供内部使用。此外,它过于不透明,无法被远程用户信任,因为它只返回自上次调用以来添加到队列中的消息数量。这里的问题是,调用它的用户不知道它上次是在何时调用的。因此,他们可能获得的是过去 5 分钟或 5 毫秒内添加的消息速率。这会导致不一致且误导性的结果。
用户可以通过三种主要方法跟踪消息生产和消费速率(按推荐顺序)
-
使用指标插件。这是跟踪代理指标功能最丰富且最灵活的方法,尽管它需要工具(例如 Prometheus)来存储指标并显示它们(例如 Grafana)。
-
调用
getMessageCount()
和getMessagesAdded()
管理方法,并将返回的值与检索它们的时间一起存储。时间序列数据库非常适合这项工作。这正是 Prometheus 等工具所做的事情。然后,可以使用 Grafana 等工具将这些数据用于创建信息图表等。当然,可以跳过所有工具,只需进行一些简单的数学运算,根据上次检索计数的时间来计算速率。 -
使用代理的消息计数器。消息计数器是代理提供有关队列历史信息的简单方法。它们提供了与前述解决方案类似的结果,但灵活性较低,因为它们只在代理处于运行状态时跟踪数据,并且没有真正好的绘图选项。
-
29. 2.14.0
29.1. 亮点
-
用于更新转发的管理方法
-
能够“禁用”队列,以便消息不会路由到该队列
-
支持 JVM GC 和线程指标
-
支持通过在
broker.xml
中取消设置来重置队列属性 -
通过从
broker.xml
中删除转发来取消部署转发 -
添加
addressMemoryUsagePercentage
和addressSize
作为指标
29.2. 从 2.13.0 升级
这可能是一个罕见的情况,但无论如何这里还是值得一提。在 2.14.0 之前,如果你在 broker.xml
中为 queue
配置了一个参数(例如 max-consumers
),然后又删除了该设置,你设置的配置值将保留。这在 2.14.0 中通过 ARTEMIS-2797 发生了改变。broker.xml
中没有明确设置的任何值将被重置为地址设置中配置的静态默认值或动态默认值(例如,在本例中为 default-max-consumers
)。因此,请确保在升级之前,任何现有队列的 broker.xml
值中都设置了所有必需的参数。
30. 2.13.0
30.1. 亮点
-
用于地址的重复 ID 缓存的管理方法,用于检查缓存的大小并清除缓存
-
用于检查代理健康状况的命令行
check
工具 -
支持通过
enable-metrics
地址设置禁用每个地址的指标 -
对审计日志记录进行了改进
-
对
HierarchicalObjectRepository
的速度进行了优化,HierarchicalObjectRepository
是用于存储地址和安全设置的内部对象
30.2. 从 2.12.0 升级
版本 2.13.0 添加了新的审计日志记录,该日志记录在 INFO
级记录,并且可能非常冗长。与该新版本一起提供的 logging.properties
已设置为默认情况下过滤掉这些日志。如果你的 logging.properties
未更新,则这些审计日志记录可能会出现在你的控制台和 artemis.log
文件中(假设你使用的是与默认配置类似的日志记录配置)。将以下内容添加到你的 logging.properties
中
# to enable audit change the level to INFO logger.org.apache.activemq.audit.base.level=ERROR logger.org.apache.activemq.audit.base.handlers=AUDIT_FILE logger.org.apache.activemq.audit.base.useParentHandlers=false logger.org.apache.activemq.audit.resource.level=ERROR logger.org.apache.activemq.audit.resource.handlers=AUDIT_FILE logger.org.apache.activemq.audit.resource.useParentHandlers=false logger.org.apache.activemq.audit.message.level=ERROR logger.org.apache.activemq.audit.message.handlers=AUDIT_FILE logger.org.apache.activemq.audit.message.useParentHandlers=false ... #Audit logger handler.AUDIT_FILE=org.jboss.logmanager.handlers.PeriodicRotatingFileHandler handler.AUDIT_FILE.level=INFO handler.AUDIT_FILE.properties=suffix,append,autoFlush,fileName handler.AUDIT_FILE.suffix=.yyyy-MM-dd handler.AUDIT_FILE.append=true handler.AUDIT_FILE.autoFlush=true handler.AUDIT_FILE.fileName=${artemis.instance}/log/audit.log handler.AUDIT_FILE.formatter=AUDIT_PATTERN formatter.AUDIT_PATTERN=org.jboss.logmanager.formatters.PatternFormatter formatter.AUDIT_PATTERN.properties=pattern formatter.AUDIT_PATTERN.pattern=%d [AUDIT](%t) %s%E%n
31. 2.12.0
31.1. 亮点
-
支持SOCKS 代理
-
对 AMQP 提供真正的大消息支持
-
自动创建死信资源,类似于 ActiveMQ 5 的单个死信策略
-
改进的队列创建 API
-
允许用户通过环境变量覆盖 JAVA_ARGS
-
在代理启动期间加载日志时减少堆使用量
-
允许禁用 STOMP
CONNECTED
帧中的server
标头 -
支持将磁盘存储使用百分比作为可导出指标(例如,由 Prometheus 等工具监控)
-
能够为嵌入式 Web 服务器配置“自定义程序”
-
改进了启动
acceptor
时出现错误的日志记录,以便更容易识别出现问题的acceptor
。 -
CLI 现在将读取
broker.xml
以找到需要它的命令的默认connector
URL(例如consumer
、producer
等)。
32. 2.11.0
32.1. 亮点
-
支持追溯地址.
-
使安全管理器可以通过 XML 配置.
-
支持可插拔 SSLTrustManagerFactory.
-
添加对联合队列/地址的插件支持。
-
在LDAPLoginModule 中支持
com.sun.jndi.ldap.read.timeout
。
33. 2.10.0
这主要是一个错误修复版本,其中包含一项影响版本升级的重大依赖关系更改。
33.1. 从 2.9.0 升级
由于 WildFly 依赖关系升级,升级后需要调整代理启动脚本/配置。
33.1.1. 在 *nix 上
在 bin/artemis
中找到此语句
WILDFLY_COMMON="$ARTEMIS_HOME/lib/wildfly-common-1.5.1.Final.jar"
需要将此语句替换为此语句
WILDFLY_COMMON="$ARTEMIS_HOME/lib/wildfly-common-1.5.2.Final.jar"
33.1.2. 在 Windows 上
分别在 etc/artemis.profile.cmd
和 bin/artemis-service.xml
中找到 JAVA_ARGS
的这一部分
%ARTEMIS_HOME%\lib\wildfly-common-1.5.1.Final.jar
需要将此语句替换为此语句
%ARTEMIS_HOME%\lib\wildfly-common-1.5.2.Final.jar
35. 2.8.1
这主要是一个错误修复版本,其中包含一项影响版本升级的重大依赖关系更改。
35.1. 从 2.8.0 升级
由于在 ARTEMIS-2319 上进行的依赖关系升级,升级后需要调整代理启动脚本。
35.1.1. 在 *nix 上
在 bin/artemis
中找到此 if
语句
if [ -z "$LOG_MANAGER" ] ; then # this is the one found when the server was created LOG_MANAGER="$ARTEMIS_HOME/lib/jboss-logmanager-2.0.3.Final.jar" fi
需要将此语句替换为此代码块
if [ -z "$LOG_MANAGER" ] ; then # this is the one found when the server was created LOG_MANAGER="$ARTEMIS_HOME/lib/jboss-logmanager-2.1.10.Final.jar" fi WILDFLY_COMMON=`ls $ARTEMIS_HOME/lib/wildfly-common*jar 2>/dev/null` if [ -z "$WILDFLY_COMMON" ] ; then # this is the one found when the server was created WILDFLY_COMMON="$ARTEMIS_HOME/lib/wildfly-common-1.5.1.Final.jar" fi
请注意,jboss-logmanager
版本已更改,并且还添加了一个新的 wildfly-common
库。
再往下不远处,有以下行
-Xbootclasspath/a:"$LOG_MANAGER" \
此行应更改为
-Xbootclasspath/a:"$LOG_MANAGER:$WILDFLY_COMMON" \
35.1.2. 在 Windows 上
分别在 etc/artemis.profile.cmd
和 bin/artemis-service.xml
中找到 JAVA_ARGS
的这一部分
-Xbootclasspath/a:%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final.jar
需要将此语句替换为此语句
-Xbootclasspath/a:%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.1.Final.jar
36. 2.8.0
36.1. 亮点
-
支持 ActiveMQ5 功能JMSXGroupFirstForConsumer.
-
使用远程地址阐明握手超时错误。
-
支持重复消息检测,与核心版本相同,用于 AMQP 消息。
37. 2.7.0
37.1. 亮点
-
支持来自 5.x 的高级目标选项,如
consumersBeforeDispatchStarts
和timeBeforeDispatchStarts
。 -
添加支持,通过
auto-delete-queues-delay
和auto-delete-addresses-delay
地址设置延迟删除地址和队列。 -
支持记录 HTTP 访问.
-
添加一个 CLI 命令来清除队列。
-
支持通过管理界面操作 PropertiesLoginModule 的用户和角色。
-
实现消费者优先级.
-
支持FQQN,用于生产者。
-
跟踪路由到地址和未路由到地址的消息。
-
支持通过
default-consumer-window-size
地址设置配置默认消费者窗口大小。 -
支持屏蔽
key-store-password
和trust-store-password
,在 management.xml 中。 -
支持来自 5.x 的
JMSXGroupSeq
-1,用于关闭/重置消息组. -
允许配置RMI 注册表端口.
-
支持在核心桥上配置路由类型。
-
将 artemis-native 作为独立项目迁移,名称为 activemq-artemis-native。
-
支持 联合队列和地址。
43. 2.5.0
43.1. 重点
-
等效于 ActiveMQ "Classic" 的虚拟主题命名功能。
-
SSL 证书吊销列表。
-
最新值队列 支持 OpenWire。
-
支持在 bootstrap.xm 和 login.config 中 屏蔽密码。
-
可配置的 代理插件 实现,用于记录各种代理事件(例如
LoggingActiveMQServerPlugin
)。 -
通过
sslProvider
URL 参数,选择使用 OpenSSL 提供程序为 Netty 提供 SSL。 -
增强了队列的消息计数和大小指标。
43.2. 从 2.4.0 升级
-
由于 ARTEMIS-1644 中的更改,任何需要与 HornetQ 和/或 Artemis 1.x 客户端兼容的
acceptor
都需要在acceptor
url 中包含anycastPrefix=jms.queue.;multicastPrefix=jms.topic.
。以前,当代理检测到这些旧类型的客户端时,此前缀会在后台自动配置,但这会破坏某些用例,并且没有可能的解决方法。有关详细信息,请参阅 ARTEMIS-1644。
44. 2.4.0
44.1. 重点
-
通过 XML 配置 JMX,而无需通过命令行或启动脚本使用系统属性。
-
能够使用 JDBC 持久性配置 HA。
-
实现 基于角色的管理对象访问控制。
44.2. 从 2.3.0 升级
-
创建
<ARTEMIS_INSTANCE>/etc/management.xml
。该文件至少应包含以下内容<management-context xmlns="https://activemq.apache.org/schema"/>
这将为 JMX 配置基于角色的授权。在 管理 文档中阅读更多信息。
-
如果已配置,请从
<ARTEMIS_INSTANCE>/etc/bootstrap.xml
中的web
元素中删除 Jolokia war 文件。<app url="jolokia" war="jolokia.war"/>
由于 Jolokia REST 接口现在已集成到控制台 Web 应用程序中,因此不再需要此文件。
如果以下内容不存在,并且您希望部署 Web 控制台,请添加
<app url="console" war="console.war"/>
Jolokia REST 接口 URL 现在位于 http://<host>:<port>/console/jolokia
45. 2.3.0
45.1. 重点
-
关键分析 和代理上的死锁检测
-
支持在 Mac 上使用 Netty 原生 kqueue。
-
最新值队列 支持 AMQP
45.2. 从 2.2.0 升级
-
如果您希望部署 Web 控制台,请在
<ARTEMIS_INSTANCE>/etc/bootstrap.xml
中的web
元素中添加以下内容<app url="console" war="console.war"/>
46. 2.2.0
46.1. 重点
-
使用 STOMP 协议的计划消息。
-
支持 JNDIReferenceFactory 和 JNDIStorable。
-
当 broker.xml 更改 时,能够删除队列和地址。
2.1.0
46.2. 重点
-
支持在 Linux 上使用 Netty 原生 epoll。
-
能够配置任意安全角色映射。
-
AMQP 性能改进。