인프런 커뮤니티 질문&답변

jhlim님의 프로필 이미지
jhlim

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

busrefresh 요청 시 rabbitmq 큐 처리

작성

·

512

0

안녕하세요

테스트를 하면서 찾아봐도 해당 부분에 대한 의문이 해결되지 않아서 문의 드립니다.

예를 들어 3대의 서버에 spring event bus를 구성한 후

1번 서버에서 busrefresh를 요청하면 3대 서버에서 refresh가 정상적으로 처리가 되는건 확인했는데

rabbitmq에서 큐를 확인해보면 busrefresh를 요청한 1번 큐에는 메시지가 없고

2번, 3번 서버에서는 큐 메시지가 들어오는데..

1번에서는 busrefresh 요청을 받기 때문에 큐 메시지 없이 처리가 가능하기 때문에 큐에서 제외되는건가요?

제가 확인한 내용이 맞다면 rabbmit exchange에서 topic으로 패턴 매칭되서 모든 큐에

메시지를 넣을 거 같은데..어떻게 자신의 큐만 제외시키는지 궁금합니다.

 

답변 2

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

우선, Spring Cloud Bus의 busrefresh를 호출하게 되면, Config server로부터 최신 설정 값을 갱신한 다음, AMQP Exchange에 refresh 이벤트 메시지를 전달하게 됩니다. Exchange에는 Queue들이 Binding 되어 있어 해당 메시지가 Queue에 전달 되어, 바로 Config Propertiese들의 값을 갱신하고 있습니다. 아래 첨부 이미지를 보시면, 이미지는 user-service에서 busrefresh를 호출한 내용인데, apigateway-service, order-service의 queued messages에만 메시지가 전달된 것 처럼 보이고 있고, message rates에는 세가지 서비스 모두 네트워크에 대한 사용 내역이 확인되고는 있습니다. 이는 publish와 consumer 모두에서 발생한 내역이 표시 되기 때문에, 세가지 서비스 모두 비슷한 내역이 출력된 것처럼 보이고 있습니다.

image

user-service에서 message publish를 하였기 때문에, 다른 서비스들처럼(consumer) queue message에 표시는 되지 않았지만, Config server로 부터 최신 설정 값들 중 RefreshScope로 선언된 값들을 읽어 들여 반영하고 있습니다.

관련 내용으로 actuator나 amqp 라이브러리에서 해당 코드를 참조해 드리고 싶었는데, 찾기가 쉽지 않네요. 추후에 관련 정보가 업데이트 되면 다시 공지하도록 하겠습니다.

감사합니다.

jhlim님의 프로필 이미지
jhlim
질문자

빠르고 자세한 답변 너무 감사합니다~

저도 로그와 rabbitMQ 처리까지 확인하고 참고할 소스나 디버깅을 해보려고 했는데

찾기 힘드네요. 설명해주신 내용 덕분에 100%는 아니지만 이해하는데 많은 도움이

되었습니다.

계속 좋은 강의 올려주셔서 감사드립니다.

 

0

안녕하세요, 인프런 AI 인턴이에요.

해당 질문에서 언급하신 것처럼, RabbitMQ의 Exchange는 패턴 매칭을 통해 메시지를 큐로 보내게 됩니다. 그래서 모든 서버에서 동일한 메시지를 받아야 할 때 유용하게 사용됩니다.

하지만, 언급하신 것처럼 특정 서버에서만 처리해야 할 경우 자신의 큐만 처리할 수 있도록 설정해야 합니다. 이때는, RabbitMQ에서 Direct Exchange를 사용하면 더욱 효과적입니다. Direct Exchange는 메시지를 특정 큐로 보내기 위해 Routing Key를 사용하는 구조입니다. 각 큐는 자신만의 Routing Key를 가지고 있고, 해당 Routing Key로 메시지를 보내면 해당 큐에서만 처리가 가능하게 됩니다.

따라서, Direct Exchange를 사용하여 Routing Key를 설정하고 각 큐에 해당 Routing Key를 할당하면, 자신의 큐만 처리할 수 있도록 설정할 수 있습니다.

더 자세한 내용은 RabbitMQ 홈페이지의 Direct Exchange에 대한 문서를 참고하시면 도움이 될 것입니다.

감사합니다.

jhlim님의 프로필 이미지
jhlim

작성한 질문수

질문하기