spring-boot - SQSListener 缺少消息 ID
问题描述
我有一个 SQSListener 设置,虽然它接收有效负载,但它缺少所消费消息的 messageId,我做错了什么吗?,下面是我的代码,
@SqsListener(value = "${test-queue-url}", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
public void listen(Acknowledgment acknowledgment, String message, String messageId) {
// messageId == null here
LOG.info(messageId);
}
解决方案
将我的代码更改为并从标题中提取值
@Async
@SqsListener(value = "${queue-url}", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
public void listen(Acknowledgment acknowledgment, String message, @Headers MessageHeaders headers) throws ExecutionException, InterruptedException {
String messageId = (String) headers.get("MessageId");
acknowledgment.acknowledge().get();
}
推荐阅读
- google-apps-script - 如何使用 Google Script 获取附件的更多详细信息?
- api - 作为 G Suite 管理员,我能否以任何方式监控已访问 Google API(Gmail 等)的用户帐户列表
- asp.net-mvc - 不在 node_modules 文件夹中加载脚本
- java - 对托管在 Centos 虚拟机中的 Spring Boot Rest API 端点的第一个请求显示 ERR_EMPTY_RESPONSE?
- reactjs - 只用 react-hooks 重新渲染一个孩子
- r - 用 R 读取和重建对称矩阵
- spring-boot - 如何在手动确认模式下在 RabbitListenerErrorHandler 中重新排队或拒绝?
- c++ - 使用 std::string 作为缓冲区有缺点吗?
- java - 无法使用 Apache POI 写入和保存 XLSM 文件
- azure-devops - 如何从 dist 文件夹下载使用 azure-pipelines 中的 gulp 脚本构建的工件