【问题标题】:Lambda : Send a message to SQSLambda : 向 SQS 发送消息
【发布时间】:2018-08-08 04:15:18
【问题描述】:

我尝试升级我的一个 lambda,但无法使其工作... 所以我有一个 lambda 来管理我的条带付款,一切正常。

我想在付款正常时向 SQS 发送消息。

你可以在下面看到我的 lambda 函数:

const stripe = require('stripe')("sk_test_xXxXxXxXxX");
const ApiBuilder = require('claudia-api-builder');
const querystring = require('querystring');
var api = new ApiBuilder();

var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'eu-west-1'});
var queueUrl = 'https://sqs.eu-west-1.amazonaws.com/xXXxXXxXXx/xXxXxX-new-site.fifo';



api.post('/stripe',request => {
    console.log(request);
    let params = querystring.parse(request.body);
    console.log(params);

    return stripe.charges.create({
      amount: params.package,
      currency: 'eur',
      description: `12 month charge`,
      source: params.stripeToken,
      receipt_email: params.email,
      metadata: {domain_name: params.domain_name, email: params.email},
    }).then(charge => {
        var responseBody = {
            message: ''
        };

        var responseCode = 200;

        var message = {
            MessageBody: "TEST",
            QueueUrl: queueUrl
        };
        console.log(message);

        sqs.sendMessage(message, function(err, data) {
            console.log(err);
            console.log(data);

            if (err) {
                console.log('error:', "failed to send message" + err);
                var responseCode = 500;
            } else {
                console.log('data:', data.MessageId);
                responseBody.message = 'Sent to ' + queueUrl;
                responseBody.messageId = data.MessageId;
            }
            var response = {
                statusCode: responseCode,
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(responseBody)
            };

            return response;
        });
      return charge;
    }).catch((err) => {
        return err;
    });
});

module.exports = api;

我在第 25 行和第 59 行之间添加了代码。

在 cloudwatch 日志中,我可以看到第 36 行 (console.log(message);) 的控制台输出,但第 39 行没有。

感谢您的帮助:)

【问题讨论】:

    标签: lambda stripe-payments amazon-sqs


    【解决方案1】:

    我在 AWS Lambda 方面不是很有经验,但我看到您使用回调 (sqs.sendMessage()) 执行异步代码并立即调用 return charge 而无需等待此类执行的结果 (sqs.sendMessage())

    我不太确定 Lambda 应该返回什么(可能是 response,而不是 charge),但是如果您想在 sqs.sendMessage() 调用中查看您的 console.log 结果,代码可能类似于这个:

        // above code ommitted
    }).then(async charge => {
            //code ommitted
            console.log(message);
    // if Lambda supports async/await OR return this promise and process it in next chain
            await sqs.sendMessage(message)
                 .promise()
                 .then(data=>{
                 // process data here
                 })
                 .catch(err=>{
                 // process error here
                 })
          return charge;
        }).catch((err) => {
            return err;
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      相关资源
      最近更新 更多