sqs 在接收消息时不给我 MessageAttributes

sqs does not give me MessageAttributes when receiving message

我写了以下内容API来接收消息:

app.get('/receive', function(req, res) {
    var params = {
        QueueUrl: queueUrl,
        VisibilityTimeout: 600
    };

    sqs.receiveMessage(params, function(err, data) {
        if (err) {
            res.send(err);
        } else {
            console.log('data is ' + JSON.stringify(data));
            res.send(data);
        }
    });
});

我得到的回复如下:

{
    "ResponseMetadata": {
        "RequestId": "id"
    },
    "Messages": [
        {
            "MessageId": "id",
            "ReceiptHandle": "handle",
            "MD5OfBody": "body",
            "Body": "body"
        }
    ]
}

API发送消息格式如下:

 let params = {
                       MessageBody: object,
                       QueueUrl: process.env.queueUrl,
                        MessageAttributes:{
                           "Title":{
                               DataType:'String',
                               StringValue:'Item Id Array',
                           }
                        },
                       DelaySeconds: 0
                   }
                   sqs.send(params, (err, data) => {
                       console.log('------------the send message data is------------',err,data);
                   });

您必须在传递给 receiveMessage 函数的参数中告诉 SQS 您希望接收哪些属性。

因此在您的情况下 params/receive 路由中的定义可能如下所示:

var params = {
    QueueUrl: queueUrl,
    VisibilityTimeout: 600,
    MessageAttributeNames: ["All"],
};

查看以下链接了解更多信息:

  1. JavaScript SQS Example
  2. "Calling the receiveMessage operation" AWS JavaScript SDK doc
  3. 中的例子
  4. "MessageAttributeName.N"参数在AWS SQS API doc

接收所有 SQS 属性 -> .attributeNames(QueueAttributeName.ALL)

接收消息元数据属性 -> .messageAttributeNames("yourMessageAttributeName")

Java/Kotlin

 val request = ReceiveMessageRequest.builder()
                .queueUrl(url)                
                .messageAttributeNames("yourMessageAttributeName")
                .attributeNames(QueueAttributeName.ALL)
                .build()
        val messages = client.receiveMessage(receiveMessageRequest).messages()