Tools/grpc

[gRPC] io.grpc.StatusRuntimeException: UNIMPLEMENTED: Method not found: 에러 해결

MOMOBOB 2024. 5. 8. 18:16
반응형

Error

gRPC 통신시 아래와 같은 에러 발생

io.grpc.StatusRuntimeException: UNIMPLEMENTED: Method not found: com.example.grpcserver.GrpcServerService/getData
    at io.grpc.Status.asRuntimeException(Status.java:539)
    at io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:487)
    at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:563)
    at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:70)
    at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:744)
    at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:723)
    at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
    at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:833)

 

반응형

 


 

Solution

“UNIMPLEMENTED: Method not found” 오류는 gRPC 클라이언트가 서버의 해당 메서드를 찾지 못했을 때 발생함. 이 문제를 해결하려면 아래의 항목들을 확인.

 

1. gRPC 메서드명 일치 확인:

  • 클라이언트에서 호출하려는 gRPC 메서드와 서버에서 구현한 메서드의 이름이 정확히 일치하는지 확인.

2. Proto 파일 확인:

  • 서버와 클라이언트 양쪽에서 사용되는 프로토콜 버퍼 파일 (.proto)을 확인하여 메서드 이름과 일치하는지 확인

3. 서버에서 서비스 등록 확인:

  • 서버에서 gRPC 서비스를 제대로 등록했는지 확인. Spring Boot에서는 @GrpcService 애노테이션을 사용하여 gRPC 서비스를 스프링 빈으로 등록해야함.
import io.grpc.BindableService;
import io.grpc.Server;
import io.grpc.ServerBuilder;
import org.lognet.springboot.grpc.GRpcService;

@GRpcService
public class MyGrpcServer extends MyServiceGrpc.MyServiceImplBase {
    // 서비스 구현
}

 

4. 서버와 클라이언트의 버전 일치 확인:

  • gRPC 라이브러리의 버전이 서버와 클라이언트 간에 일치하는지 확인

5. 연결 설정 확인:

  • 클라이언트에서 서버에 연결할 때 올바른 호스트 및 포트를 사용했는지 확인

6. 빌드 및 코드 재컴파일:

  • 프로토콜 버퍼 파일이 변경되었다면, 서버 및 클라이언트 코드를 다시 컴파일하여 업데이트된 메서드 사용

 

나의 경우 Proto 파일 버전이 맞지 않아서 메소드 명이 달라 발생한 문제였음..

 

 


Thank you!

 

 

반응형