【问题标题】:Microservices - bidirectional communication微服务——双向通信
【发布时间】:2020-11-18 00:13:51
【问题描述】:

api-gateway 使用ClientProxy 与微服务(即“服务 A”)交互

import { ClientProxy } from "@nestjs/microservices"

@Injectable()  export class AppService {
  constructor(
    @Inject("SERVICE_A") private readonly clientServiceA: ClientProxy
  ) { }
}

微服务就像一个服务器,并且引导如下:

async function bootstrap() {
  const app = await NestFactory.createMicroservice(AppModule, {
    transport: Transport.TCP,
    options: {
      host: "127.0.0.1",
      port: 8888
    }
  });
  await app.listen(() => logger.log("Microservice A is listening"));
}
bootstrap();

API 网关充当客户端,并使用ClientsModule 连接到“服务 A”。所有这些都在AppModule 中完成

import { ClientsModule, Transport } from "@nestjs/microservices";

@Module({
  imports: [
    ClientsModule.register([
      {
        name: "SERVICE_A",
        transport: Transport.TCP,
        options: {
          host: "127.0.0.1",
          port: 8888
        }
      }
    ])
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

我从一个很棒的教程中获得了所有这些信息,我找到了 here,并且我在一本书(在 Packt 上出版)中找到了相同的设置。

旁注:

老实说,我希望 API 网关也可以充当发现服务器。然后其他微服务将连接到它。这允许每个实例的多个实例 微服务,它提供了一种自动发现机制。 只有松耦合的微服务对我来说才有意义。和我 想要迁移到我可以启动多个实例的情况 一个微服务并在不停机的情况下重新启动单个微服务 系统。相比之下,上述设置没有真正的发现服务器。可能存在连接到 API 网关的微服务。然后 API 网关也将扮演发现服务器的角色。但显然情况并非如此。所以现在,这一切都是紧密耦合的。该sideinfo可能是相关的,但我不想让问题过多。所以,我们不要得意忘形。也许我遗漏了一些东西,所以我想把它作为一个旁注。

我真正的问题是,上述设置是否允许双向通信。例如如果微服务(服务 a)想要调用 api-gateway 怎么办。换句话说,有没有 ServerProxy ?或者我可以在通信的两端使用ClientProxy 吗?或者是唯一的方法来建立 2 个连接?

【问题讨论】:

    标签: microservices nestjs


    【解决方案1】:

    API 网关通常用于控制哪些服务/端点暴露给外部客户端(例如 SPA、移动应用程序或客户),以及它们应该如何暴露(例如路由是什么,以及客户端应该如何进行身份验证)。除了这些外部客户端识别自己所需的身份验证/授权之外,您通常应该避免将任何业务逻辑放入这些网关中。

    但是,让您的某些微服务依赖于彼此提供的功能并不是不合理的。如果您需要一个微服务连接到另一个微服务,您可以按照在网关中使用的相同模式将上游微服务注册为下游服务的客户端——完全跳过网关进行内部服务通信。我会提醒您避免这些服务之间的双向逻辑,因为您可能会很快失去对应用程序流的跟踪并创建循环引用,但技术上可以让两个微服务成为彼此的客户端。

    【讨论】:

      猜你喜欢
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 2022-10-02
      • 2018-06-30
      • 2017-01-28
      相关资源
      最近更新 更多