我的 SQSListener returns 正文作为 messageID,以及如何使用 QueueMessagingTemplate Spring 引导发送 MessageId?
My SQSListener returns body as messageID, And How do I get send MessageId with QueueMessagingTemplate Spring Boot?
我有 2 个关于 Spring AWS-SQS sdk 的问题,(或者我做错了)。
首先是我之前使用了CLI,成功获取到发送消息示例的消息Id:
aws sqs send-message --queue-url https://sqs.us-west-2.amazonaws.com/testqueue --message-body hooray
'{
"MD5OfMessageBody": "d3101ad",
"MessageId": "jdhj-933"
}
现在我尝试使用 spring-cloud-starter-aws-messaging
并设置了一个像这样的队列消息传递模板
private final QueueMessagingTemplate queueMessagingTemplate;
public SqsQueueService(@Qualifier("amazonSQSAsync") final AmazonSQSAsync amazonSQS) {
this.queueMessagingTemplate = new QueueMessagingTemplate(amazonSQS);
}
public void sendMessage(String queueName, String queueMessage) {
Map<String, Object> headers = new HashMap<>();
queueMessagingTemplate.convertAndSend(queueName, queueMessage, headers);
}
我似乎可以使用 queueMessagingTemplate.convertAndSend(queueName, queueMessage, headers);
获取已发送消息的消息 ID
我需要 messageId 来完成一些业务逻辑。
第二个问题是我的监听器可以接收消息,但是 messageID 也为空;
@Async
@SqsListener(value = "${notification.sqs-queue-url}", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
public void listen(Acknowledgment acknowledgment, String message, String messageId) {
//messageId is equal to message here. which is wrong for me
}
消息始终等于 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();
}
然后从 headers 映射中提取消息 ID
我有 2 个关于 Spring AWS-SQS sdk 的问题,(或者我做错了)。
首先是我之前使用了CLI,成功获取到发送消息示例的消息Id:
aws sqs send-message --queue-url https://sqs.us-west-2.amazonaws.com/testqueue --message-body hooray
'{
"MD5OfMessageBody": "d3101ad",
"MessageId": "jdhj-933"
}
现在我尝试使用 spring-cloud-starter-aws-messaging
并设置了一个像这样的队列消息传递模板
private final QueueMessagingTemplate queueMessagingTemplate;
public SqsQueueService(@Qualifier("amazonSQSAsync") final AmazonSQSAsync amazonSQS) {
this.queueMessagingTemplate = new QueueMessagingTemplate(amazonSQS);
}
public void sendMessage(String queueName, String queueMessage) {
Map<String, Object> headers = new HashMap<>();
queueMessagingTemplate.convertAndSend(queueName, queueMessage, headers);
}
我似乎可以使用 queueMessagingTemplate.convertAndSend(queueName, queueMessage, headers);
我需要 messageId 来完成一些业务逻辑。
第二个问题是我的监听器可以接收消息,但是 messageID 也为空;
@Async
@SqsListener(value = "${notification.sqs-queue-url}", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
public void listen(Acknowledgment acknowledgment, String message, String messageId) {
//messageId is equal to message here. which is wrong for me
}
消息始终等于 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();
}
然后从 headers 映射中提取消息 ID