0

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

  1. 队列重新启动期间消息保留 = 持久模式
  2. 消息可以被多个消费者读取
  3. 消息在第一次读取后不会立即从队列中掉出来(确认)
  4. 可能将消息的生命周期配置为在 48 小时等时间窗口内可用。

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

4

1 回答 1

1

活动MQ

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

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

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

  2. 向多个收件人发送消息是一种“发布者-订阅者”模式,而不是“生产者-消费者”模式。创建一个作为多个客户端订阅目标的主题。否则,您希望每个收件人都有一个队列。JMS 主题示例

  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 类扩展了 javax.jms.Connection。请按照入门指南了解更详细的步骤。

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

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

于 2019-11-20T12:50:14.783 回答