Framework/gRPC

gRPC 구현 예제

잔망루피 2024. 3. 21. 12:12

🌹 TIL

  • gRPC 서버 포트를 0번을 하지말자. 0번으로 했다가 다시 실행하면 랜덤으로 바껴서 다른 컴포넌트에서 gRPC 서버를 찾지 못 했었다.
  • @GrpcClient에 들어가는 파라미터는 gRPC 서버의 spring.application.name
 
 

🐭 의존성 추가

1. 플러그인 추가

id 'com.google.protobuf' version '0.9.2'
 

2. dependencies 추가

// gRPC
implementation 'net.devh:grpc-client-spring-boot-starter:2.13.1.RELEASE'

// protobuf
implementation 'com.google.protobuf:protobuf-java:3.22.2'

implementation project(':proto')

 

 

🎀 gRPC 클라이언트

1. 사용할 메서드 정의

@Slf4j
@Service
public class UserClient {

    @GrpcClient("user")
    UserServiceGrpc.UserServiceBlockingStub userStub;

    public CurrentUserInfo findUserInfo() {
        return userStub.getCurrentUserId(Empty.newBuilder().build());
    }
}

 

2. 위에서 정의한 메서드 사용

@RestController
@RequestMapping("/orders")
@RequiredArgsConstructor
public class OrderController {

    private final OrderService orderService;
    private final UserClient userClient;

    @Operation(summary = "주문(펀딩)을 결제합니다.")
    @PostMapping
    public OrderResponse orderFunding(@RequestBody CreateOrderRequest createOrderRequest) {
        return orderService.orderFunding(
                createOrderRequest, Integer.parseInt(userClient.findUserInfo().getUsername()));
    }
}

 

 

3. discovery에 등록된 gRPC 서버를 가져온다.

  • 대문자를 사용한다. (정확히는 eureka에 접속했을 때 등록된 서버명)
grpc:
  client:
    user:
      address: 'discovery:///USER'
      enableKeepAlive: true
      keepAliveWithoutCalls: true
      negotiationType: plaintext

 

 

 

🐰 gRPC 서버

1. proto에 정의한 메서드를 재정의

@GrpcService
@RequiredArgsConstructor
public class UserServerService extends UserServiceGrpc.UserServiceImplBase {

    @Override
    public void getCurrentUserId(Empty request, StreamObserver<CurrentUserInfo> responseObserver) {
        // super.getCurrentUserId(request, responseObserver);
        // String userId = AuthenticationUtil.getCurrentUserSocialId();

        CurrentUserInfo response = CurrentUserInfo.newBuilder().setUsername("1").build();

        responseObserver.onNext(response);
        responseObserver.onCompleted();
    }
}

 

2. 서버 포트 설정

  • 랜덤 포트 0은 하지말자.
grpc:
  server:
    port: 9999

 

반응형

'Framework > gRPC' 카테고리의 다른 글

[Error] NotSslRecordException & Http2Exception  (0) 2023.04.17
grpcurl  (0) 2023.03.24
gRPC  (1) 2023.03.15