Cuando se utiliza middleware de mensajería, la forma de garantizar que los mensajes se consumen sólo una vez?

Ampliamente utilizados middleware mensaje, utilizado para desplazamiento de la carga, de desacoplamiento, el procesamiento asincrónico. procesamiento asíncrono se puede utilizar en la mayoría de las escenas, como el sitio actual tecnología de blog, todos los sistemas de integración utilizando, los usuarios publicado un artículo, usted puede ganar puntos que desea, con el fin de mejorar el rendimiento del sistema, el usuario puede añadir operaciones de crédito el procesamiento asincrónico, no necesita ser colocado en el proceso de sincronización.

Podemos poner un ID de usuario, la necesidad de paquete para aumentar la integración en un mensaje al sistema de entrega de mensajes, el procesamiento asincrónico más operación integral, ya que se produce entre diferentes servidores, es posible fallo en la entrega del mensaje, el manejo de problemas fallo, haciendo así que el usuario además de fallar integral, existe la posibilidad de que repite el mensaje entregado, el usuario es probable que repita los puntos o más, independientemente de ese tipo de situación, no son circunstancias normales.

Para evitar lo anterior dos casos, tenemos que tratar de asegurarse de que los mensajes no se pierden y el mensaje se consumió sólo una vez, este artículo a un lado middleware de mensajería específico, sistema de mensajería desde el nivel general de hablar sobre cómo evitar estos dos casos .

1, para asegurar que los mensajes no se pierden

Un mensaje desde la producción hasta el consumo de este enlace, hay tres lugares pueden causar la pérdida de mensajes, son los siguientes:

  • Escrito mensaje de fallo de la entrega de mensajes desde el productor hasta la cola de proceso.
  • Mensaje en la cola de mensajes, el fracaso persistente.
  • El mensaje de excepción se consume consumidores se produce proceso.

1.1 En el proceso de producción de fallo de entrega de mensajes

sistemas de mensajería News productor y generalmente se despliegan independientemente en diferentes servidores para comunicar se hará a través de la red entre los dos servidores, la red no es estable, se puede producir la fluctuación de fase, a continuación, los datos se pueden perder. fluctuación de la red tendrá que producen las dos situaciones siguientes.

mensajes perdidos en el mensaje del proceso de producción

Escenario 1: Red de fluctuación se produce durante el mensaje transmitido al sistema de avisos, la pérdida de datos directamente.
Escenario 2: El mensaje ha llegado sistema de mensajería, pero cuando el servidor de mensajes sistema devuelve la información a los productores, se produce la fluctuación de la red, los datos no es necesariamente cierto en este momento de la pérdida, que sólo puede ser los productores piensan que la pérdida de datos.

Pérdida de producción para el mensaje cuando el mensaje se pueden tomar para volver a entrar en el mecanismo, cuando el programa detecta anomalías en la red, una vez más entregar el mensaje al sistema de mensajería. Pero re-entrega en el escenario 2 casos, puede causar la duplicación de los datos, la forma de resolver este problema, se mencionará más adelante.

1.2 cola de mensajes fracaso persistente

La mensajería es la persistencia de mensajes, por lo general se almacenan los mensajes en el disco local, por supuesto, hay algunos soportes de middleware de datos orientados a mensajes de persistencia a la base de datos, el rendimiento del sistema mensaje podría disminuir.

Si usted tiene algún conocimiento de las palabras Redis persistencia, se encuentra Redis cuando los datos persistentes, no cada nueva inmediatamente acreditadas en su disco local, pero los datos se escribirán en el primer sistema operativo caché de página cuando se cumplen ciertas condiciones, a continuación, los datos de caché de páginas en el disco en el cepillo, ya que reduce el disco al azar las operaciones de E / S, sabemos que la E / S aleatorias es muy lento, lo que también mejora el rendimiento del sistema , middleware de mensajería no es una excepción, cuando es persistente de esta manera.

En algunos casos extremos, puede provocar la pérdida de datos de caché de página, tal como un fallo eléctrico o un reinicio anormal de la máquina. Página caché para resolver los problemas de pérdida de datos, formas de desplegar a las agrupaciones se pueden utilizar para tratar de asegurar que los datos no se pierde.

1.3 existen en el proceso de pérdida de mensajes consumo

Mensaje en el proceso de consumo también se produce perdido, y los dos casos antes de la probabilidad de pérdida en el proceso de consumo de la mucho más grande. Un mensaje sobre el proceso de consumo en tres etapas: los consumidores de mensajes de tracción, el consumidor procesa el mensaje, el sistema de mensajes para actualizar el progreso de consumo.

Pie de foto

El primer paso en el caso de que el mensaje de tracción se puede producir fluctuación anormal de la red, el segundo paso en el trato con el mensaje puede haber algunas operaciones anormales, lo que llevó al proceso y no terminaron, si el primer paso, el segundo paso de la excepción , la actualización del sistema progreso mensaje de notificación al consumidor, entonces este mensaje de fallo nunca será tratada, como es natural perdido, de hecho, no terminó de nuestro negocio.

Para evitar la pérdida de mensajes en el consumidor, el consumidor sólo puede actualizar el progreso después del mensaje es recibido y procesado, pero en casos extremos, surge un problema de consumo repetido de mensajes, tal como un mensaje después de que el proceso se completa, los consumidores Dang máquina, y el horario entonces el consumidor no ha actualizado, después de la reanudación de los consumidores, este mensaje todavía se consume a.

