Моя команда создала бессерверный API (с Amazon Lambda), который реализует CQRS и источник событий с пакетом NestJS CQRS.
При сохранении статистического события запускается Saga (), который может запускать связанные методы. В этой саге мы пытаемся отправить сообщение в сервис SQS Amazon.
При запуске функции 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.