[REDIS] 어떻게 모든 MQ 플랫폼에서 큐 분산이 하나의 동시성을 구현할 수있다?
REDIS어떻게 모든 MQ 플랫폼에서 큐 분산이 하나의 동시성을 구현할 수있다?
나는 다음과 같은 특성을 필요로 큐의 특정 종류를 구현하기위한 해결책을 찾기 위해 투쟁 현재입니다 :
기본적으로 그것은 하나의 프로세스 FIFO 큐이며, 이는 곧 내가이 노동자로 확장, 그것은 단지이 경우 이후 일을하지 않는 등의 ActiveMQ 또는 RabbitMQ,하지만 같은 적격 심사 다른 메시지 큐 소프트웨어는 내가 그것을 할 때 내가 원하는 정확히입니다 확장하고 단일 프로세스 큐의 동일한 기능을 유지합니다. 아래 나는 여러 노동자와 분산 된 환경에서 작업하는 방법에 대한 설명을 첨부합니다.
같은 방법 토폴로지 외모의 예 : (주는 큐와 노동자 사이의 많은 관계로 많은 있다는)
이 실행됩니다 방법의 예 :
+------+-----------------+-----------------+-----------------+
| Step | Worker 1 | Worker 2 | Worker 3 |
+------+-----------------+-----------------+-----------------+
| 1 | Fetch Q/1/Job/1 | Fetch Q/2/Job/1 | Waiting |
+------+-----------------+-----------------+-----------------+
| 2 | Running | Running | Waiting |
+------+-----------------+-----------------+-----------------+
| 3 | Running | Done Q/2/Job/1 | Fetch Q/2/Job/2 |
+------+-----------------+-----------------+-----------------+
| 4 | Done Q/1/Job/1 | Fetch Q/1/Job/2 | Running |
+------+-----------------+-----------------+-----------------+
| 5 | Waiting | Running | Running |
+------+-----------------+-----------------+-----------------+
아마이 가장 좋은 표현은 아니지만 그것도 큐 1, 큐 2, 그것을 보여, 거기에 더 많은 일자리, 그러나 노동자 3은 이전 마무리 될 때까지 다음 작업을 가져 오는 시작되지 않습니다.
이것은 내가 좋은 솔루션을 찾기 위해 투쟁하는 것이다.
나는 아폴로 ...이 날 대기열의 수천을 만들 수 rabbitMQ, ActiveMQ를, 같은 다른 솔루션을 많이 시도하지만, 그들 모두는 내가 큐의 다음 작업을 실행 노동자 3를 사용, 시도한다. 그리고 동시성은 노동자 당입니다
ZeroMQ 등 모든 MQ 플랫폼에서이 가능하게 할 수 거기 모든 솔루션, 예를 ActiveMQ를, RabbitMQ가 있습니까?
감사합니다 :)
해결법
-
==============================
1.당신은 모든 근로자가 자신의 작업에 대해에 BRPOP 것을 추가 "파견"큐 레디 스 목록을 사용하여이 작업을 수행 할 수 있습니다. 디스패치 큐의 각 작업은 원래 큐 ID 태그, 및 작업자가 작업을 완료 할 때이 원래 대기열로 이동하고 수행하는 다른 근로자의 다음 작업이 가능하도록 디스패치 큐에 RPOPLPUSH된다. 디스패치 큐 따라서 num_queues 소자의 최대있을 것이다.
당신은 모든 근로자가 자신의 작업에 대해에 BRPOP 것을 추가 "파견"큐 레디 스 목록을 사용하여이 작업을 수행 할 수 있습니다. 디스패치 큐의 각 작업은 원래 큐 ID 태그, 및 작업자가 작업을 완료 할 때이 원래 대기열로 이동하고 수행하는 다른 근로자의 다음 작업이 가능하도록 디스패치 큐에 RPOPLPUSH된다. 디스패치 큐 따라서 num_queues 소자의 최대있을 것이다.
소스 큐가 비어있을 때 당신이 핸들해야 한 가지 디스패치 큐의 초기 인구입니다. 이것은 단지 초기에 설정하고, 또한 파견 원래 큐에 남아 아무것도 없다 작업자에 의해 설정된다 각 큐에 대해 "빈"플래그에 대해 게시자에 의해 수행 체크 될 수 있습니다. 이 플래그가 설정되어있는 경우, 게시자는 디스패치 큐에 직접 첫 번째 작업을 LPUSH 수 있습니다.
from https://stackoverflow.com/questions/41979438/how-can-i-implement-this-single-concurrency-distributed-queue-in-any-mq-platform by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스에서 해시의 배열을 저장하는 방법 (0) | 2020.01.18 |
---|---|
[REDIS] 어떻게 레디 스의 마스터 / 슬레이브 상태를 알고? (0) | 2020.01.18 |
[REDIS] Node.js를 + 레디 스에 사용자와 소켓 쌍을 처리하는 방법 (0) | 2020.01.17 |
[REDIS] 어떻게 레디 스에서 루아 스크립트의 실행 시간을 결정? (0) | 2020.01.17 |
[REDIS] 레디 스, Node.js를, 그리고 Socket.io : 크로스 서버 인증과 이해 Node.js를 (0) | 2020.01.17 |