🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 混合应用 混合应用程序是一个应用程序,它监听 `HTTP` 请求,可以通过 `connectMicroservice()` 函数将 `INestApplication` 实例与 `INestMicroservice` 实例结合起来。 ```typescript const app = await NestFactory.create(ApplicationModule); const microservice = app.connectMicroservice({ transport: Transport.TCP, }); await app.startAllMicroservicesAsync(); await app.listen(3001); ``` 要连接多个微服务实例,要为每个微服务调用`connectMicroservice()`方法: ```typescript const app = await NestFactory.create(AppModule); // microservice #1 const microserviceTcp = app.connectMicroservice<MicroserviceOptions>({ transport: Transport.TCP, options: { port: 3001, }, }); // microservice #2 const microserviceRedis = app.connectMicroservice<MicroserviceOptions>({ transport: Transport.REDIS, options: { url: 'redis://localhost:6379', }, }); await app.startAllMicroservicesAsync(); await app.listen(3001); ``` 要将`@MessagePattern()`绑定到具有多个微服务的混合应用程序中的一个传输策略(例如,MQTT),我们可以传递类型`Transport`的第二个参数,它是一个具有所有内置传输策略的枚举定义。 ~~~typescript @MessagePattern('time.us.*', Transport.NATS) getDate(@Payload() data: number[], @Ctx() context: NatsContext) { console.log(`Subject: ${context.getSubject()}`); // e.g. "time.us.east" return new Date().toLocaleTimeString(...); } @MessagePattern({ cmd: 'time.us' }, Transport.TCP) getTCPDate(@Payload() data: number[]) { return new Date().toLocaleTimeString(...); } ~~~ > \*\*提示\*\*`@Payload()`、`@Ctx()`、`Transport`和`NatsContext`是从`@nestjs/microservices`导入的。 #### 共享配置 默认情况下,混合应用程序不会继承为主(基于 HTTP)应用程序配置的全局管道、拦截器、防护和过滤器。要从主应用程序继承这些配置属性,请在`connectMicroservice()`调用的第二个参数(可选选项对象)中设置`inheritAppConfig`属性,如下所示: ~~~typescript const microservice = app.connectMicroservice({ transport: Transport.TCP }, { inheritAppConfig: true }); ~~~