2

我正在使用 spring-cloud-aws 向 SQS FIFO 队列发送消息。

它失败了

请求必须包含参数 MessageGroupId

spring-cloud-aws-messaging 中的 QueueMessagingTemplate 上似乎没有任何地方允许我设置这个强制性 MessageGroupId。

目前有没有办法在这个庄园中写入 SQS FIFO 队列,或者我必须恢复到直接使用亚马逊 API 吗?

4

2 回答 2

10

Spring Cloud AWS 自 2017 年起支持 FIFO 队列,根据:Add Support for FIFO SQS Queues #252

您只需要添加两个必需的参数(messageGroupId 和 messageDeduplicationId),如下例所示:

public void send(String topicName, Object message, String messageGroupId, String messageDeduplicationId) throws MessagingException {
    Map<String, Object> headers = new HashMap<>();
    headers.put("message-group-id", messageGroupId);
    headers.put("message-deduplication-id", messageDeduplicationId);
    messagingTemplate.convertAndSend(topicName, message, headers);
}
于 2019-11-26T18:36:58.207 回答
0

我不相信 spring-cloud-aws 的 1.1.x 版本可能支持 FIFO,因为QueueMessagingTemplate使用QueueMessagingChannel不支持以这种方式配置 SendMessageRequest 的方式。

检查https://github.com/spring-cloud/spring-cloud-aws/blob/master/spring-cloud-aws-messaging/src/main/java/org/springframework/cloud/aws/messaging/core/QueueMessageChannel .java#L78了解详情。

出于这个原因,我已经打开了https://github.com/spring-cloud/spring-cloud-aws/issues/246,但不知道是否会添加支持。

看来我也不能使用自定义QueueMessageTemplate;如果可以的话,这将是一个合理的解决方法。

于 2017-07-13T17:24:02.233 回答