|
|
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 favor Respuesta
|
Anterior:Mensaje de excepción: "StrongTypingException: IsPrima...Próximo:Introducción a los delegados en C# (delegar, Acción, Función, predicado)
|