RabbitMQ implementa un diseño detallado y un plan de prueba para la entrega de mensajes al 100%

objetivos

  • Realice una cola de mensajes que garantice el 100% de la entrega o el consumo de mensajes en condiciones relativamente duras.

Desafíos y soluciones sencillas

  • 1. Dice 100% de entrega, si su mq cuelga, ¿cómo entregar?
    使用镜像队列
  • 2. ¿Qué sucede si la red es inestable y el mensaje no se envía al intercambio o la cola?
    conform模式 和 return模式 配合消息重发的线程池重发消息
    • 2.1 El mensaje se envía a un determinado mq, pero este mq pierde energía repentinamente y es demasiado tarde para sincronizar con otras colas espejo.
      消息持久化至硬盘,消息重启恢复
    • 2.2 ¿Qué debo hacer si un mensaje acaba de llegar a la memoria y no se ha solidificado en el disco duro a tiempo, y ocurre una falla en este momento que hace que el mensaje se pierda?
      这次消息是真的丢失了,但是有补偿机制
  • 3. ¿Qué sucede si falla la ejecución del mensaje (consumo) o el mensaje no se envía a la cola después del consumo?
    (1)发送消息时,除了发给消费端,还发给了补偿端做消息登记。 (2)消费端消费后,会把消息发送到补偿端进行同步。 (3)补偿机制会在间隔时间内重新发消息到补偿端,获取消息状态,要么重发,要么关闭。
  • 4. ¿Qué pasa si el extremo de producción envía demasiados mensajes o el mecanismo de compensación envía demasiados mensajes, cómo asegurar un consumo idempotente?
    redis分布式锁:Redisson实现消息幂等
  • 5. ¿Qué debo hacer si es demasiado tarde para consumir cuando entra mucho tráfico en mq?
    mq有削峰填谷的算法
  • 6. En comparación con un solo nodo, ¿la garantía de entrega del 100% anterior tiene un gran impacto en el rendimiento?
    测试方案: (1)镜像队列在不同宕机条件下的消息可达性测试 (2)单节点和百分百投递队列的性能对比测试。
  • 7. La clase de cola de mensajes es un singleton administrado por Spring, cómo asegurarse de que no causará problemas de seguridad de subprocesos cuando se hace referencia a ella en varios lugares
    将scope改成request

Diagrama de arquitectura de implementación

Inserte la descripción de la imagen aquí
Fuente de la imagen: RabbitMQ garantiza un plan de éxito de entrega de mensajes del 100%

Pasos de implementación

  • Una vez que el mensaje se entrega al cliente, el mensaje se colocará en la base de datos (base de datos a) como una credencial para una inspección futura (compensación del mensaje)
  • Los mensajes se envían a dos colas mq al mismo tiempo, una se usa para almacenar información en búfer y el consumo posterior (reducción de picos y llenado de valles con tráfico intenso), y la otra se usa como mecanismo de compensación para obtener mensajes, consultar y retransmitir mensajes, y dejarlos en ( Base de datos b)
  • La recepción del mensaje después del consumo por parte del servidor se envía a la cola y el mecanismo de compensación actualiza los datos (base de datos b)
  • El hilo de retraso en el lado del consumidor consulta el mensaje en este momento, y el mecanismo de compensación determina si reenviar el mensaje o esperar el mensaje de acuerdo con la cantidad de consultas.

Diagrama de arquitectura de prueba

Inserte la descripción de la imagen aquí

Diseño de casos de prueba

  • Escriba un programa de cliente, use el paquete de jarra de entrega 100% encapsulado para transmitir mensajes y exponga una interfaz al exterior.
  • Utilice jmeter para generar presión y carga a través de Nginx en las interfaces de dos programas cliente para probar el tiempo de finalización y la tasa de éxito de la entrega de 1.000 datos, 10.000 datos y 100.000 datos respectivamente.
  • El consumidor usa una interfaz para recibir datos y usa la suspensión de subprocesos durante 5 milisegundos para simular los datos de procesamiento de subprocesos.
  • Después de que el consumidor no esté procesando los datos, verifique el estado de caída de mensajes y el estado de consumo de mensajes de la base de datos
  • Fórmula de tiempo de consumo :
    • Tiempo de consumo = el momento en que se imprimió el último dato del lado del consumidor: el momento para iniciar la presión,
    • Aquí puede probar la eficiencia de entrega de la cola de espejo, el nodo único, la solidificación y no solidificación de mensajes.
  • Tasa de garantía de entrega de mensajes :
    • Consultar datos de almacenamiento de base de datos / datos de presión,
    • Consultar la base de datos para completar los datos de consumo / presión,
    • El mínimo de los dos es la tasa de garantía de entrega de mensajes.

Continuará

Supongo que te gusta

Origin blog.csdn.net/ljfirst/article/details/106012727
Recomendado
Clasificación