NestJS微服务和云部署

时间:2019-12-17 16:21:07

标签: typescript google-cloud-platform microservices backend nestjs

我和一个朋友一起尝试开发一个移动应用程序。我的朋友把手放在Flutter-App(Frontend)上,我使用NestJs做后端工作。我们的目标是在云(GCP / Firebase)中部署微服务架构。

当前体系结构:

  • 前端:Flutter应用,仅与面向公众的API通信。
  • API :是一个NestJS后端,提供了一个由JWT保护的GraphQL端点
  • 数据库服务:所有数据处理均在连接到MongoDB的单独的NestJS微服务(见下文)中完成。
  • 更多服务:将来我想添加更多后端服务,并将它们与API相互连接

我的工作区是nx workspace。因此,我认为我很容易为自己的微服务的每个作业创建多个nestjs应用程序并进行设置。例如,前面提到的使用Nest microservice functionality

的数据库服务

在我的本地计算机上,它可以完美工作,我喜欢NestJS和由此产生的微服务架构。现在我不知道如何将这种架构交付到云中。在“ Google Cloud术语”中,我将我的API想象成一个App Engine实例,并将所有连接的服务看作是Cloud Functions。

问题:这是我的主要问题:在NestJS中,微服务是使用如下配置对象创建的:

//database-service: main.ts
createMicroservice(AppModule,{
    transport: Transport.TCP,
    {
        host:'127.0.0.1',
        port:4000
    }
})

//api: AppModule.ts
ClientsModule.register([
    {
        name: 'DATABASE_SERVICE',
        transport: Transport.TCP,
        options: {
            host: '127.0.0.1',
            port: 4000
        }
    }
])

如您所见,配置对象是静态的,并且对于服务和客户端而言是相同的。在云中,那些配置对象将由云确定,因此不是静态的。而且我还可以想象,在服务之间无法通过TCP进行此类通信。

总结: 如何解决此配置和跨服务通信问题?还是我的方法总体上是错误的?

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要服务发现,这里是pattern

然后,使用领事之类的 DNS 注册服务查询您的服务。

GCP中的服务发现

示例:

  • check-list-service:4566
  • auth-service:3030
  • mongodb:27018

领事的详细信息可以找到here