【问题标题】:Amazon SQS Listener - Consuming message and setting attributes before failing the messageAmazon SQS 侦听器 - 在消息失败之前使用消息并设置属性
【发布时间】:2020-09-03 01:40:15
【问题描述】:

我有一个先进先出队列,我正在使用org.springframework.cloud.aws.messaging,这就是我想做的事情:

  1. 消费消息
  2. 尝试处理(内在逻辑)
  3. 如果句柄失败 - 在消息上写入新属性(无需再次将消息发送到队列)

我不想将消息发送到新队列(我需要保持消息的顺序)另外,我不想使用死信队列来处理错误(原因同上)。

我想使用消息属性的原因是因为我需要实现内部重试机制,这意味着:在使用消息时,我会检查 last_try_timestamp,如果它通过了我的验证,那么我会尝试处理它,否则我会抛出一个错误。 (我知道该消息将继续被消耗直到MaxRetention 并且我很好)

这样的事情可能吗?

 @SqsListener(value = "#{'${my.queue.fifo}'}", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
    public void deadLetterQueueListener(@Headers Map<String, String> headers, String message) throws Exception {
        log.info("consuming message");
        if(!this.handleMessage(message)){
            //Set message attributes (timestamp)
            throw new Exception("Failed to handle message");
        }
    }

【问题讨论】:

    标签: aws-sdk amazon-sqs spring-messaging spring-cloud-aws


    【解决方案1】:

    据我所知,纯粹使用 SQS 是无法做到的。如果您修改消息属性,则需要重新发送此消息以将此更改传播到 SQS。

    它可以在应用程序端实现,方法是将 last_try_timestamp 等元数据存储在 DynamoDB 等外部数据源中,您可以将消息 ID 映射到所需的任何元数据。

    【讨论】:

      猜你喜欢
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多