如何将消息发送到队列和发布请求?

时间:2019-06-05 11:03:22

标签: javascript reactjs amazon-web-services amazon-sqs

我有一个将数据发布到数据库的功能。它工作正常,但我也想使用相同的功能来发送消息以触发另一个功能。

我试图同时发送邮件并发出发布请求,但目前只有发布请求有效

这是我的代码的样子

const params = {
    "TableName": "sites",
    "Item": {
      userId: event.requestContext.identity.cognitoIdentityId,
      siteId: siteIdFinal,
      ...data,
      createdAt: Date.now()
    }
  };

  const messageParams = {
    MessageBody: 'Waddup fam',
    QueueUrl: ' https://sqs.eu-west-1.amazonaws.com/106845550704/MyQueue'
  };


  try {
    await dynamoDbLib.call("put", params);
    sqs.sendMessage(messageParams, (err, data) => {
      if (err) {
        console.log("Error: "+err);
      } else {
        console.log("Success: "+data.MessageId);
      }
    });

    return success(params.Item);
  } catch (e) {
    console.log(e);
    return failure({ status: false });
  }

我没有收到任何错误,我只是返回了已发布的数据。我以为我应该收到我发送的消息的消息ID,但我没有收到。每当我查看cloudwatch日志时,都不会发送消息

1 个答案:

答案 0 :(得分:0)

您的异步函数在sendMessage执行回调之前返回params.Item。 保证使用这两种方法都能正确完成

await sqs.sendMessage(messageParams).promise()
    .then(function(data) {
        console.log("Success: "+data.MessageId);
    }).catch(function(err) {
        console.log("Error: "+err);
  });

有关aws-sdk的更多信息和承诺: https://aws.amazon.com/blogs/developer/support-for-promises-in-the-sdk/