Microservices 如何在同一台机器上运行和连接两个nestjs grpc微服务
我正在用nestjs创建Grpc微服务。如何连接本地主机上的两台服务器 我曾尝试使用ngrok为其中一项服务创建一个隧道,但仍然出现错误“正在使用的地址”和“总共2个已解决的地址中没有添加任何地址”,即使这两个地址都在不同的端口上运行 第一次服务Microservices 如何在同一台机器上运行和连接两个nestjs grpc微服务,microservices,grpc,nestjs,Microservices,Grpc,Nestjs,我正在用nestjs创建Grpc微服务。如何连接本地主机上的两台服务器 我曾尝试使用ngrok为其中一项服务创建一个隧道,但仍然出现错误“正在使用的地址”和“总共2个已解决的地址中没有添加任何地址”,即使这两个地址都在不同的端口上运行 第一次服务 import { authServiceOptions } from './auth/grpc/auth.options'; import { notificationClientServiceOptions } from '../../notific
import { authServiceOptions } from './auth/grpc/auth.options';
import { notificationClientServiceOptions } from '../../notification/src/notification/grpc/notification.options';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe());
app.setGlobalPrefix('api/v1/services');
// Services
app.connectMicroservice(notificationClientServiceOptions);
app.connectMicroservice(authServiceOptions);
await app.startAllMicroservicesAsync();
await app.listen(51700);
}
bootstrap();
二次服务
import { AppModule } from './app.module';
import { notificationServiceOptions } from './notification/grpc/notification.options';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe());
app.setGlobalPrefix('api/v1/services');
// Services
app.connectMicroservice(notificationServiceOptions);
await app.startAllMicroservicesAsync();
await app.listen(3001);
}
bootstrap();
export const notificationClientServiceOptions: ClientOptions = {
transport: Transport.GRPC,
options: {
url: 'https://b6a4cd09.ngrok.io/',
package: 'notification',
protoPath: join(__dirname, './notification.proto'),
},
};
//第二服务的客户端选项
import { AppModule } from './app.module';
import { notificationServiceOptions } from './notification/grpc/notification.options';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe());
app.setGlobalPrefix('api/v1/services');
// Services
app.connectMicroservice(notificationServiceOptions);
await app.startAllMicroservicesAsync();
await app.listen(3001);
}
bootstrap();
export const notificationClientServiceOptions: ClientOptions = {
transport: Transport.GRPC,
options: {
url: 'https://b6a4cd09.ngrok.io/',
package: 'notification',
protoPath: join(__dirname, './notification.proto'),
},
};
明白了!原来我是在为Grpc服务指定httpurl。这是第二个服务的正确客户端选项
export const notificationClientServiceOptions: ClientOptions = {
transport: Transport.GRPC,
options: {
// you can specify any port that is not in use (just don't prefix it with 'http')
url: 'localhost:5500',
package: 'notification',
protoPath: join(__dirname, './notification.proto'),
},
};
我还查阅了nestjs的源代码。任何微服务的默认url都是localhost:5000,因此,如果您运行多个服务,最好为每个服务指定url
我遇到的另一个问题是连接微服务;
如果服务位于两个独立的nestjs项目中,则不需要在firstService
中使用app.connectMicroservice(secondServiceOptions)
,这是因为wait-app.startAllMicroservicesAsync()
将尝试启动这两个服务,但会失败。这是因为secondService
已在单独的项目中运行
要从firstService
连接到secondService
,请使用@客户端(secondServiceOptions)
装饰器