RabbitMQ에 처음 접했고, 내가 필요한 것을 얻을 수 있는지 알아보기 위해 노력하고 있습니다.RabbitMQ - 라우팅 키당 하나의 동시 작업자
Worker Queues 패턴을 찾고 있지만 경고가 하나 있습니다. 라우팅 키당 하나의 작업자 만 동시에 실행하고 싶습니다. 내가 명령에 의해 라우팅 키를 사용하여 다음과 같은 메시지를 보내는 경우
가 : a
, a
, b
, c
, 나는 동시에 실행에만 3 노동자가 할
설명의 예
. 첫 번째a
메시지를 받으면 작업자가 메시지를 수신하여 처리합니다.
다음 a
메시지가 수신되고 이전의 a
메시지가 여전히 처리되는 경우 (확인되지 않음) 새로운 a
메시지는 대기열에서 대기해야합니다. b
및 c
메시지가 수신되면 각 메시지를 처리하는 작업자가 생깁니다. 첫 번째 a
메시지가 승인되면 모든 작업자는 다음 a
메시지를 수신 할 수 있습니다.
또 다른 설명 :
그 패턴은편집 (잠금 및 물건을 ... 처리하기 위해 내 옆에서 모든 응용 프로그램 코드를 작성하지 않고) 자연적인 방법으로 RabbitMQ를 사용 가능할 것이다. 모든 작업자는 모든 메시지를 처리 할 수 있어야하며 처리해야하며 작업자간에 부하를 공유하기 때문에 작업자 당 대기열을 갖고 싶지 않으며 게시자는 어떤 작업자가 메시지를 처리해야하는지 알지 못합니다. 그러나 나는 동시에 2 명의 노동자가 동일한 열쇠를 공유하는 메시지에 대해 작업하고 있지 않은지 확인하고자합니다.
예를 들어 게시자가 userId
필드를 게시하는 게시자 인 경우 두 명의 근로자가 동일한 userId
의 메시지를 처리하지 않도록해야합니다. userId
예에 확장
편집 2
. 한 명의 게시자와 3 명의 직원이 있다고 가정 해 보겠습니다. 게시자는 userId
초를 사용하여 { userId: 1, text: 'Hello' }
과 같은 메시지를 게시합니다. 3 명의 직원 모두가이 메시지에 동일한 작업을 수행하므로 어떤 사람이 들어오는 메시지를 처리하도록 할 수 있습니다. 그러나 내가 달성하고자하는 것은 한 명의 작업자 만 특정 사용자의 메시지를 처리하도록하는 것입니다 시각. 작업자가 userId
1이라는 메시지를 받고 아직 처리 중이며 userId
1 인 다른 메시지를받은 경우 다른 작업자가 해당 메시지를 선택하지 않았 음을 확인하고 싶습니다. 그러나 다른 메시지가있는 다른 메시지는 다른 사용 가능한 작업자가 처리해야합니다.
userId
은 미리 알지 못하고 게시자는 얼마나 많은 직원이 있는지 또는 특정 직원에 대해 구체적인지 알 수 없으므로 처리 할 메시지를 예약하려고합니다.
내 견해로는이 awnser가 옳습니다. 그러나 awnser는 대기열에 대해서도 no입니다. 질문은 "모든 작업자가 다음 메시지를받을 수 있습니다."_ 그리고 이것은 불가능합니다. 이 시나리오에서는 모든 대기열에는 하나의 작업자와 하나의 라우팅 키가 있습니다. 그래서 매번 동일한 작업자가 다음 메시지를받습니다. – slowjack2k
고마워, Derick,하지만 @ slowjack2k는 내가 의미하는 바를 옳다. 노동자들에 대한 나의 모든 메시지는 동일하며, 나는 어떤 종업원이 메시지를 집어 들었는지 (그리고 신경 쓰고 싶지 않다) 신경 쓰지 않는다. 난 단지 하나의 작업자가 (메시지 당 생성하는) 일부 키를 기반으로하는 일부 메시지에서 작동하는지 확인하고자합니다. –
@NetanelG이 두 진술은 모여 있지 않습니다. '근로자를위한 모든 메시지는 동일합니다.'그리고'메시지 당 생성되는 키를 기반으로 한 메시지'Aslo Derick의 대답은 당신이 물어 본 질문에 맞습니다. 당신은 그것을 물었지만,이 주석에 따라 편집해야한다고 생각합니다. – cantSleepNow