本章节为每个版本提供以下信息

  • 指向完整发行说明的链接,其中包含版本中解决的所有问题。

  • 简要的“亮点”列表(如果适用)。

  • 如果需要,从先前版本升级时所需的特定步骤。

如果升级跨越多个版本,则需要按顺序遵循每个版本的步骤。
除了此处概述的任何特定版本升级说明外,请遵循升级代理章节中概述的一般升级程序。

1. 2.38.0

1.1. 亮点

  • 现在支持 WebSocket 压缩。当通过 WebSockets 进行通信时,此压缩可用于 AMQP、STOMP 或 MQTT 透明地使用。

  • ActiveMQServerMessagePlugin现在具有messageMoved()回调。

  • 核心桥接配置现在支持client-id,这将使识别远程代理上的桥接连接变得更加容易。

  • consumer CLI 命令现在支持通过为--receive-timeout指定-1来“永久”使用消息。

  • 身份验证和授权缓存现在具有详细的调试日志记录。

  • 代理管理已进行了一些更新

    • 文档已改进,其中包含更多有关 Jolokia 的示例,以及有关 管理方法选项语法 的新子部分。

    • 现在可以将空“选项”传递给接受它们的 管理方法

    • 返回分页结果的管理方法现在可以通过为页或 pageSize 指定-1来一起返回所有结果。

    • 管理方法选项语法现在支持NOT_EQUALS运算符,以增强管理操作结果的过滤功能。

    • 通过管理创建的转向的配置现在可以通过 JSON 完成。

  • 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,参数retryIntervalMultipliermaxRetryInterval现在将应用于“初始”连接尝试(即通过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 客户端的用例的稳定性改进。

  • 针对开发人员的许多内部“代码整理”改进,使代码库更简单、更一致。

4. 2.35.0

5. 2.34.0

5.2. 从 2.33.0 升级

  • 由于 ARTEMIS-4712LDAPLoginModule中不再支持通过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. 亮点

  • 支持 CLIproducer命令上的 JSON 格式的类型化属性

  • 新的 CLI 命令pwd,用于显示与当前实例相关的目录

  • Maven 物料清单 (BOM) artemis-bom,用于简化集成

  • 计划消息的“FirstMessage”API

  • 新的 “查看”和“编辑” 权限,用于通过broker.xml中的security-settings配置的管理操作

  • bootstrap.xml中配置的嵌入式 Web 服务器的新sslAutoReload参数,用于检测 SSL 存储在磁盘上的更改并自动重新加载

  • 镜像和分页的性能改进

  • 日志记录指标,以降低错过日志中WARNERROR消息的风险。

  • 网络隔离(又名脑裂) 的文档大幅改进

  • 可插拔锁管理器(又名可插拔仲裁投票)已从“实验性”状态中移出,并已准备好投入通用使用

6.2. 从 2.32.0 升级

  • 由于 ARTEMIS-4532,与 MQTT 主题和订阅相关的地址和队列的名称可能会更改。如果同时满足以下两个条件,这将影响 MQTT 用例

    1. 代理配置为使用通配符语法,该语法不匹配MQTT 通配符语法(例如,默认的通配符语法)。

    2. 您在 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-riartemis-lockmanager-apiorg.apache.activemq.artemis.core.config.ha.DistributedLockManagerConfiguration。之前,这些在文档中被标记为“实验性”,并且在名称上严格更改以从概念上阐明其用途。此外,有关高可用性和网络隔离(即脑裂)的文档已得到重大重构,以使其更清晰和更全面。

7. 2.32.0

7.1. 亮点

7.2. 从 2.31.x 升级

  • 由于 ARTEMIS-4501,MQTT 订阅队列将在相应的会话过期时自动删除,无论是基于 MQTT 5 客户端传递的会话过期时间间隔,还是基于为 MQTT 3.x 客户端或未显式传递会话过期时间间隔的 MQTT 5 客户端配置的 defaultMqttSessionExpiryInterval

    在此更改之前,删除订阅队列依赖于通用的 auto-delete-* address-settings

    这些设置现在不再需要。

    改为配置 defaultMqttSessionExpiryInterval

  • 由于 ARTEMIS-3474,以下配置元素已更改其出现位置(例如 broker.xmlbootstrap.xml 等),尽管所有之前的配置目前仍将得到支持

    • masterprimary

    • slavebackup

    • check-for-live-servercheck-for-active-server

    • whitelistallowlist

    • blacklistdenylist

    此外,文档和管理界面中对这些元素的引用也发生了更改。集群拓扑信息(例如,从 listNetworkTopology 返回)将包含充当主服务器的节点的 primary **和** live 条目。

8. 2.31.2

9. 2.31.1

9.1. 亮点

  • 错误修复和组件升级

10. 2.31.0

10.1. 亮点

  • 引入了 交互式 shell 用于运行 CLI 命令,以及 Bash & ZSH 自动完成支持

  • 添加了一个 CLI 集群验证工具来帮助监视代理拓扑。使用 check cluster 命令。

  • queue stat 命令现在能够在使用集群时验证整个集群拓扑上的消息计数。

  • 添加了对代理连接的 AMQP 联邦 支持。

  • MQTT 订阅状态现在已持久化.

  • 显着改进了分页 JDBC 持久性。

  • 将大部分文档从 MarkDown 转换为 AsciiDoc。有关更多详细信息,请参阅 ARTEMIS-4383

  • 许多其他错误修复和改进。

10.2. 从 2.30.0 升级

  • 由于 ARTEMIS-4372 和新 Artemis shell 功能的引入,当您调用 ./artemis 时,它现在将启动新 shell 以浏览 CLI 命令,而不是仅仅输出 help 文本。

11. 2.30.0

11.1. 亮点

  • 此版本主要是错误修复版本,包含一些小改进和一些依赖项升级。有关所有详细信息,请参阅 发行说明

12. 2.29.0

12.1. 亮点

  • 此版本对大型消息进行了广泛的测试和修复,其中一些 JIRA 专注于此主题。有关更多信息,请参阅 发行说明

12.2. 从 2.28.0 升级

  • 由于 ARTEMIS-4151,现在未在 management.xmlrole-accessallowlist 中定义的 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 共享订阅都是空的。当订阅者重新连接时,他们将获得一个新的订阅队列。如果它们不为空,您可以通过管理方式将消息移动到新的订阅队列。

14. 2.27.1

14.1. 亮点

  • 错误修复

  • 通过桥接的 AMQP 大型消息已损坏

  • 大规模事务回滚需要很长时间才能处理

  • 对自动创建和自动删除队列的改进。

15. 2.27.0

15.1. 亮点

  • 2.27.0 引入了一个新的 升级工具 来帮助将您的实例迁移到较新的版本。

  • 客户端和代理现在使用 SLF4J 作为其日志记录 API。

  • 代理分发现在使用 Log4J 2 作为其日志记录实现。

15.2. 从 2.26.0 升级

希望进行日志记录的客户端应用程序现在需要提供适当的 SLF4J 支持日志记录实现,并根据其需要进行适当配置。有关更多信息以及有关使用 Log4J 2 的示例,请参阅 客户端应用程序日志记录

代理分发现在包含并配置 Log4J 2 作为其日志记录实现,有关更多详细信息,请参阅 日志记录。如果要升级现有代理实例而不是创建新实例,则需要对代理现有实例的 /etc 和 /bin 文件进行一些配置等更新。

您可以使用从新下载的代理中获取的新 升级辅助工具 来刷新现有代理实例的各种配置文件和脚本。broker.xml 和数据保持原样。

在运行命令之前,您应该备份现有代理实例。

可以通过从新下载的代理主目录运行 ./artemis upgrade <path-to-your-instance> 来执行该命令。

在刷新文件过程中,大多数对旧配置文件和脚本的现有自定义内容将丢失。因此,您应该将旧配置文件与刷新的配置文件进行比较,然后根据需要移植您可能已进行的任何缺失的自定义内容。升级命令本身会将它更改的旧文件复制到实例目录中的 old-config-bkp. 文件夹中。

同样,如果您已自定义旧的 logging.properties 文件,则可能需要为新的 log4j2.properties 文件准备类似的更改。

还要注意,broker.xml 中的 configuration-file-refresh-period 设置不再涵盖日志记录配置刷新。Log4J 2 具有自己的配置重新加载处理,通过 Log4J 配置文件本身内的 monitorInterval 属性进行配置。创建的默认 <instance>/etc/log4j2.properties 文件具有设置为 5 秒的 monitorInterval 值,以与之前的默认代理行为保持一致。

15.3. 手动更新

或者,除了使用上面概述的升级辅助工具之外,您还可以按照以下步骤手动执行更新,遵循 一般升级步骤 以及以下附加步骤

  1. 应使用 Log4J 2 配置创建新的 <instance>/etc/log4j2.properties 文件。“artemis create” CLI 命令使用的文件可以从以下位置下载:log4j2.properties

  2. 应删除旧的 <instance>/etc/logging.properties JBoss 日志记录配置文件。

  3. 需要相关的启动脚本或配置文件清理:自 2.26.0 以来所需更改的差异文件可从 此处(适用于 *nix)或 此处(适用于 Windows)获取。

16. 2.26.0

16.1. 亮点

  • 错误修复和改进

16.2. 从 2.25.0 升级

  1. 由于ARTEMIS-4006artemis-jms-client-allartemis-jakarta-client-all客户端已从二进制发行版中的lib/client目录中删除。如果您使用这些库,则可以在Maven Central(例如这里)找到它们。有关更多信息,请参阅客户端类路径文档

  2. 我们从代码库和文档中删除了REST接口。如果您仍然需要REST接口,则可以访问仍然可行的最新版本。您仍然可以按照先前文档中的步骤构建和部署该接口。但是,您应该停止使用它,因为它将不再维护。

  3. 由于ARTEMIS-3980,Web内容已从二进制发行版中删除。我们现在将使用根目标重定向Web请求到管理控制台。要在当前实例上启用此新的重定向行为,您必须更新bootstrap.xml。更改

    <web path="web">

    <web path="web" rootRedirectLocation="console">

    如果您以前自定义过索引页面或在web文件夹中添加了自定义内容,请参阅Web服务器文档以获取有关禁用重定向和启用Web内容的更多信息。

17. 2.25.0

17.1. 亮点

  • 分页流控制改进

  • 许多其他错误修复和改进

18. 2.24.0

18.1. 亮点

  • 简化的页面缓存和文件只需读入队列,而无需软缓存。

18.2. 从2.23.0升级

  1. 由于ARTEMIS-3851,为使用CleanSession=1的MQTT 3.x订阅者创建的队列现在是**非持久的**而不是持久的。这可能会影响MQTT客户端的security-settings,这些客户端以前只对其角色具有createDurableQueue。他们现在还需要createNonDurableQueue。同样,这只会对使用CleanSession=1的MQTT 3.x客户端产生潜在影响。

  2. 由于ARTEMIS-3892,分配给队列的用户名将基于**验证后的**用户,而不仅仅是客户端应用程序提交的用户名。这将影响以下用例

    1. login.config配置了GuestLoginModule,导致某些用户在身份验证过程中被分配特定用户名和角色时。

    2. login.config配置了CertificateLoginModule,导致用户被分配与其SSL证书中的主体DN相对应的用户名和角色时。

    在这种情况下,代理将使用此分配的(即验证后的)用户名创建任何与连接关联的队列。在过去,队列的用户名将为空。

19. 2.23.1

19.1. 亮点

  • ARTEMIS-3856 - 无法将通道状态更改为ReadyForWriting:java.util.ConcurrentModificationException

20. 2.23.0

21. 2.22.0

21.1. 亮点

  • cluster-connection上的默认producer-window-size已更改为1MB,以减轻高延迟网络环境中潜在的OutOfMemoryError。

22. 2.21.0

22.1. 亮点

22.2. 从2.20.0升级

  1. 由于XML模式更改以更正不准确的域名,因此需要更新2个文件

    1. etc/bootstrap.xml

    2. 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">
  2. **如果您使用JDBC持久性**,则由于ARTEMIS-3679中的更改,您将需要更新数据库。NODE_MANAGER_STORE上的HOLDER_EXPIRATION_TIME列已从TIMESTAMP更改为BIGINT(或Oracle上的NUMBER(19))。您将必须停止访问该表的任何代理,并将其删除或对您的数据库执行适当的ALTER TABLE语句。如果您删除该表,则它将在代理重新启动时自动重新创建,并使用新的自动生成的节点ID重新填充。

  3. **如果您使用JGroups**,则由于ARTEMIS-2413中的更改,其中JGroups已从3.x更新到5.x,您将需要更新您的JGroups配置。许多协议已经改变,而且没有自动工具可以将旧的配置更新到最新版本,因此请参阅JGroups文档以获取有关新配置的更多详细信息。您可以在JGroups存储库(例如tcp.xmludp.xml)中找到示例配置。

23. 2.20.0

23.1. 亮点

  • 现在需要Java 11。

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. 亮点

25.2. 从2.17.0升级

  1. 由于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节。

  2. 由于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

    当然,您需要调整用户名和密码以及代理和接收器名称,以适合您的环境。

  3. 队列的“速率”指标已通过ARTEMIS-3397从Web控制台中删除。这是对2.16.0中ARTEMIS-2909(在下面的升级说明中引用)的后续操作。“速率”指标在从管理API中删除后错误地显示在Web控制台中。

  4. 由于ARTEMIS-3141ARTEMIS-3128ARTEMIS-3175,任何返回消息数据的“列表”或“浏览”管理方法返回的数据(包括通过Web控制台公开的数据)默认情况下都会被截断。这样做是为了避免大量消息数据造成的负面情况,这些情况可能会对代理稳定性产生负面影响。management-message-attribute-size-limit地址设置控制此行为。如果您希望恢复以前的(并且可能很危险的行为),那么您可以为此指定-1。默认情况下为256

26. 2.17.0

26.1. 亮点

  • 类似于ActiveMQ“经典”版本的消息级授权

  • 现在可以通过管理API获得地址和队列的计数。

  • 现在,您可以通过管理API从磁盘重新加载代理的配置,而无需等待定期磁盘扫描来获取它

  • libaio日志的性能改进。

  • 用于传输消息的新命令行选项。

  • 通配符地址管理器的性能改进。

  • 现在可以掩盖JDBC数据源属性值。

  • 对2.16.0中引入的基于Hawtio 2的Web控制台进行了大量可用性改进

  • 使用基于JSON的配置输入创建核心桥接的新管理方法。

  • Jakarta Messaging 2.0 和 3.0 分别适用于 Jakarta EE 8 和 9 的工件.

27. 2.16.0

27.1. 亮点

  • 可配置的临时队列命名空间

  • AMQP 服务器连接

  • 支持复制的“基本”SecurityManager 实现

  • 支持为单个 STOMP 客户端设置消费者窗口大小

  • 改进的 JDBC 连接管理

  • 基于 Hawtio 2 的全新 Web 控制台

  • 身份验证和授权的性能优化(例如缓存)

  • 支持 JCA 资源适配器中的管理对象,便于部署到第三方 Java EE 应用程序服务器

  • 能够阻止接收器自动启动

27.2. 从 2.15.0 升级

  1. 由于 ARTEMIS-2893,用户管理的实现方式不得不发生改变,以避免与并发修改相关的数据完整性问题。从用户的角度来看,主要发生了两项改变

    1. 当代理离线时,不再可以使用 artemis user 命令进行用户管理。当然,用户仍然可以自由地直接修改此情况下的属性文件。

    2. 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 代替 passworduserpassword 参数现在都适用于用于向代理发送命令的连接。

      有关更多详细信息,请参见 ARTEMIS-2893ARTEMIS-3010

  2. 由于 ARTEMIS-2909,“速率”指标已从队列的管理 API 中删除。简而言之,org.apache.activemq.artemis.core.server.Queue#getRate 方法用于检测慢速消费者,并且设计为仅供内部使用。

    此外,它过于不透明,无法被远程用户信任,因为它只返回自上次调用以来添加到队列中的消息数量。这里的问题是,调用它的用户不知道它上次是在何时调用的。因此,他们可能获得的是过去 5 分钟或 5 毫秒内添加的消息速率。这会导致不一致且误导性的结果。

    用户可以通过三种主要方法跟踪消息生产和消费速率(按推荐顺序)

    1. 使用指标插件。这是跟踪代理指标功能最丰富且最灵活的方法,尽管它需要工具(例如 Prometheus)来存储指标并显示它们(例如 Grafana)。

    2. 调用 getMessageCount()getMessagesAdded() 管理方法,并将返回的值与检索它们的时间一起存储。时间序列数据库非常适合这项工作。这正是 Prometheus 等工具所做的事情。然后,可以使用 Grafana 等工具将这些数据用于创建信息图表等。当然,可以跳过所有工具,只需进行一些简单的数学运算,根据上次检索计数的时间来计算速率。

    3. 使用代理的消息计数器。消息计数器是代理提供有关队列历史信息的简单方法。它们提供了与前述解决方案类似的结果,但灵活性较低,因为它们只在代理处于运行状态时跟踪数据,并且没有真正好的绘图选项。

28. 2.15.0

28.1. 亮点

  • 能够为 security-settings 和 JNDI 查找使用 FQQN 语法

  • 支持在组重新平衡期间暂停调度(以避免潜在的乱序消费)

  • Socks5h 支持

29. 2.14.0

29.1. 亮点

  • 用于更新转发的管理方法

  • 能够“禁用”队列,以便消息不会路由到该队列

  • 支持 JVM GC 和线程指标

  • 支持通过在 broker.xml 中取消设置来重置队列属性

  • 通过从 broker.xml 中删除转发来取消部署转发

  • 添加 addressMemoryUsagePercentageaddressSize 作为指标

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. 亮点

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(例如 consumerproducer 等)。

32. 2.11.0

32.1. 亮点

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.cmdbin/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

34. 2.9.0

这是一个轻量级版本。它包含一些错误修复、一些改进和一项主要的新功能。

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.cmdbin/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. 亮点

37. 2.7.0

37.1. 亮点

38. 2.6.4

此版本主要修复了一些 bug,并进行了一些改进,还包括一些值得注意的新功能。

38.1. 重点

  • 添加了在 producer CLI 命令中设置文本消息内容的功能。

  • 支持在运行时重新加载日志记录配置。

39. 2.6.3

此版本主要修复了一些 bug,并进行了一些改进,但没有实质性的新功能。

40. 2.6.2

此版本是一个 bug 修复版本,没有实质性的新功能或改进。

41. 2.6.1

此版本是一个 bug 修复版本,没有实质性的新功能或改进。

42. 2.6.0

42.1. 重点

43. 2.5.0

43.1. 重点

43.2. 从 2.4.0 升级

  1. 由于 ARTEMIS-1644 中的更改,任何需要与 HornetQ 和/或 Artemis 1.x 客户端兼容的 acceptor 都需要在 acceptor url 中包含 anycastPrefix=jms.queue.;multicastPrefix=jms.topic.。以前,当代理检测到这些旧类型的客户端时,此前缀会在后台自动配置,但这会破坏某些用例,并且没有可能的解决方法。有关详细信息,请参阅 ARTEMIS-1644

44. 2.4.0

44.1. 重点

44.2. 从 2.3.0 升级

  1. 创建 <ARTEMIS_INSTANCE>/etc/management.xml。该文件至少应包含以下内容

    <management-context xmlns="https://activemq.apache.org/schema"/>

    这将为 JMX 配置基于角色的授权。在 管理 文档中阅读更多信息。

  2. 如果已配置,请从 <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. 重点

45.2. 从 2.2.0 升级

  1. 如果您希望部署 Web 控制台,请在 <ARTEMIS_INSTANCE>/etc/bootstrap.xml 中的 web 元素中添加以下内容

    <app url="console" war="console.war"/>

46. 2.2.0

46.1. 重点

2.1.0

46.2. 重点

47. 2.0.0

47.1. 重点

  • 重大更新,涉及对 寻址模型 的重大重构,从而带来以下好处

    • 更简单、更灵活的 XML 配置。

    • 支持额外的消息传递用例。

    • 消除了令人困惑的特定于 JMS 的队列命名约定(例如,“jms.queue.” 和“jms.topic.” 前缀)。

  • 纯粹的消息编码,因此 AMQP 等协议无需将消息转换为“核心”格式,除非绝对必要。

  • "MAPPED" 日志类型,在某些用例中可以提高性能。

48. 1.5.6

48.1. 重点

  • 错误修复。

49. 1.5.5

49.1. 重点

  • 错误修复。

50. 1.5.4

50.1. 重点

  • 支持 Oracle12C 进行 JDBC 持久性。

  • 错误修复。

51. 1.5.3

51.1. 重点

  • 支持代理 XML 配置中的“字节表示法”(例如,“K”、“KB”、“Gb”等)。

  • 重新计算磁盘同步时间的 CLI 命令。

  • 错误修复。

52. 1.5.2

52.1. 重点

  • 支持使用 JDBC 进行分页。

  • 错误修复。

53. 1.5.1

53.1. 重点

  • 支持 AMQP 的出站连接。

  • 错误修复。

54. 1.5.0

54.1. 重点

  • AMQP 性能改进。

  • JUnit 规则实现,以便在测试中轻松配置代理等消息传递资源。

  • 基本的 CDI 集成。

  • 默认情况下,将用户的密码存储为哈希形式。

55. 1.4.0

55.1. 重点

  • 磁盘使用量的“全局”限制。

  • 在运行时检测和重新加载某些 XML 配置更改。

  • MQTT 拦截器。

  • 支持通过 CLI 添加/删除队列。

  • 新的“浏览”安全权限,仅供希望查看消息的客户端使用。

  • 填充 JMSXUserID 的选项。

  • 支持“双重身份验证”,以不同的方式对基于 SSL 和非基于 SSL 的客户端进行身份验证。

56. 1.3.0

56.1. 重点

  • 更好地支持 OpenWire 功能(例如,重新连接、生产者流量控制、优化的确认)。

  • 在运行时重新加载 SSL 密钥库。

  • 初步支持 JDBC 持久性。

  • 支持在最新值队列上计划消息。

57. 1.2.0

57.1. 重点

  • 围绕性能的改进。

  • OSGi 支持。

  • 支持等效于所有 5.x JAAS 登录模块的功能,包括

    • 属性文件

    • LDAP

    • SSL 证书

    • “访客”

58. 1.1.0

58.1. 重点

  • MQTT 支持。

  • 示例现在以编程方式使用 CLI 创建、启动、停止等服务器,反映生产环境中使用的实际情况。

  • CLI 改进。新增了压缩日志的工具,并对用户体验进行了进一步的改进。

  • 可配置的资源限制。

  • 能够禁用服务器端消息负载均衡。

59. 1.0.0

59.1. 重点

  • 捐赠的代码库 作为 ActiveMQ Artemis 发布的首个版本!

  • 与 ActiveMQ "Classic" 相比,它具有许多功能,包括

    • OpenWire 支持

    • AMQP 1.0 支持

    • 基于 URL 的连接

    • 自动创建地址/队列

    • Jolokia 集成