Red de conocimiento informático - Material del sitio web - Cómo implementar una cola de prioridad basada en RabbitMQ

Cómo implementar una cola de prioridad basada en RabbitMQ

Debido a varias razones, RabbitMQ no ha implementado oficialmente una cola de prioridad hasta ahora, solo ha implementado el procesamiento de prioridad del consumidor.

Sin embargo, debido a varias razones, las colas de prioridad son necesarias a nivel de aplicación, por lo que surge la demanda: cómo agregar funciones de cola de prioridad a RabbitMQ.

Después de consultar la información, descubrí que aunque RabbitMQ no admite oficialmente esta función, la comunidad ya tiene un complemento de cola de prioridad relacionado, y este complemento figura en el sitio web oficial de RabbitMQ.

¿Cómo instalar el complemento?

Ingrese al directorio de instalación de Rabbitmq, ingrese al directorio de complementos, copie el archivo ez anterior al directorio de complementos y luego ejecute el comando para habilitar este complemento.

En centos, la ruta predeterminada es: /usr /lib/rabbitmq/lib/rabbitmq_server-3.3.4/plugins (el número de versión puede cambiar)

En Windows, la ruta predeterminada es: C:\Program Files\RabbitMQ Server\rabbitmq_server- 3.3.4\ complementos (el número de versión puede cambiar)

Copie el archivo ez y luego ejecute el comando de lista de complementos:

Busque el nombre del complemento de la cola de prioridad: Rabbitmq_priority_queue

Ejecutar: Rabbitmq-plugins habilita Rabbitmq_priority_queue

OK, reinicie el servicio RabbitMQ-Server.

De esta forma se completa la configuración del lado del servidor.

Cambios que deben realizarse en el lado del código C#

Echemos un vistazo a la escritura de la biblioteca de clases del cliente:

Primero debemos definir la enumeración de prioridad, que hereda de byte, porque la prioridad del cliente C# de RabbitMQ se pasa en bytes:

Primero defina tres niveles de prioridad: baja, media y alta (de hecho, se pueden definir muchos niveles, solo para simplificar, solo se definen 3 niveles)

Hay dos lugares que deben cambiarse:

Se deben agregar atributos personalizados al declarar la cola

Al enviar un mensaje a Rabbitmq, establezca propiedades personalizadas

IDictionarylt estático interno; string, objectgt; QueueArguments { ?get ?{ IDictionarylt; arguments=new Dictionarylt (); argumentos["x-max-priority "] = 10; //Definir la prioridad de la cola como argumentos de retorno de 10 niveles; ?} }

channel.QueueDeclare("queueName", true, false, false, QueueArguments ); //QueueArguments es lo anterior El diccionario definido

var headers = channel.CreateBasicProperties(); headers.Priority = (byte)msg.Priority //Aquí, la enumeración heredada de byte se convierte en; bytechannel.BasicPublish("exchange ", "route", headers, SerializerUtility.Serialize2Bytes(msg));

Otros aspectos a tener en cuenta

En la instancia de Rabbitmq-server con la cola de prioridad complemento instalado, toda la cola Durable debe configurar el atributo x-max-priority de la manera anterior; de lo contrario, el servicio RabbitMQ-Server fallará

Reimprimir