【问题标题】:SQS visibility timeout locks out the entire queue, instead of just that particular messageSQS 可见性超时锁定整个队列,而不仅仅是特定的消息
【发布时间】:2017-11-20 12:38:31
【问题描述】:

我正忙于试验 SQS。据我了解,可见性超时会使其他消费者在可见性超时期间无法使用消息。不过,根据我的经验,情况似乎并非如此。可见性超时似乎使该队列中的 all 消息不可用。

我有确认这一点的代码:

        SendMessageRequest messageRequest = new SendMessageRequest()
            .withMessageBody("first one")
            .withMessageDeduplicationId(UUID.randomUUID().toString())
            .withQueueUrl(queueAddress)
            .withMessageGroupId("test1");

    sqs.sendMessage(messageRequest);

    messageRequest = new SendMessageRequest()
            .withMessageBody("second one")
            .withMessageDeduplicationId(UUID.randomUUID().toString())
            .withQueueUrl(queueAddress)
            .withMessageGroupId("test1");

    sqs.sendMessage(messageRequest);

    ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueAddress);

    new Thread(() -> {
        System.out.println("t1");
        List<Message> messages = sqs.receiveMessage(receiveMessageRequest
                .withMaxNumberOfMessages(1)
                .withMessageAttributeNames("All")
                .withVisibilityTimeout(5)
                .withWaitTimeSeconds(1)
        ).getMessages();
        System.out.println(messages.get(0).getBody());
    }).start();

    new Thread(() -> {
        System.out.println("t2");
        List<Message> messages = sqs.receiveMessage(receiveMessageRequest
                .withMaxNumberOfMessages(1)
                .withMessageAttributeNames("All")
                .withVisibilityTimeout(5)
                .withWaitTimeSeconds(1)
        ).getMessages();
        System.out.println(messages.get(0).getBody());
    }).start();

发生的情况是第二个线程抛出了 IndexOutOfBoundsException。这是因为它没有可用的消息。这确认可见性超时影响整个队列,而不仅仅是消息。

不幸的是,这似乎不符合亚马逊的文档。

如果有人知道为什么会这样,或者我在滥用 SQS SDK,请告诉我 :)

【问题讨论】:

  • 我不介意投反对票 - 但您愿意解释一下原因吗?

标签: java aws-sdk amazon-sqs aws-java-sdk


【解决方案1】:

好吧,看来我无法正确阅读documentation)::

When you receive a message with a message group ID, no more messages for the same message group ID are returned unless you delete the message or it becomes visible.

【讨论】:

    猜你喜欢
    • 2019-11-07
    • 1970-01-01
    • 2015-10-11
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    相关资源
    最近更新 更多