2, la forma de garantizar que el mensaje se ha consumido una sola vez

sistema de mensaje no puede garantizar que el mensaje en sí se consume sólo una vez, ya que el consumidor puede repetirse, el sistema empieza a tirar de la repetición de aguas abajo, que se repite se repiten mensaje puede causar reintento fracaso trajo repetida, dando como resultado la lógica de la compensación, para asegurar que el mensaje sólo se consume tiempo se puede lograr la utilización de la energía .

Y otras potencias es un concepto matemático, se repetidamente realizan las mismas operaciones y llevar a cabo una operación, el resultado en última instancia, llegar es el mismo.

Conceptualmente idempotente se puede ver, incluso si el mensaje se ejecuta varias veces no afectarán al sistema, entonces la forma de garantizar la igualdad de poderes en el uso de sistema de mensajería? Dado que los productores y los consumidores son susceptibles de producir mensajes duplicados, por lo que ambos extremos de productores y consumidores en la seguridad de poder.

Garantía de los productores de energía, etc. , en el momento de la producción del mensaje utilizando el algoritmo de nieve generador de mensajes a una identificación global, ID tiene un mapeo de mensajes de mantenimiento en el mensaje del sistema, si el mismo ID que ya existe en la tabla de asignación, se descarta el mensaje, Aunque el mensaje se entrega dos veces, pero en realidad, salvo uno, para evitar la duplicación de mensajes.

Seleccionado con el poder de los productores y otros middleware de mensajería que tiene una relación, ya que el sistema de mensajes no es necesario para lograr nuestra propia bajo el gran número de casos, no es muy bueno y otras facultades de control, al consumo y otros desarrollo de la energía de lo que El personal clave de control de dirección .

Se puede hacer desde ambos extremos de las operaciones generales de los consumidores y las capas de negocio idempotente, dependiendo de las necesidades de nuestro negocio.

En el nivel general, el uso de buenas noticias se genera ID único global generada después de que el mensaje se procesa con éxito en poner esta identificación global de los datos, un mensaje antes, comience con existe esta identificación global consulta de base de datos en el proceso, si existe, y luego directamente para dar el mensaje.

Utilizando este identificador único global se realiza mensaje idempotencia, el siguiente pseudo-código:

boolean isIDExisted = selectByID(ID); // 判断ID是否存在
if(isIDExisted) {
  return; //存在则直接返回
} else {
  process(message); //不存在,则处理消息
  saveID(ID);   //存储ID
}

Sin embargo, en casos extremos, este enfoque todavía ir mal, si el mensaje después del procesamiento, no se guarda suficiente para la base de datos, los consumidores de tiempo de parada reinicio, y recibirán el mensaje de nuevo después de la reanudación, la ejecución de consultas, y el mensaje el consumo no había sido o será realizado el consumo dos veces. transacción de base de datos puede ser introducido para resolver este problema, pero reducirá el rendimiento del sistema. Si se repite el mensaje de consumo no es particularmente estrictos requisitos, entonces esto no se introduce directamente en el esquema general de las cosas muy bien, después de todo, esto es una probabilidad muy pequeña de las cosas.

A nivel operativo, vamos a ser más selectiva, tales como el bloqueo optimista, el bloqueo pesimista, la memoria de-énfasis ( https://github.com/RoaringBitmap/RoaringBitmap) y otros métodos .

Tomamos cerraduras optimistas, por ejemplo, como damos un usuario más puntos, porque además operación integral no tiene que ser colocado en el negocio principal, por lo que puede utilizar el sistema de mensajería asíncrona para informar, para usar el bloqueo optimista, es necesario agregar la tabla de puntos un campo de número de versión. Y en el momento de la producción del primer mensaje de consulta y número de versión de esta cuenta junto con el mensaje enviado al sistema de avisos.

Pie de foto

Los consumidores reciben el mensaje y número de versión, el número de versión cuando lleva a la integración para llevar a cabo la operación de actualización de SQL, como este:

update score set score = score + 20, version=version+1 where userId=1 and version=1;

Después de esta noticia el éxito de los consumidores, se convierte en la versión 2, por lo que si hay duplicados version = 1 noticias otra vez tirado al consumidor, las sentencias SQL, y no ejecuta con éxito, lo que garantiza mensaje idempotencia.

Para asegurar que el mensaje se consume sólo una vez, tenemos que centrarnos en el poder de los consumidores de este período, la utilización para asegurar que los mensajes se consumen una vez.

Hoy en día, de pie en un middleware de mensajería en general nivel, charlamos cómo asegurar que los datos no se pierde y sólo se consume una vez, espero que el artículo de hoy para ayudarle a aprender o trabajar, si cree que el objeto de valor, como un punto de acogida Gracias.

finalmente

Actualmente en Internet tiene una gran cantidad de pesos pesados ​​de mensajería artículos relacionados middleware, cualquier similitud, por favor, perdóname arriba. El original no es fácil, la palabra código no es fácil, pero también la esperanza de que podemos apoyar. Si algo incorrecto en el texto, pero también mirar hizo, gracias.

hermano de cabeza plana de Internet

Supongo que te gusta

Origin www.cnblogs.com/jamaler/p/12467206.html
Recomendado
Clasificación