簡體   English   中英

如何在 nodeJS 中獲取 AWS SQS 隊列 ARN?

[英]How to get AWS SQS queue ARN in nodeJS?

我正在嘗試使用基本的客戶端-服務器基礎結構構建應用程序。 服務器基礎設施托管在 AWS 上,當客戶端登錄時,它會向服務器發送消息以設置各種基礎設施注意事項。 其中一個基礎設施是一個 SQS 隊列,客戶端可以從中進行輪詢以從服務器獲取更新(最終我想構建一個推送服務,但我現在不知道怎么做)。

我正在使用節點 AWS SDK 在 NodeJS 中構建此應用程序。我遇到的問題是我需要隊列 ARN 來執行各種操作,例如將 SQS 隊列訂閱到應用程序使用的 SNS 主題,但創建隊列 API 返回隊列 URL,而不是 ARN。 所以我可以使用 getQueueAttributes API 從 URL 獲取 ARN,但它似乎不起作用。 每當我調用它時,我都會得到未定義的響應。 這是我的代碼,請告訴我我做錯了什么:

exports.handler = (event, context, callback) => {

    new aws.SQS({apiVersion: '2012-11-05'}).createQueue({
            QueueName: event.userId
        }).promise()
    )
    .then(data => { /* This has the Queue URL */
        new aws.SQS({apiVersion: '2012-11-05'}).getQueueAttributes({
            QueueUrl: data.QueueUrl,
            AttributeNames: ['QueueArn']
        }).promise()
    })
    .then(data => {
        console.log(JSON.stringify(data)); /* prints "undefined" */
    })
/* Some more code down here that's irrelevant */
}

謝謝!

const AWS = require('aws-sdk');
const sqs = new AWS.SQS();

exports.handler = async(event, context, callback) => {

    var params = {
        QueueUrl: 'my-queue-url',
        AttributeNames: ['QueueArn']
    };

    let fo = await sqs.getQueueAttributes(params).promise();
    console.log(fo);
};

它打印了

{
    ResponseMetadata: { RequestId: '123456-1234-1234-1234-12345' },
    Attributes: {
        QueueArn: 'arn:aws:sqs:eu-west-1:12345:my-queue-name'
    }
}

在 Ersoy 的幫助下,我意識到我正在使用塊格式化(使用 {})來編寫我的 Promise,但我從未從這些塊中返回任何東西。 我原以為Promise塊中的最后一個值是默認的返回值,但似乎並非如此。 當我在 SQS API 命令之前添加return時,它就起作用了(不使用異步/等待)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM