3 개의 인스턴스/복제본 (동일한 종류의 응용 프로그램 3 개가 동시에 실행 됨)이있는 응용 프로그램이 있습니다. 그들은 모두 같은 대기열을 소비하므로 RabbitMQ는 메시지를 라운드 로빈 방식으로 전달합니다. 세 개의 인스턴스 모두는 r/w 할 단일 데이터베이스를 공유합니다.RabbitMQ/AMQP 디자인 : 한 소비자가 처리 할 메시지를 어떻게 만들 수 있습니까? 그러나 모든 소비자를 관찰 할 수 있습니까?
대기열이 new-user
메시지를 수신하면이를 한 인스턴스로 전달하고 그 인스턴스가 사용자를 공용 데이터베이스에 저장하는 경우에 효과적입니다.
문제 : 메시지 new-user
이 주어지면 하나의 인스턴스가 데이터베이스에 저장되기를 원하지만 (이전처럼)이 세 가지 모두가 캐시를 무효화하기를 원합니다. 따라서 실제로 모든 인스턴스가 동일한 이벤트를 수신해야하지만 그 중 하나만 다르게 작동해야합니다.
이러한 요구 사항을 허용하는 시스템을 어떻게 설계 할 수 있습니까? 내가 생각할 수있는
가장 좋은 방법은 두 거래소 (fanout
및 direct
), new-user
메시지를 복제하고 fanout
및 direct
교류로 보냅니다 별도의 응용 프로그램에 보낼하는 것입니다. 모든 인스턴스는 두 교환기를 모두 수신하며 메시지 처리기에 따라 수행 할 작업을 결정합니다. 메시지가 fanout
인 경우 : 캐시를 무효화합니다 (교환이 direct
인 경우). 어쨌든 하나만받습니다.