将消息从Saga发送到SQS队列

时间:2019-07-09 13:10:02

标签: typescript aws-lambda amazon-sqs cqrs nestjs

我的团队创建了一个无服务器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服务会做出响应/错误。

0 个答案:

没有答案