【问题标题】:AWS SQS: how do we consume messageAWS SQS:我们如何使用消息
【发布时间】:2020-10-28 00:04:44
【问题描述】:

我想将我的一个同步 API 转换为异步。我相信队列是做到这一点的一种方法。就像发布者会将消息推送(同步)到队列中,消费者 API 将从队列中使用该队列。

我很想知道使用 AWS SimpleQueueService 消息的正确方法是什么。队列可以调用 API 以将消息传递给它,或者唯一的方法是轮询队列。但我相信轮询会让我们的系统忙于等待,所以最好队列将消息传递给 API。

有什么方法可以做到这一点?

【问题讨论】:

    标签: java amazon-web-services message-queue amazon-sqs polling


    【解决方案1】:

    如果你想从 SQS 消费,你有以下方法:

    如果您打算检索以获取回复,您也可以利用virtual queues

    【讨论】:

    • 我们也可以使用 CLI 来发送和接收消息。使用“接收消息”
    【解决方案2】:

    在 application.yml 中

    sqs:
    region: ap-south-1
    accessKeyId: arunsinghgujjar
    secretAccessKey: jainpurwalearunsingh/saharanpursepauchepuna
    cloud:
    aws:
    end-point:
    uri: https://arun-learningsubway-1.amazonaws.com/9876974864/learningsubway_SQS.fifo
    queue:
    max-poll-time: 20
    max-messages: 10
    fetch-wait-on-error: 60
    enabled: true
    content: sqs
    

    编写 SQS 客户端

    public String sendMessage(MessageDistributionEvent messageDistributionEvent) {
    SendMessageResponse sendMessage = null;
    try {
    Map<String, MessageAttributeValue> attributes = new HashMap<>();
    
    String recepList = "";
    for (Integer myInt : messageDistributionEvent.getRecipients()) {
    recepList = recepList + "_" + myInt;
    }
    SendMessageRequest sendMsgRequest = SendMessageRequest.builder()
    .queueUrl(url)
    .messageBody(messageDistributionEvent.getChannelId() + "_" + messageDistributionEvent.getMessageId() + "" + recepList)
    .messageGroupId("1")
    .messageAttributes(attributes)
    .build();
    sendMessage = sqsClient.sendMessage(sendMsgRequest);
    } catch (Exception ex) {
    log.info("failed to send message :" + ex);
    }
    return sendMessage.sequenceNumber();
    }
    

    从队列中读取消息

    ReceiveMessageRequest receiveMessageRequest = ReceiveMessageRequest.builder()
    .queueUrl(url)
    .waitTimeSeconds(maxPollTime)
    .maxNumberOfMessages(maxMessages)
    .messageAttributeNames("MessageLabel")
    .build();
    List<Message> sqsMessages = sqsClient.receiveMessage(receiveMessageRequest).messages();
    

    参考 https://learningsubway.com/read-write-data-into-aws-sqs-using-java/

    【讨论】:

      猜你喜欢
      • 2019-11-11
      • 1970-01-01
      • 2018-08-03
      • 2021-08-10
      • 2022-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      相关资源
      最近更新 更多