如果在处理消息时出现异常,我正在尝试将消息移动到 AWS 中的死信队列。
现在我正在删除原始消息并将其显式发送到 DLQ。但是,在执行此操作时,我会丢失消息元信息,例如原始消息 ID、总接收计数、首次发送时间戳等。
下面是相同的代码片段。
@Inject
@Named("demo-queue")
private SimpleQueueService sqsService;
@Inject
@Named("dlq")
private SimpleQueueService dlqService;
.
.
.
List<Message> messages = sqsService.receiveMessages(10, 30, 20);
messages.forEach(
m -> dlqService.sendMessage(m.getBody(),
attr -> {
new SendMessageRequest()
.withMessageAttributes(m.getMessageAttributes())
.withMessageBody(m.getBody());
})
);
messages.forEach(message -> sqsService.deleteMessage(message.getReceiptHandle()));
当 AWS 将消息从原始队列移动到 DLQ 时达到最大接收计数后,它会保留所有提到的属性。有什么方法可以使用 aws-sdk 实现相同的目标吗?
我正在使用带有 Micronaut 的 Agorapulse 库来发送/接收来自 SQS 的消息。