【发布时间】:2020-09-03 01:40:15
【问题描述】:
我有一个先进先出队列,我正在使用org.springframework.cloud.aws.messaging,这就是我想做的事情:
- 消费消息
- 尝试处理(内在逻辑)
- 如果句柄失败 - 在消息上写入新属性(无需再次将消息发送到队列)
我不想将消息发送到新队列(我需要保持消息的顺序)。 另外,我不想使用死信队列来处理错误(原因同上)。
我想使用消息属性的原因是因为我需要实现内部重试机制,这意味着:在使用消息时,我会检查 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