• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

마이크로 서비스를 사용하려고 하는데 질문이 있습니다.

23.11.16 14:49 작성 조회수 141

0

tcp통신을 이용해서 마이크로 서비스를 만들고 있습니다.

마이크로 서비스는 3000번으로 포트를 켜놨고,

게이트웨이의 포트는 4000번으로 실행을 하게끔 해놨습니다.

제가 우선 테스트를 위해서 user의 레포지토리에서 데이터를 전체 긁어오게끔 간단한 로직을 짜놨는데요.

  // 게이트웨이 컨트롤러
  @Get("/users")
  @UseGuards()
  async GetUsers() {
    return this.organizationService.getUsers();
  }

  // 게이트웨이 서비스
  getUsers() {
    return this.clients.send("get:getUsers", {});
  }

  // 마이크로 서비스
@MessagePattern({ cmd: "get:getUsers" })
  async getUsers() {
    console.log("걸림");
    return pipe(
      await this.userRepository.find({
        relations: [ /* 관계 설정 */],
      }),
      (users) => ({
        success: true,
        users: {
          users: users.map((user) => (
            // 유저 정보들
         ),
        },
      }),
    );
  }

localhost:3000/api/users 경로로 요청 결과는 500에러가 나오고 콘솔에는

[Nest] 3096 - 2023. 11. 16. 오후 2:45:20 ERROR [ExceptionsHandler] There is no matching message handler defined in the remote service.

이렇게 메시지 핸들러가 일치하지 않다는데 대체 뭐가 잘못된건지를 모르겠습니다.

메시지 패턴 이름도 같게 해놨는데 말이죠.

답변 1

답변을 작성해보세요.

1

send에서도 { cmd: 'get:getUsers' } 객체를 보내셔야 합니다.

공식문서 참고하세요.

https://docs.nestjs.com/microservices/basics#sending-messages

abj13님의 프로필

abj13

질문자

2023.11.16

아.... 진짜 공식문서 계속 보고있는데도 몰랐네요 ㅜㅜ 오늘도 큰절 한 번 올립니다 선생님 .... 정말 감사합니다!!!!