Amazon MQ 消息传输和持久性配置
Amazon MQ Message Delivery and Persistence Configuration
我有一个用例,其中队列需要 24/7 全天候运行,因此冗余是关键,因此需要多 AZ。除此之外,我想确保队列中的消息满足以下要求,但我之前从未配置过 AMQ 或 ActiveMQ,所以我有点迷茫。
- 消息在队列重新启动期间保留 = 持久模式
- 消息可以被多个消费者读取
- 消息在第一次读取(确认)后不会立即离开队列
- 可能将消息的生命周期配置为可用一段时间 window,例如 48 小时。
任何关于 XML 配置的示例或指导都可以满足这些要求,这将是非常棒的。我在网上找不到太多关于第 2-4 项的内容。
ActiveMQ
ActiveMQ 是一个符合 JMS 的消息代理。您列出的大多数要求都由生产者方面的属性控制。
我在答案中使用 Java 个片段。
MessageProducer producer = session.createProducer(session.createQueue(queueName)); producer.setDeliveryMode(DeliveryMode.PERSISTENT);
向多个收件人发送消息是一种 "publisher-subscriber" 模式,而不是 "producer-consumer"。创建一个作为多个客户端订阅目标的主题。否则,您希望每个收件人都有一个队列。 JMS Topic Example.
在这些选项中选择适合您的模式:https://docs.oracle.com/cd/E19798-01/821-1841/bncfw/index.html。您可能需要 CLIENT_ACKNOWLEDGE
并使用 acknowledge()
方法手动发送确认。在 JMS 会话上设置了确认模式:
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
producer.setTimeToLive(ttl);
Amazon SQS(简单队列服务)
Amazon SQS 也遵守 JMS 协议,因此上面 1、3、4 的 ActiveMQ API 示例对于 SQS 仍然有效,因为 SQSConnection class 扩展了 javax.jms.Connection。请按照 Getting Started 指南了解更多详细步骤。
SQS 提供有关消息持久性的保证 (https://aws.amazon.com/message-queue/features/);
Pub/Sub 模式也适用于 Amazon MQ (https://aws.amazon.com/pub-sub-messaging/)。
我有一个用例,其中队列需要 24/7 全天候运行,因此冗余是关键,因此需要多 AZ。除此之外,我想确保队列中的消息满足以下要求,但我之前从未配置过 AMQ 或 ActiveMQ,所以我有点迷茫。
- 消息在队列重新启动期间保留 = 持久模式
- 消息可以被多个消费者读取
- 消息在第一次读取(确认)后不会立即离开队列
- 可能将消息的生命周期配置为可用一段时间 window,例如 48 小时。
任何关于 XML 配置的示例或指导都可以满足这些要求,这将是非常棒的。我在网上找不到太多关于第 2-4 项的内容。
ActiveMQ
ActiveMQ 是一个符合 JMS 的消息代理。您列出的大多数要求都由生产者方面的属性控制。
我在答案中使用 Java 个片段。
MessageProducer producer = session.createProducer(session.createQueue(queueName)); producer.setDeliveryMode(DeliveryMode.PERSISTENT);
向多个收件人发送消息是一种 "publisher-subscriber" 模式,而不是 "producer-consumer"。创建一个作为多个客户端订阅目标的主题。否则,您希望每个收件人都有一个队列。 JMS Topic Example.
在这些选项中选择适合您的模式:https://docs.oracle.com/cd/E19798-01/821-1841/bncfw/index.html。您可能需要
CLIENT_ACKNOWLEDGE
并使用acknowledge()
方法手动发送确认。在 JMS 会话上设置了确认模式:Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
producer.setTimeToLive(ttl);
Amazon SQS(简单队列服务)
Amazon SQS 也遵守 JMS 协议,因此上面 1、3、4 的 ActiveMQ API 示例对于 SQS 仍然有效,因为 SQSConnection class 扩展了 javax.jms.Connection。请按照 Getting Started 指南了解更多详细步骤。
SQS 提供有关消息持久性的保证 (https://aws.amazon.com/message-queue/features/);
Pub/Sub 模式也适用于 Amazon MQ (https://aws.amazon.com/pub-sub-messaging/)。