La fiabilidad de los mensajes RabbitMQ

1, la escena de importación

Como todos sabemos, Conejo MQ es un lenguaje escrito en Erlang, AMQP-basa mensajería protocolo de middleware. Así que el mensaje de seguridad de transmisión es crucial, en este punto, nos fijamos en todo el flujo de trabajo MQ Conejo:
Aquí Insertar imagen Descripción
desde arriba una figura, se puede saber fácilmente que el mensaje es enviado por el productor, fluye a través de Broker (canal - > interruptores -> cola), entonces el gasto del consumidor se ha completado, el cual es un proceso de flujo de mensaje completo. Aparecerá en este proceso no es problema de la transmisión fiable de mensajes, después de todo, las cosas no son absolutos Bueno, pero la magia va Ridge Road, MQ conejo ya se desarrolló una estrategia correspondiente para estas cuestiones no fiables, he aquí un vistazo ¿Qué problemas poco fiable en el proceso de transmisión de mensajes tiene.

1.1, el problema de los productores de la pérdida de mensajes

Productores, como cuando se envía un mensaje, por problemas de cobertura, como la pérdida de paquetes de red, fallo en la red condujeron a la desaparición de la pérdida.

1.2, conejo MQ problemas de pérdida de servidor de mensajería:
  • Conejo reinicio del servidor MQ?
  • Un nodo de servicio se ha reducido el modo agrupado?
1.3, el mensaje es problemas de los consumidores perdidos:

Los consumidores reciben el mensaje, no se ha completado el procesamiento de mensajes, se han producido hacia abajo, pero este servidor MQ Conejo tiempo piensa que han consumido este mensaje, entonces surge el problema del consumidor de mensajes se pierde.

2, Conejo mensaje MQ fiabilidad

2.1, para resolver se pierde el problema de mensaje de productores
2.1.1, mecanismo de transacción

mensajería MQ conejo proporciona un mecanismo de transacción, la apertura de Asuntos (channel.txSelect ()) antes de enviar el mensaje, y luego comenzar a enviar el mensaje, el mensaje se envía en caso de fallo o anormal, transacción MQ conejo RETROCEDERÁ, si se transmite con éxito, comprometan directamente la transacción (channel.txCommit), aunque esto se puede asegurar que los mensajes no se pierden.

Pero hay un mecanismo de transacción inconveniente, puede causar fabricantes para poner fin a la obstrucción, ya que es una operación sincrónica, que no pudo enviar un mensaje, hasta después de la recepción de la MQ conejo respuesta, los productores pueden seguir enviando un mensaje, esto hará que los productores a producir mensaje de rendimiento la cantidad y el rendimiento se reduce mucho.

2.1.2, el mecanismo de confirmación de transmisión (modo de confirmar)

Confirmar el modo, todos los mensajes del canal de entrada se le asignará un identificador único, una vez entrado en el juego de colas de mensajes, RabbitMQ ID único se enviará un mensaje de confirmación al productor y la bandera, que los fabricantes saben que el mensaje ha sido correctamente el destino de cola; RabbitMQ no procesada si el mensaje no es un mensaje de confirmación se envía a usted, usted puede realizar una operación de reintento. Esto también asegura que los mensajes no se pierden.

Confirmar hay tres maneras:

  • modo serie
  • El modo por lotes confirmar
  • Confirmar el modo asíncrono: proporcionar un método de devolución de llamada, confirman corredor de una pluralidad de mensajes o llamadas de vuelta a la final del método de productor.
2.2 dirección de los problemas de pérdida de conejo MQ servidor de mensajería:
2.2.1, reinicia el servidor MQ conejo

