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

标签 javascript node.js typescript microservices nestjs

我有这个用 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();

但现在我需要为 Prometheus 实现端点 /metrics。所以问题是我如何使用 NestJs 微服务做到这一点

来自 this问题 我觉得这是不可能的。这是真的吗?如果是,是否有我可以使用的解决方法?

我尝试按如下方式应用中间件

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();
    }
}

更新:This issue也无济于事:(

最佳答案

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

// 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.startAllMicroservices();
await app.listen(3001);

关于javascript - 在 NestJS 微服务中公开普通的 http 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57909126/

相关文章:

javascript - 通过JS获取图像的宽度和高度,然后以cm为单位

javascript - 在 AngularJS 中处理元素大小调整

javascript - 避免嵌套三元

node.js - 如何在断开连接的计算机上安装 npm 模块,确保所有依赖项

JavaScript/Node.JS - 如何在要读取的 txt 文件的变量列表中提取值?

html - 如何在 Angular 的单个服务文件中传递来自不同方法的值?

javascript - 带有缓动功能的 jquery 幻灯片放映/循环不起作用

node.js - Dockerizing 一个 NodeJS 应用程序 : package. json 在本地工作正常但在容器内不工作

javascript - 如何通过比较id来合并三个不同的数组?在 Angular 6

node.js - 使用 Typescript 在 Mongoose 中链接 ES6 Promise