如何在写入 AWS SQS 队列时获取一段可识别的数据?
How to get a piece of identifiable data when writing to an AWS SQS Queue?
我有一个应用程序需要跟踪发送到 SQS 队列的消息的事务 ID(或类似的东西)。
如果我发送以下class,我如何通过查询队列获得一些可识别的数据?
@Component
public class SqsQueueDao {
private static final Logger LOGGER = LoggerFactory.getLogger(SqsQueueDao.class);
private final QueueMessagingTemplate queueMessagingTemplate;
@Autowired
@Qualifier("awsClient")
AmazonSQSAsyncClient amazonSQSAsyncClient;
public SqsQueueDao(AmazonSQSAsync amazonSQSAsyncClient) {
this.queueMessagingTemplate = new QueueMessagingTemplate(amazonSQSAsyncClient);
}
//TODO: implement a strategy for identifying the message id
public Long send(String queueName, String message) {
queueMessagingTemplate.convertAndSend(queueName, MessageBuilder.withPayload(message).build());
//return some long identifying data
}
}
SQS 分配消息 ID,但 queueMessagingTemplate.convertAndSend
方法不 return 任何东西。如果您直接使用 SQS 客户端发送消息,那么您将获得一个 SendMessageResult
对象,其中包含消息 ID。但是 SQS 消息 ID 是 String
而不是数字,因此您仍然无法履行与 return 和 Long
的合同。
如果您可以 return String
消息 ID 而不是 Long
,那么代码将如下所示:
public String send(String queueName, String message) {
// Could probably cache this URL instead of looking up each time
String queueUrl = amazonSQSAsyncClient.getQueueUrl(queueName).getQueueUrl();
SendMessageResult result = amazonSQSAsyncClient.sendMessage(queueUrl, message);
return result.getMessageId();
}
我有一个应用程序需要跟踪发送到 SQS 队列的消息的事务 ID(或类似的东西)。
如果我发送以下class,我如何通过查询队列获得一些可识别的数据?
@Component
public class SqsQueueDao {
private static final Logger LOGGER = LoggerFactory.getLogger(SqsQueueDao.class);
private final QueueMessagingTemplate queueMessagingTemplate;
@Autowired
@Qualifier("awsClient")
AmazonSQSAsyncClient amazonSQSAsyncClient;
public SqsQueueDao(AmazonSQSAsync amazonSQSAsyncClient) {
this.queueMessagingTemplate = new QueueMessagingTemplate(amazonSQSAsyncClient);
}
//TODO: implement a strategy for identifying the message id
public Long send(String queueName, String message) {
queueMessagingTemplate.convertAndSend(queueName, MessageBuilder.withPayload(message).build());
//return some long identifying data
}
}
SQS 分配消息 ID,但 queueMessagingTemplate.convertAndSend
方法不 return 任何东西。如果您直接使用 SQS 客户端发送消息,那么您将获得一个 SendMessageResult
对象,其中包含消息 ID。但是 SQS 消息 ID 是 String
而不是数字,因此您仍然无法履行与 return 和 Long
的合同。
如果您可以 return String
消息 ID 而不是 Long
,那么代码将如下所示:
public String send(String queueName, String message) {
// Could probably cache this URL instead of looking up each time
String queueUrl = amazonSQSAsyncClient.getQueueUrl(queueName).getQueueUrl();
SendMessageResult result = amazonSQSAsyncClient.sendMessage(queueUrl, message);
return result.getMessageId();
}