En circunstancias normales, el mensaje se almacena en la memoria, una vez que se reinicia el servidor, la memoria no es el mensaje perderse. A continuación, hacer que el mensaje no se pierde, usted tiene el mensaje guardado en un solo lugar, de modo que incluso si se reinicia el servidor, el next'll encontrar el mensaje correspondiente en la preservación del lugar, por lo que no se pierda el mensaje. Guardar el mensaje abajo proceso se denomina persistencia de mensajes. Debido a que los mensajes se almacenan en la cola entre, si no la cola, entonces, ciertamente, no habrá noticias, por lo que tendrá que hacer cola también persistente, de modo que se garantice el mensaje se guarda persistencia. Por supuesto, el interruptor se puede seleccionar para la persistencia, esta seleccionado según las necesidades.

Cola de persistencia:

    /**
     * 设置持久化队列
     *
     * @return 返回队列
     */
    @Bean
    public Queue durableQueue() {
        //第一个参数是名字,第二个参数是代表是否持久化
        return new Queue(IMMEDIATE_QUEUE, true);
    }

Noticias de resistencia específica de

       //消息持久化
        Message message = MessageBuilder.withBody("消失持久化".getBytes()).build();
        message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
2.2.2, un servicio es abajo de un modo de nodo de clúster

modo agrupado, el caso de un tiempo de inactividad del servidor de nodo, entonces significa que todo nodo mensajes está temporalmente no disponible, entonces la cara de tal situación una, no se puede considerar un servidor de copia de seguridad, el servidor de copia de seguridad para sincronizar un frente todos los servidores de mensajes, por lo que después de un nodo deja de funcionar, el servidor en el nodo en espera unido de forma rápida, esto resuelve el problema de la parálisis del tráfico. servidor MQ Rabbit patrón tales clúster llamado modo de clúster espejo , el modo de espejo usando al menos tres nodos, dos nodos y un nodos de memoria de disco. configuración de la figura es la siguiente:
Aquí Insertar imagen Descripción
estrategias espejo cluster:

  • Sincronizar todos los nodos
  • Hasta con N nodos
  • Sólo la sincronización nodo para cumplir con el nombre especificado
2.3, el mensaje se pierde a los problemas de determinación de consumo:

problema de pérdida de información al consumidor es el consumidor de hacer llegar el mensaje, ya sea o no el procesamiento de mensajes se ha completado, el mensaje se devuelve automáticamente al servidor RabbitMQ para confirmar los resultados, y esto ha llevado al servidor RabbitMQ no recibe los resultados de negocio de bienes de consumo terminados esto se debe a que los consumidores se utilizan para confirmar la configuración de forma automática, sin esperar a que el procesamiento de mensajes se ha completado, después de todo el tiempo que los consumidores reciban un mensaje de confirmación vuelve automáticamente los resultados al servidor RabbitMQ: el mensaje ha sido confirmado consumido.

Por lo tanto, los consumidores sólo necesitan confirmación confirmar configurar automáticamente a la configuración manual para resolver el problema de manera que cada vez que se necesita esperar a que el procesamiento de mensajes se ha completado, los consumidores de forma manual para confirmar los resultados de vuelta al servidor RabbitMQ, si el consumidor está en el medio, así que no da devuelve el servidor RabbitMQ un mensaje de confirmación, el servidor RabbitMQ reenviará el mensaje a otros consumidores de esta entrada emparejados, esto resolvería el problema de la desaparición perdido.

Tales como la infracción, deberá informar, Li borrado!

Doy la bienvenida a que se concentre en el número JAVAERS públicas, acompaño a aprender juntos, crecer juntos, compartiendo la poesía y la carretera JAVA distantes entre sí. En la que los números públicos son amigo JAVA de este mundo, el público tendrá artículos técnicos de números todos los días, por la superficie seca, sino también la arquitectura avanzada de libros electrónicos, tales como el combate primavera, SpringBoot práctica, MySQL de alto rendimiento, la comprensión en profundidad de la JVM, combate RabbitMQ , diseño Redis e implementación de una serie de libros de alta calidad y así sucesivamente, que pueden recibir la atención pública No. Oh.
Aquí Insertar imagen Descripción

Publicado 10 artículos originales · ganado elogios 74 · vistas 4373

Supongo que te gusta

Origin blog.csdn.net/qq_36526036/article/details/105083762
Recomendado
Clasificación