我的团队创建了一个无服务器API(使用Amazon Lambda),该API通过NestJS CQRS包实现了CQRS和事件源。
存储聚合事件时,将运行Saga(),它可以触发相关方法。在此Saga中,我们尝试将消息发送到Amazon的SQS服务。
脱机运行Lambda函数时,消息成功结束在(在线)队列中,但是一旦我们部署了该函数并对其进行了测试,就无法越过SQS.sendMessageRequest()
传奇:
@Saga()
aggregateCreated = (events$: Observable<any>): Observable<AggregateCommand> => {
return events$.pipe(
ofType(AggregateCreatedEvent),
map(async (event: AggregateCreatedEvent) => {
const result = this.queueService.sendMessage(
"http://XXXXXXX", { test: "MessageContent });
await Promise.all([result]);
return;
}),
flatMap(c => c)
);
}
客户端类的构造函数:
constructor() {
this.client = new SQS();
}
用于发送到队列的类方法:
async sendMessage(queueUrl: string, message: IQueueMessage, endpoint?: string): Promise<string> {
Logger.log(`Sending message to ${queueUrl}`);
const client = new SQS();
let result: PromiseResult<SendMessageResult, AWSError>;
try {
result = await client.sendMessage({ QueueUrl: queueUrl, MessageBody: JSON.stringify(message.body) }).promise();
} catch (err) {
Logger.error(`Could not send message to ${queueUrl}`, err);
throw err;
}
console.log(result)
return result.MessageId;
}
日志显示Sending message to https://XXXXXXX
,然后是应用程序其他部分的日志,而我们预计SQS服务会做出响应/错误。