A. service명이 잘못 되어서 그렇다.
여기서 service명은 gRPC 서비스명이다.
예를 들어서 아래와 같은 hero.proto 파일이 있다.
(출처: nestjs microservices gRPC)
syntax = "proto3";
package hero;
service HeroesService {
rpc FindOne (HeroById) returns (Hero) {}
}
message HeroById {
int32 id = 1;
}
message Hero {
int32 id = 1;
string name = 2;
}
여기서 서비스명은 'HeroesService'이다. 팩키지명은 'hero'이다.
service ABCD {
rpc FindOne (HeroById) returns (Hero) {}
}
만약 위와 같다면 서비스명은 'ABCD'이다. 서비스명은 proto파일을 만드는 사람 마음대로 정의할 수 있다.
gRPC 클라이언트 코드 예는 아래와 같다.
@Injectable()
export class AppService implements OnModuleInit {
@Client({
transport: Transport.GRPC,
options: {
package: 'hero',
protoPath: join(__dirname, 'hero/hero.proto'),
},
})
client: ClientGrpc;
private heroesService: HeroesService;
onModuleInit() {
this.heroesService = this.client.getService<HeroesService>('HeroesService');
}
getHero(): Observable<string> {
return this.heroesService.findOne({ id: 1 });
}
}
(출처: nestjs microservices gRPC)
위 코드에서 만약 서비스명이 ABCD라면,
this.heroesService = this.client.getService<HeroesService>('ABCD');
라고 해야 한다.
아직 IDE가 proto 파일을 읽어서 자동 완성을 잘 안 해주므로, 사소한 실수로 작동이 안 되고 디버깅이 어렵다.