Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 44647|Respuesta: 8

[WinForm] Persistencia de mensajes en la cola rabbitMQ [con código fuente]

[Copiar enlace]
Publicado en 9/4/2018 10:23:21 | | | |
Por defecto, los mensajes de la cola rabbitMQ no se persisten en el disco duro, lo que significa que una vez reiniciado el servicio rabbitMQ, los mensajes se perderán.

Persistencia de las colas

Por ejemplo, se identifica la persistencia de la coladurableis está configurado en true, lo que significa que es una cola persistente, luego, después de reiniciar el servicio, también existirá, porque el servicio almacenará la cola persistente en el disco duro, y cuando el servicio se reinicie, restablecerá lo que antes era la cola persistente. La cola puede persistirse, pero si los mensajes dentro son persistentes depende de la configuración de persistencia del mensaje. En otras palabras, si no se envía ningún mensaje en la cola antes del reinicio, si el mensaje original sigue existiendo en la cola después del reinicio depende de la configuración del mensaje que se haya producido cuando se envió el mensaje.
Si quieres mantener los mensajes persistentes tras un reinicio, debes establecer la identidad de que el mensaje se mantiene en la misma posición.

Configurar la persistencia de la cola:




El cuarto parámetro del método, autoDelete, suele introducirse falso. La documentación describe este parámetro si es cierto, lo que significa que si la cola ya no se usa (no está suscrita), el servidor lo eliminará. Durante mis pruebas, mientras todos los destinatarios de la cola de cambio de conexión estén desconectados, la cola se elimina, aunque aún queden mensajes sin procesar. Los reinicios de RabbitMQ también los eliminan. Si se introduce false, el servicio no eliminará la cola y los mensajes en la cola existirán si todos los clientes conectados a ella están desconectados. El remitente también puede poner mensajes en la cola de cambios cuando no hay conexión con el cliente, y cuando el cliente aparezca, recibirá esos mensajes. Sin embargo, si se reinicia el servicio RabbitMQ, la cola desaparecerá y los mensajes en ella desaparecerán de forma natural.

El tercer parámetro es exclusivo, y la documentación indica que si es cierto, entonces la conexión de la cola se rompe, y la cola se elimina, incluyendo los mensajes en su interior.

El segundo parámetro, durable, se describe en la documentación diciendo que, si es cierto, representa una cola persistente, que también existirá después de que el servicio se reinicie. Porque el servicio almacenará la cola persistente en el disco duro y, cuando se reinicie el servicio, reafirmará esta cola. Por supuesto, debe ser cuando tanto autoDelete como exclusivo son falsos. La cola puede persistirse, pero si los mensajes dentro son persistentes depende de la configuración de persistencia del mensaje. En otras palabras, si aún se envían mensajes en la cola antes del reinicio, si el mensaje original sigue existiendo en la cola después del reinicio depende de la configuración del remitente para el mensaje al enviarlo.


Después de modificar el código, intentamos ejecutarlo y el error será el siguiente:

Excepción no gestionada: RabbitMQ.Client.Exceptions.OperationInterruptedException: La operación AMQP fue interrumpida: AMQP casi motivo, iniciado por Peer, code=406, text="PRECONDITION_FAILED - arg inequivalente 'durable' para la cola 'hello' en vhost 'myserver': received 'true' pero actual es 'false'", classId=50, methodId=10, cause=



Porque hemos definido una cola no persistente llamada hola. RabbitMQ no permite redefinir colas existentes con diferentes configuraciones de parámetros.

Hay dos soluciones:

1: Redeclarar una cola con otro nombre, como my_queue
2: Elimina la cola de "hola" definida con la dirección de http://localhost:15672 e inicia sesión con el nombre de usuario y la contraseña. La contraseña y el nombre de usuario por defecto de RabbitMQ son invitado. Haz clic en la columna "cola" para ver la lista de colas, haz clic en la cola "hola" para ampliar los detalles de la cola. Saca la página hasta el final, hay un elemento "Eliminar", haz clic en él, haz clic en el botón "Eliminar cola" y puedes eliminar la cola. Luego, cuando se ejecuta el código, se crea una cola de hello que soporta la persistencia.



Persistencia de mensajes

Si quieres mantener el mensaje persistente tras un reinicio, debes configurar que el mensaje persista. La configuración es cuando el remitente la envía, lo cual es relativamente sencillo, y el código es el siguiente:


El modo de entrega por defecto es 1, no persistente, y poner en 2 significa que el mensaje es persistente

Después de modificar el código, intentamos abrir solo el programa productor para enviar mensajes, y luego reiniciamos el servicio rabbitMQ, abrimos el consumidor de nuevo y comprobamos que el mensaje no se pierde.

