我有一个用 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 回答
![?](http://img1.sycdn.imooc.com/54584d6100015f5802200220-100-100.jpg)
明月笑刀无情
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);
添加回答
举报
0/150
提交
取消