이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 2516|회답: 0

RabbitMQ: 누가 큐 앤 익스체인지를 만들 것인가요?

[링크 복사]
게시됨 2023. 5. 3. 오후 10:31:59 | | | |
번역

메시징은 모든 분산 시스템의 근본적인 부분입니다. 이 기능은 생산자가 원하는 수의 소비자에게 메시지를 보낼 수 있게 하며, 소비자에 대한 정보를 알 필요가 없습니다. 이는 진정한 비동기 및 분리 통신에 큰 도움이 됩니다.



RabbitMQ을 사용할 때, 위의 다이어그램은 매우 기본적이지만 전형적인 구조를 보여줍니다. 프로듀서는 스위치에 메시지를 보냅니다. 라우팅 논리에 따르면, 스위치는 메시지를 스위치에 묶인 큐에 넣습니다. 더 구체적으로, 브로드캐스트 타입 스위치라면 이 메시지의 복사본이 각 큐에 반복적으로 전송됩니다. 소비자는 그 메시지를 받고 처리할 수 있습니다.

위 구조가 생산자와 소비자에게 성공적으로 작동하려면 모든 RabbitMQ 구성 요소(예: 큐, 스위치, 바인딩)가 사전에 생성되어야 한다는 중요한 가정이 있습니다. 소비자는 스위치에 메시지를 보낼 수 없습니다. 스위치가 존재하지 않는다면, 존재하지 않는 큐에서 메시지를 처리할 수 없습니다.

따라서 생산자/소비자가 메시지를 보내거나 받기 전에 생산자/소비자 값이 큐, 스위치, 그리고 바인딩 관계를 생성하도록 하는 것이 이해하기 어렵지 않습니다. 각 방법의 장단점을 살펴보겠습니다.

1. 책임 구분



이미지 변환 (1. 프로듀서가 스위치를 생성 2. 컨슈머가 큐를 생성하고 큐를 스위치에 바인딩함)

생산자와 소비자가 완전히 분리되려면, 이상적으로는 생산자는 스위치에 대한 정보만 알고(대기열은 알지 못하고), 소비자는 대기열에 대해서만 알고, 스위치는 알지 못합니다. 바인딩 관계는 스위치와 큐 간의 관계를 나타냅니다

한 가지 가능한 방법은 생산자가 스위치 생성을 처리하고, 소비자가 큐를 생성하고 큐를 스위치에 묶는 것입니다. 이 분리 방법의 장점은 소비자가 큐를 필요로 할 경우 단순히 큐를 만들고 수요에 따라 묶기만 하면 되며, 생산자는 큐에 대한 정보를 알 필요가 없다는 점입니다. 하지만 이는 충분한 분리가 아닙니다: 소비자가 스위치를 알면 그것을 결합할 수 있기 때문입니다.

2. 생산자가 모든 것을 창조합니다

프로듀서가 실행 중일 때는 스위치, 큐, 바인딩과 같은 모든 필요한 컴포넌트를 생성하도록 설정할 수 있습니다. 이 접근법의 장점은 메시지가 손실되지 않는다는 점입니다(큐가 이미 생성되고 스위치에 바인딩되어 있어 소비자가 먼저 시작할 필요가 없기 때문입니다).

하지만 이는 생산자가 스위치에 연결해야 할 모든 큐를 알아야 함을 의미합니다. 이것은 매우 결합된 방식입니다. 그 이유는 새로운 큐를 추가할 때마다 제작자가 큐를 생성하고 결속하기 위해 재구성하고 배포해야 하기 때문입니다

3. 소비자가 모든 것을 창조한다

반대로 소비자가 실행 중에 필요한 스위치, 큐, 바인딩을 직접 생성하도록 하는 것입니다. 이전 방법과 마찬가지로, 이 방법은 소비자가 자신이 큐에 묶인 스위치에 대한 정보를 알아야 하므로 결합을 생성합니다. 스위치에 변경(예: 이름 변경)이 있으면 모든 소비자가 재구성되고 배포되어야 합니다. 대기줄과 소비자가 많을 때, 이러한 복잡성은 매우 부담스러울 수 있습니다.

4. 둘 다 아무것도 창조하지 않는다

완전히 다른 접근법은 생산자와 소비자 모두 필요한 부품을 직접 만들지 않는 것입니다. 대신, 관리자 플러그인이나 관리자 CLI의 사용자 인터페이스를 통해 미리 생성됩니다. 이 방법은 다음과 같은 장점에 기반합니다:

  • 생산자와 소비자는 완전히 분리될 수 있습니다. 생산자는 교환만 알고, 소비자는 대기열만 알고 있습니다.
  • 이 과정은 배포 파이프라인의 일부로서 쉽게 스크립트화되고 자동화될 수 있습니다
  • 새로운 큐와 같은 변경 사항은 기존 배포된 퍼블리셔나 소비자를 건드리지 않고 추가할 수 있습니다


요약

분산 시스템에서는 비동기 메시지가 분리되는 유용한 방법이지만, 분리를 유지하려면 기본 메시지 구조(RabbitMQ에서는 큐, 스위치, 바인딩)를 효과적으로 유지하는 전략을 유지해야 합니다.

퍼블리셔와 소비자 서비스가 스스로 필요한 것을 만들 책임이 있을 수 있지만, 초기 메시지 손실, 결합, 운영 유지보수(구성 및 배포 측면) 측면에서 비용이 많이 들 수 있습니다.

메시징 시스템 구성을 제자리에 두고 처리하는 가장 좋은 방법은 애플리케이션 외부에서 스크립트를 작성하는 것입니다. 이로 인해 서비스는 분리된 상태를 유지하고, 대기열 시스템이 필요에 따라 동적으로 변경될 수 있으면서도 많은 기존 서비스에 영향을 주지 않습니다.

원문 언어:하이퍼링크 로그인이 보입니다.
원본 영어:하이퍼링크 로그인이 보입니다.





이전의:.NET 7에 추가된 IParsable 인터페이스 소개
다음:VSTO (IV) 워드 문서에 그림을 채우기
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com