(Fin)

Adjunto está el código fuente de C#:

Turistas, si queréis ver el contenido oculto de esta publicación, por favorRespuesta





Anterior:Mensaje de excepción: "StrongTypingException: IsPrima...
Próximo:Introducción a los delegados en C# (delegar, Acción, Función, predicado)
Publicado en 9/4/2018 13:17:51 |
Aprende a aprender
Publicado en 25/6/2019 23:22:47 |
Aprende a aprender
Publicado en 29/6/2019 9:36:23 |
¿Por qué no vi la demo? Debo responder para verla
Publicado en 9/7/2019 17:34:42 |
Quiero código fuente en C#
Publicado en 24/7/2019 14:21:51 |
Está bien, es justo lo que necesito
Publicado en 11/4/2020 14:34:54 |
Apréndelo
Publicado en 1/1/2022 14:45:24 |
1111111111111111
 Propietario| Publicado en 3/5/2023 22:12:22 |
Parámetros de la cola de RabbitMQ y sus significados


/**
* Construir una nueva cola, asignar un nombre, una bandera de durabilidad y una bandera de eliminación automática, y argumentos.
* @param nombrar el nombre de la cola - no debe ser nulo; Configura en "" para que el corredor genere el nombre.
* @param verdadero duradero si declaramos una cola durable (la cola sobrevivirá a un reinicio del servidor)
* @param cierta exclusiva si estamos declarando una cola exclusiva (la cola solo será usada por los declarantes
* conexión)
* @param autoDelete es cierto si el servidor debe eliminar la cola cuando ya no está en uso
* @param argumentos los argumentos usados para declarar la cola
*/
public Queue(nombre de cadena, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> argumentos) {
   Assert.notNull(nombre, "'nombre' no puede ser nulo");
   this.name = nombre;
   this.actualName = StringUtils.hasText(name) ? Nombre
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   this.durable = durable;
   this.exclusive = exclusivo;
   this.autoDelete = autoDelete;
   this.arguments = arguments != null ? argumentos : nuevo HashMap<>();
}

Introducción de parámetros:
1. nombre: el nombre de la cola;
2. actualName: El nombre real de la cola, el parámetro de nombre se usa por defecto; si el nombre está vacío, se genera uno según las reglas;
3. duradero: si es persistente;
4. Exclusivo: si es exclusivo o exclusivo;
5. eliminación automática: si eliminar automáticamente;
6. Argumentos: Otros parámetros de atributos de la cola tienen las siguientes opciones, véase Argumentos en la Figura 2:
(1) x-message-ttl: el tiempo de caducidad del mensaje, en milisegundos;
(2) x-expiraciones: tiempo de expiración de la cola, cuánto tiempo se eliminará si no se accede, unidad: milisegundos;
(3) longitud máxima x: la longitud máxima de la cola, si supera el valor máximo, el mensaje se eliminará de la cabecera de la cola;
(4) x-max-longitud-bytes: el contenido del mensaje de la cola ocupa el espacio máximo, limitado por el tamaño de la memoria, y si supera este umbral, el mensaje será eliminado del encabezado de la cola;
(5) desbordamiento x: Establecer el comportamiento de desbordamiento de cola. Esto determina qué ocurre con el mensaje cuando se alcanza la longitud máxima de la cola. Los valores válidos son drop-head, reject-publish o reject-publish-dlx. Los tipos de cola de quórum solo soportan drop-head;
(6) intercambio de letras muertas: se puede especificar el nombre del intercambio de letras muertas y los mensajes que han expirado o sido eliminados (debido a la larga longitud de la cola o al espacio que supera el umbral) para ser enviados al intercambio;
(7) llave de enrutamiento con letras muertas x: La clave de enrutamiento del mensaje con letra muerta, que se usará cuando el mensaje se envíe al intercambiador de letras muertas, si no se activa, se usará el valor original de la clave de enrutamiento del mensaje
(8) x-uno-consumidor activo: indica si la cola es un único consumidor activo, si es cierto, solo un consumidor del grupo de consumidores registrados consume mensajes, los demás son ignorados, y falso cuando el mensaje se distribuye a todos los consumidores en un bucle (por defecto falso)
(9) prioridad x-máx: el número máximo de prioridades que debe soportar la cola; Si no está activado, la cola no admitirá prioridad de mensaje;
(10) modo x-queue (modo perezoso): Configurar la cola en modo retardo, mantener tantos mensajes como sea posible en el disco para reducir el uso de RAM; Si no está activado, la cola mantendrá una caché de memoria para entregar los mensajes lo más rápido posible;
(11) x-queue-master-locator: Establecer la información del nodo maestro de la cola espejo en modo cluster.


Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com