为什么@ssut/nestjs-sqs应该在服务文件中使用而不是在控制器中?

问题描述 投票:0回答:2

我开始使用 @ssut/nestjs-sqs ,我对它的工作原理有点困惑。
根据文档,您需要在提供程序中拥有此代码:

        @SqsMessageHandler(/** name: */ 'queueName', /** batch: */ false)
        public async handleMessage(message: AWS.SQS.Message) {  
         // Logic to handle the message
        }

我希望在控制器中使用消息,然后将数据发送给提供者。但如果我尝试将此方法放入控制器中,我会得到

[SqsService] No metadata found for: <my_sqs_queue>

为什么messageHandler方法只能在Service文件中起作用,而不能在控制器中起作用?

controller nestjs amazon-sqs
2个回答
3
投票

这是由于 Nest 的

DiscoveryService
的工作方式以及
SqsService
如何使用
DiscoveryService
。有一个
Discover#providerMethodsWithMetaAtKey
方法 only 查看提供者,因此当您将该装饰器添加到控制器时,发现服务将永远不会看到它,并且 sqs 服务将无法对其进行操作。


0
投票

您可以解决注册提供商和 .module 类消费者的问题:OrderDetailConsumerService 和我的示例

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.