ActiveMQ 阿尔忒弥斯

ActiveMQ Artemis

我正在尝试实施 ActiveMQ Artemis。 Artemis 是 ActiveMQ 的一部分吗?

我正在尝试制作周期性任务delay-and-schedule-message-delivery ActiveMQ, but the only thing which is working is delayed scheduled-messages。文档中有关于核心API的说明:

Scheduled messages can also be sent using the core API, by setting the same property on the core message before sending.

所以这可能并不意味着我可以设置 ActiveMQ 属性。

我需要任何具有这些功能的消息队列:

  1. 重复任务(ActiveMQ“经典”)
  2. 重复任务检测(ActiveMQ Artemis)
  3. 数据持久化
  4. 消息修改 - 从队列中删除或更改重复延迟
  5. Spring 整合

Apache ActiveMQ Artemis 是一个消息代理,它是 ActiveMQ 项目的一部分。但是,它与“经典”ActiveMQ 代理代码库是分开的。它基于更新的、基本无阻塞的设计,它支持所有协议和与 ActiveMQ 5.x 相同的大部分功能。 ActiveMQ 社区当前的目标是让 Artemis 成为 6.x 版本的 ActiveMQ。

  1. Repeating tasks (ActiveMQ "Classic")

可以使用定时发送,但这仅适用于单封邮件。一旦该消息被传递和消费,它就消失了,这意味着您需要发送另一条预定的消息。没有自动重复发送相同的消息。

quartz scheduler 之类的东西在这里可能是一个很好的解决方案,因为您可以用它来安排所有任务,并且计划的任务可以将消息发送到由分布式工作人员监视的队列。通过这种方式,您可以将调度与工作分配分开。

  1. Duplicate task detection (ActiveMQ Artemis)

Artemis 支持一种称为“最后值队列”的东西,您可以在其中将消息的特殊 属性 设置为特定值(例如任务 ID),并且每当您将消息发送到队列时相同的值,它将 替换 现有消息为您发送的消息。换句话说,它始终具有您发送的 last 值。您可以在 Artemis documentation on last-value queues.

中阅读更多相关信息

还有经典的重复检测,您可以在其中为消息设置重复 ID,如果代理看到重复的重复 ID,它将丢弃具有重复重复 ID 的消息。您可以在 Artemis documentation on duplicated detection.

中阅读更多相关信息
  1. Data persistence

默认情况下,任何标记为 durable(或 JMS 术语中的 persistent)的发送到持久队列(默认情况下队列是持久的)的消息都将持久保存到磁盘。

  1. Message modification - remove from the queue or change repeating delay

队列中的消息是不可变的,因此您无法从技术上编辑它们,但您可以使用最后值队列的语义来获得类似的行为(例如,发送具有相同最后值的修改消息 属性,它将替换现有的消息)。

  1. Spring integration

ActiveMQ Artemis 是一个 JMS 实现,因此 Spring 中可用的所有 JMS 集成 类 都可以正常工作。