해결된 질문
작성
·
245
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
아.... 진짜 공식문서 계속 보고있는데도 몰랐네요 ㅜㅜ 오늘도 큰절 한 번 올립니다 선생님 .... 정말 감사합니다!!!!