当前位置: 首页 > 知识库问答 >
问题:

通过SQS lambda发送SQS消息

子车睿
2023-03-14

我有一个连接到lambda的种子指示符信息qs-dev.fifo队列(fifo)。我想在种子指示信息QS-dev-d13dfe0lambda中向评估配置SQS dev标准队列发送一条消息。但没有发送/接收任何消息。然而,如果我尝试从非SQS连接的lambda(通过AppSync)发送它,它会工作。

我查过:

  • lambda有权发送SQS消息(您可以在那里看到)
  • 由于我已成功地从另一个lambda(非SQS)向标准队列发送消息,因此正确配置了EvaluationConfigSQS dev标准队列
  • SQS URL是否正确
  • 控制台中不会显示任何错误
  • async/await的位置正确(我试过使用和不使用它们)

以下是试图分派内容的SeedSignatorInformationSQS-dev-d13dfe0 lambda的CloudWatch日志:成功发送到正确的网址,JSON解析为字符串,但什么都没有。

这是CloudWatch日志:您可以看到<代码>种子指示信息QS-dev-d13dfe0成功地从另一个lambda函数接收消息并对其进行处理,但不会发送更多消息。

种子指示信息QS-dev-d13dfe0中未报告任何错误

以下是EvaluationConfigSQS-dev-6da8b90的权限(EvaluationConfigSQS dev标准队列触发的lambda)

这是被调度的JS(我使用了一个中介模式,它成功地被调度了,你可以在上面的“调度创建的机构类”日志中看到它)。我还打印了URL,并验证了它实际上是与之对应的URL。

export async function institutionClassCreatedEventHandler(
  evt: InstitutionClassCreatedEvent
) {
  const json = JSON.stringify({
    ...evt,
    type: "CLASS_CREATED",
  });


  sqsDispatchMessage(
    "InstitutionClassCreatedEvent",
    evt.tenantId + evt.subject.id,
    json,
    Config.SQS.evaluationConfigSQS.url,
    false
  );
}

这是sqsDispatchMessage函数。正如您所看到的,有一个catch块,每当出现错误时,它就会将我打印出来(并且可以正常工作)。但到目前为止,还没有记录到任何错误。

export async function sqsDispatchMessage(
  eventName: string,
  uniqueId: string,
  jsonObjStringifiedToSend: string,
  sqsURL: string,
  isFifoQueue: boolean = true
) {
  try {
    await sqs
      .sendMessage({
        MessageAttributes: {
          EventName: {
            DataType: "String",
            StringValue: eventName,
          },
        },
        ...(isFifoQueue && { MessageGroupId: eventName }),
        MessageBody: jsonObjStringifiedToSend,
        QueueUrl: sqsURL,
        ...(isFifoQueue && { MessageDeduplicationId: uniqueId }),
      })
      .promise();
  } catch (e) {
    console.error(`Error While Sending the ${eventName}`);
    console.error(e.message);
    console.log(jsonObjStringifiedToSend);
  }
}

有什么想法吗?这有可能吗?


共有1个答案

廖弘量
2023-03-14

问题出在我的调度员:

以前是这样的:


export async function dispatchOfEvents({
  type,
  evtArgs,
}: MediatorEvents): Promise<void> {
  logTime(type);
  (events as any)[type].forEach((evt: Function) => {
    evt(evtArgs);
  });
}

我把它改成:

export async function dispatchOfEvents({
  type,
  evtArgs,
}: MediatorEvents): Promise<void> {
  logTime(type);
  const evts: Promise<any>[] = [];
  for (const evt of (events as any)[type]) {
    evts.push(evt(evtArgs));
  }
  await Promise.all(evts);
}
 类似资料:
  • 我无法通过AWS Java SDK在SQS队列上发送消息。以下是我正在使用的代码: 此代码段抛出消息:我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅维修文档 在SDK文档中,没有提到如何签署请求。另外,为了进行身份验证,我导出了环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,其中包含AWS ACCESS K

  • 我正在开发一个NativeScript Android应用程序,其中我希望用户能够在按下一个按钮后打开WhatsApp联系人(只知道电话号码)。我目前使用Nativescript-open-app打开WhatsApp。是否也可以打开对话? 要打开WhatsApp,我使用以下代码(也许可以修改“com.WhatsApp”?):

  • 我想通过javascript代码发送gcm消息。为此,我们需要发布一个json对象。 gcm文档:http://developer.android.com/google/gcm/adv.html.中给出了url和json对象格式 出于测试目的,我编写了一个完美运行的Java代码。但是爪哇脚本代码不起作用。如果有人有一些示例工作代码(gcm的爪哇脚本),请发布。 脚本代码 :

  • 我现在已经在我的应用程序中设置了Firebase通知,当我发送消息时,消息会发送给我的应用程序的所有用户。(我目前通过Firebase控制台发送消息。我想用另一种不涉及Firebase控制台的方式发送推送通知,我相信HTTP Post是一种简单的方式。如何使用HTTP POST远程发送推送通知?

  • 我正在尝试使用Postman通过云消息服务发送一次推送通知。 这是一个用于相同目的的工作命令,我将其用作参考。 到目前为止我所做的。。 1-适当设置标题 2-在Body,我使用 执行时,我返回

  • 我正在尝试为Web设置Firebase云消息传递。我成功地对其进行了正确初始化并获得了令牌: manifest.json与gcm_sender_id 我可以看到我在控制台中得到令牌,所以我试图验证它,并通过邮递员发送我的第一个通知-这里是留档。 发布网址:https://fcm.googleapis.com/v1/projects/PROJECTID/messages:发送授权:无授权 标题 Bo