Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

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


Você pode conseguir isso usando listas Redis com uma fila de "despacho" adicional que todos os trabalhadores BRPOP para seus trabalhos. Cada trabalho na fila de despacho é marcado com o ID da fila original e, quando o trabalhador conclui o trabalho, ele vai para essa fila original e executa RPOPLPUSH na fila de despacho para disponibilizar o próximo trabalho para qualquer outro trabalhador. A fila de despacho terá, portanto, um máximo de num_queues elementos.

Uma coisa que você terá que lidar é a população inicial da fila de despacho quando a fila de origem estiver vazia. Isso pode ser apenas uma verificação feita pelo editor em relação a um sinalizador "vazio" para cada fila que é definida inicialmente e também definida pelo trabalhador quando não há mais nada na fila original para despachar. Se este sinalizador estiver definido, o editor poderá apenas LPUSH o primeiro trabalho diretamente na fila de despacho.