🌹 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 |