【问题标题】:Spring cloud AWS - send message to fifo queueSpring Cloud AWS - 向fifo队列发送消息
【发布时间】:2017-12-06 17:59:00
【问题描述】:

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

失败了

请求必须包含参数MessageGroupId

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

目前有没有办法写入这个庄园的 SQS FIFO 队列,还是我必须恢复为直接使用亚马逊 API?

【问题讨论】:

    标签: amazon-sqs spring-cloud-aws


    【解决方案1】:

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

    查看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;如果可以的话,这将是一个合理的解决方法。

    【讨论】:

    • 干杯,现在我已经使用 AmazonSQS 客户端发送,但继续使用 spring api for listeners
    【解决方案2】:

    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);
    }
    

    【讨论】:

    • 你是对的。我刚刚使用 Spring Cloud AWS 2.2.0.RELEASE 进行了测试,您只需要传递 message-group-id 和 message-deduplication-id 标头,如您所说。
    猜你喜欢
    • 2018-09-26
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多