【发布时间】: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