【问题标题】:Unable to send messageAttributes to AWS SQS using node js无法使用节点 js 将 messageAttributes 发送到 AWS SQS
【发布时间】:2020-02-26 17:39:16
【问题描述】:

我试图使用 Node Js 向 AWS SQS 发送消息。为此,我安装了 npm 包 aws-sdk。我需要发送一个 json 数组作为消息属性,它的格式是

{"Header": {"OrganizationName": "testOrg","TYPE": "TestMsg", "UserName": "TestUser"}}

但是这种格式不允许我发送消息

    var params = {
      DelaySeconds: 10,
      MessageAttributes: {
        "Title": {
          DataType: "String",
          StringValue: "The Whistler"
        },
        "Author": {
          DataType: "String",
          StringValue: "John Grisham"
        },
        "WeeksOn": {
          DataType: "Number",
          StringValue: "6"
        }
      },
      MessageBody: "Information about current NY Times fiction bestseller for week of 12/11/2016.",
      // MessageDeduplicationId: "TheWhistler",  // Required for FIFO queues
      // MessageId: "Group1",  // Required for FIFO queues
      QueueUrl: "SQS_QUEUE_URL"
    };
sqs.sendMessage(params, function(err, data) {

  if (err) {

   console.log("Error", err);

  } else {

    console.log("Success", data.MessageId);

  }

如何在消息属性中发送 JSON 数组?

【问题讨论】:

  • 你遇到了什么错误?

标签: node.js amazon-web-services amazon-sqs


【解决方案1】:

该格式是正确的,我可以确认我已使用适用于 NodeJS 的 SDK 使用该格式成功发送了 messageAttributes。

您可能会发现问题出在接收方。除非您在 ReceiveMessageRequest 的 messageAttributeNames 中指定要接收的属性,否则接收方不会获取属性。执行此操作的特定语法因语言 SDK 而异,在 Java 和 Swift SDK 上,您可以提供“All”作为 attributeNames 来获取所有属性。对于我的 Swift SDK,我使用 receiveMsgRequest.messageAttributeNames = ["All"] 指定了这个,然后我开始成功接收属性。

另外,不要将message.attributes 与接收方的message.messageAttributes 混淆。前者用于系统属性。后者是你想要的。

【讨论】:

    猜你喜欢
    • 2019-04-15
    • 1970-01-01
    • 2021-07-07
    • 2023-02-10
    • 2021-10-17
    • 2017-02-01
    • 2015-04-06
    • 2017-09-15
    • 2016-12-13
    相关资源
    最近更新 更多