当前位置:  开发笔记 > 编程语言 > 正文

如何将Nest.js微服务拆分为单独的项目?

如何解决《如何将Nest.js微服务拆分为单独的项目?》经验,为你挑选了1个好方法。

假设我想创建一个简单的影院管理平台.它需要几个微服务:movies,cinemas,payments等.

你会如何在Nest.js中做到这一点?我不希望它们在同一个大文件夹中,因为感觉就像制作巨石.我希望它们与他们自己的git存储库分开使用Nest.js项目,这样我以后就可以用Kubernetes来协调它们了.

怎么样?如果它们是两个独立的项目并且只是共享,那么如何从服务连接cinemas到服务movies,比方说,Redis?

编辑:这不是一般的微服务问题.这是Nest.js具体的问题.我阅读了文档,我知道有@Client连接到传输层的装饰器.我只是想知道在哪里使用该装饰器,并且可能会看到一小段代码"有两个独立的Nest.js存储库如何将它们连接在一起以便它们可以相互通信".

我不关心传输层,我可以弄清楚自己.我只是需要一些关于框架本身的建议,因为我认为文档缺乏.



1> Tomasz Gałko..:

我搞定了.基本上,这样做的方法是创建两个单独的项目.让我们说 - 一个是createMicroservice另一个只是一个HTTP应用程序(但可能很容易成为另一个微服务).我使用了"普通"应用程序,所以我可以轻松地调用它进行测试.

这是main.ts创建微服务的文件.

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Transport } from '@nestjs/common/enums/transport.enum';

async function bootstrap() {
  const app = await NestFactory.createMicroservice(AppModule, {
    transport: Transport.REDIS,
    options: {
      url: 'redis://localhost:6379',
    },
  });
  await app.listen(() => console.log('MoviesService is running.'));
}
bootstrap();

其中一个控制器:

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @MessagePattern({ cmd: 'LIST_MOVIES' })
  listMovies(): string[] {
    return ['Pulp Fiction', 'Blade Runner', 'Hatred'];
  }
}

现在 - 在微服务中,您声明控制器应该对哪些事件做出反应(@MessagePattern).在"正常"服务中,当您想要向其他微服务询问某些内容时,您可以在控制器中执行此操作(这main.ts是您在创建新项目时使用的最简单示例@nestjs/cli.

控制器代码:

@Controller()
export class AppController {
  private readonly client: ClientProxy;

  constructor(private readonly appService: AppService) {
    this.client = ClientProxyFactory.create({
      transport: Transport.REDIS,
      options: {
        url: 'redis://localhost:6379',
      },
    });
  }

  @Get()
  listMovies() {
    const pattern = { cmd: 'LIST_MOVIES' };

    return this.client.send(pattern, []);
  }
}

因此,只要a client连接到与微服务相同的传输层 - 它们就可以通过使用它来相互通信@MessagePattern.

对于更好的代码,您可以将this.client部件从构造函数移动到提供程序,然后通过在模块中声明提供程序来使用依赖项注入.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有