Tengo un productor que quiero distribuir trabajo consistentemente entre los consumidores mediante hash consistente. Por ejemplo, con los nodos consumidores X e Y, las tareas A, B, C siempre deben ir al consumidor X, y D, E, F al consumidor Y. Pero eso puede cambiar un poco si Z se une al grupo de consumidores.¿El productor trabaja sistemáticamente con hash para los consumidores a través de una cola de mensajes?
No quería ocuparme de escribir mi propia lógica para conectarme a los nodos de consumidor, y especialmente no con la administración de nodos uniendo y abandonando el grupo, así que he seguido el camino de usar RabbitMQ, y un exclusivo cola por nodo de consumidor.
Un problema que me estoy encontrando es enumerar estas colas, ya que el productor necesita saber todas las colas disponibles antes de distribuir el trabajo. AMQP ni siquiera admite listas de espera, lo que me hace dudar de mi enfoque completo. Sin embargo, RabbitMQ y Alice (brokenly at the moment) agregan esa funcionalidad: Is there an API for listing queues and exchanges on RabbitMQ?
¿Es esto un uso inteligente de Rabbit? ¿Debo usar una cola de mensajes? ¿Hay un mejor diseño para que la cola pueda constantemente dividir mi trabajo entre los consumidores, en lugar de tener que hacerlo?
Por curiosidad, ¿por qué te importa tanto la consistencia al dividir el trabajo? Como dices, el mapeo cambiará cuando los consumidores sean agregados o eliminados. – scvalex
Podría decir que es para "localidad de referencia". El Consumidor X no sabe de antemano que estará trabajando en A, pero sería beneficioso si X siempre recibe tareas iguales o como A. (Perdón por la vaguedad) De todos modos, para mi propósito, un pequeño cambio es multa. Los cambios en el conjunto deben ser raros. – Bluu