为了账号安全,请及时绑定邮箱和手机立即绑定

在 NestJS 微服务中公开普通的 http 端点

在 NestJS 微服务中公开普通的 http 端点

12345678_0001 2021-10-14 14:32:30
我有一个用 NestJs 编写的微服务:async function bootstrap() {  const port = parseInt(process.env.PORT || '5000', 10);  const app = await NestFactory.createMicroservice(ApplicationModule, {    transport: Transport.TCP,    options: { host: '0.0.0.0', port }  });  app.listen(() => console.log(`Microservice is listening on port ${port}`));}bootstrap();但是现在我需要/metrics为 Prometheus实现一个端点。所以问题是我如何使用 NestJs 微服务来做到这一点从这个问题我得到的印象是这是不可能的。这是真的吗?如果是这样,是否有我可以使用的解决方法?我尝试应用中间件如下Module({  imports: [],  controllers: [AppController],  providers: [AppService, DBService],})export class ApplicationModule {  configure(consumer: MiddlewareConsumer) {    consumer      .apply(MetricsMiddleware)      .forRoutes('/metrics') // Also tried '*'  }}但是当我什么curl http://localhost:5000/metrics都不做时,中间件不会被调用@Injectable()export class MetricsMiddleware implements NestMiddleware {    constructor() {}    use(req, res, next) {        console.log('yes');        next();    }}更新:这个问题也无济于事:(
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

如果您希望您的应用程序同时支持 http 请求和微服务,您可以创建一个混合应用程序。


// Create your regular nest application.

const app = await NestFactory.create(ApplicationModule);


// Then combine it with your microservice

const microservice = app.connectMicroservice({

  transport: Transport.TCP,

  options: { host: '0.0.0.0', port: 5000 }

});


await app.startAllMicroservicesAsync();

await app.listen(3001);


查看完整回答
反对 回复 2021-10-14
  • 1 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信