Amazon MQ 消息传输和持久性配置

Amazon MQ Message Delivery and Persistence Configuration

我有一个用例,其中队列需要 24/7 全天候运行,因此冗余是关键,因此需要多 AZ。除此之外,我想确保队列中的消息满足以下要求,但我之前从未配置过 AMQ 或 ActiveMQ,所以我有点迷茫。

  1. 消息在队列重新启动期间保留 = 持久模式
  2. 消息可以被多个消费者读取
  3. 消息在第一次读取(确认)后不会立即离开队列
  4. 可能将消息的生命周期配置为可用一段时间 window,例如 48 小时。

任何关于 XML 配置的示例或指导都可以满足这些要求,这将是非常棒的。我在网上找不到太多关于第 2-4 项的内容。

ActiveMQ

ActiveMQ 是一个符合 JMS 的消息代理。您列出的大多数要求都由生产者方面的属性控制。

我在答案中使用 Java 个片段。

  1. MessageProducer producer = session.createProducer(session.createQueue(queueName)); producer.setDeliveryMode(DeliveryMode.PERSISTENT);

  2. 向多个收件人发送消息是一种 "publisher-subscriber" 模式,而不是 "producer-consumer"。创建一个作为多个客户端订阅目标的主题。否则,您希望每个收件人都有一个队列。 JMS Topic Example.

  3. 在这些选项中选择适合您的模式:https://docs.oracle.com/cd/E19798-01/821-1841/bncfw/index.html。您可能需要 CLIENT_ACKNOWLEDGE 并使用 acknowledge() 方法手动发送确认。在 JMS 会话上设置了确认模式:

    Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);

  4. producer.setTimeToLive(ttl);

Amazon SQS(简单队列服务)

Amazon SQS 也遵守 JMS 协议,因此上面 1、3、4 的 ActiveMQ API 示例对于 SQS 仍然有效,因为 SQSConnection class 扩展了 javax.jms.Connection。请按照 Getting Started 指南了解更多详细步骤。

  1. SQS 提供有关消息持久性的保证 (https://aws.amazon.com/message-queue/features/);

  2. Pub/Sub 模式也适用于 Amazon MQ (https://aws.amazon.com/pub-sub-messaging/)。