Отправить сообщение из Saga в очередь SQS - PullRequest
0 голосов
/ 09 июля 2019

Моя команда создала бессерверный 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.

...