Como posso implementar essa fila distribuída de simultaneidade única em qualquer plataforma MQ?

Atualmente, estou com dificuldades para encontrar uma solução para implementar um tipo específico de fila, que exija as seguintes características:

Toda a fila deve respeitar a ordem em que o trabalho foi adicionado.A fila inteira terá uma simultaneidade de 1, o que significa que haverá apenas um trabalho executado por vez porfila, não trabalhador.Haverá mais do que alguns milhares de filas como este.Ele precisa ser distribuído e poder ser dimensionado (exemplo, se eu adicionar um trabalhador)

Basicamente, é uma fila FIFO de processo único, e é exatamente isso que eu quero quando experimentar um software de fila de mensagens diferente, como ActiveMQ ou RabbitMQ, mas assim que o escalono para 2 trabalhadores, ele simplesmente não funciona, pois neste caso eu quero para dimensionar e manter exatamente o mesmo recurso da fila de processo único. Abaixo, anexo a descrição de como deve funcionar em um ambiente distribuído com vários trabalhadores.

Exemplo de aparência da topologia: (Observe que é um relacionamento de muitos para muitos entre oFila eTrabalhadores)

Exemplo de como seria executado:

+------+-----------------+-----------------+-----------------+
| 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         |
+------+-----------------+-----------------+-----------------+

Provavelmente, essa não é a melhor representação, mas mostra que, mesmo noFila 1 eFila 2, há mais empregos, masO trabalhador 3 não começa a buscar o próximo trabalho até que o anterior termine.

É isso que luto para encontrar uma boa solução.

Eu tentei muitas outras soluções, como rabbitMQ, activeMQ, apollo ... Isso me permite criar milhares de filas, mas todas, enquanto eu tento, usarão o trabalhador 3 para executar o próximo trabalho na fila. E a simultaneidade épor trabalhador

Existe alguma solução lá fora que possa tornar isso possível em qualquer plataforma MQ, por exemplo, ActiveMQ, RabbitMQ, ZeroMQ etc.?

Obrigado :)

questionAnswers(1)

yourAnswerToTheQuestion