【问题标题】:API gateway to SNS connection issue using message attributes使用消息属性的 API 网关到 SNS 连接问题
【发布时间】:2022-10-15 00:33:22
【问题描述】:

大家好,

我发现使用节点 js 代码通过 API 网关 POST 到 SNS 使用在 SQS 和 SNS 中设置为 service_type 的过滤策略(消息属性)发布消息有困难

所以应该根据我拥有的过滤器将消息发送到特定队列,我当前的设置如下

映射模板

Action=Publish##
&TopicArn=$util.urlEncode('arn:....fifo')##
&Message=$util.urlEncode($input.json('$.Message'))##
&Subject=$util.urlEncode($input.json('$.Subject'))##
&MessageAttributes.member.1.Name=service_type##
&MessageAttributes.member.1.Value.DataType=String##
&MessageAttributes.member.1.Value.StringValue=$util.escapeJavaScript($input.json('$.ServiceTypeValue'))##


URL 查询字符串参数

MessageAttribute.entry.1.Name   'service_type'       
MessageAttributes.entry.1.Value.DataType    'String'         
MessageAttributes.entry.1.Value.StringValue 'order'

节点js代码

const axios = require('axios');

let url = `apiurl`;
//let message_attribute ={ message_attribute:'order'};
let payload = {
  message: 'First Message',
  MessageAttributes: {
    service_type: {
      DataType: 'String',
      StringValue: 'order',
      BinaryValue: null
    }
  }
};

axios
  .post(url, payload)
  .then(function (response) {
    console.log(response.data);
  })
  .catch(function (error) {
    console.log(error);
  });

您的帮助将不胜感激

【问题讨论】:

    标签: amazon-web-services amazon-sqs amazon-sns amazon-api-gateway aws-sqs-fifo


    【解决方案1】:

    对于 API Gateway 和 SQS 集成,创建如下响应模板(OpenAPI 规范 yaml),

            requestTemplates:
              application/x-www-form-urlencoded: "Action=SendMessage&MessageBody=$util.base64Encode($input.body)
                &MessageAttribute.1.Name=type&MessageAttribute.1.Value.StringValue=xyz&MessageAttribute.1.Value.DataType=String
                &MessageAttribute.2.Name=encoding&MessageAttribute.2.Value.StringValue=base64&MessageAttribute.2.Value.DataType=String
                &MessageAttribute.3.Name=sourceIp&MessageAttribute.3.Value.StringValue=$context.identity.sourceIp&MessageAttribute.3.Value.DataType=String
                &MessageAttribute.4.Name=apiTimestamp&MessageAttribute.4.Value.StringValue=$context.requestTimeEpoch&MessageAttribute.4.Value.DataType=Number"
    

    下面是与 SNS 的集成(笔记:将{{topicArn}}替换为SNS主题的ARN),

    requestTemplates:
              application/x-www-form-urlencoded: "Action=Publish&Message=$util.base64Encode($input.body)
                &TopicArn={{topicArn}}
                &MessageAttributes.entry.1.Name=type&MessageAttributes.entry.1.Value.StringValue=xyz&MessageAttributes.entry.1.Value.DataType=String
                &MessageAttributes.entry.2.Name=encoding&MessageAttributes.entry.2.Value.StringValue=base64&MessageAttributes.entry.2.Value.DataType=String
                &MessageAttributes.entry.3.Name=sourceIp&MessageAttributes.entry.3.Value.StringValue=$context.identity.sourceIp&MessageAttributes.entry.3.Value.DataType=String
                &MessageAttributes.entry.4.Name=apiTimestamp&MessageAttributes.entry.4.Value.StringValue=$context.requestTimeEpoch&MessageAttributes.entry.4.Value.DataType=Number"
    

    【讨论】:

      猜你喜欢
      • 2019-03-23
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多