Red de conocimiento informático - Problemas con los teléfonos móviles - implementación rocketmq de cola de retraso

implementación rocketmq de cola de retraso

Descripción: la cola de retraso implementada por rocketmq solo admite períodos de tiempo de retraso específicos, 1 s, 5 s, 10 s, .... 2 h, y no puede admitir retrasos en ningún período de tiempo

Implementación específica: rocketmq envía retraso Cuando Al enviar un mensaje, primero envíe el mensaje a la cola especificada de acuerdo con el período de retraso (rocketmq almacena los mensajes en cada período de retraso en la misma cola) y luego gire estas colas a través de temporizadores para ver si el mensaje ha caducado. , el mensaje se envía a la cola del tema especificado. Si el mensaje caduca, el mensaje se envía a la cola del tema especificado. La ventaja de esto es que el tiempo de retraso de los mensajes en la misma cola es el mismo. Otra ventaja es que los mensajes en la cola se ordenan de forma ascendente. ordene según el tiempo de vencimiento del mensaje Para decirlo sin rodeos, la cuestión es que cuantos más mensajes haya en la cola, antes será el tiempo de vencimiento

Diagrama de flujo

Análisis de fuente:

Si desea obtener más información, puede echar un vistazo a la clase ScheduleMessageService

delayLevelTable define la relación entre el nivel de retraso y el tiempo de retraso. offsetTable almacena el desplazamiento del consumo de la cola correspondiente al nivel de retraso.

Utilice un temporizador para iniciar una tarea programada. Uso Un temporizador encapsula cada cola de análisis.

Utilice un temporizador para iniciar una tarea programada, encapsule cada cola de escaneo en una tarea y luego agréguela al temporizador.

Cada tarea de escaneo obtiene principalmente todos los elementos caducados en la cola. y enviarlo al tema especificado, mientras se elimina el mensaje en la cola retrasada

Resumen

Ventajas: el diseño es simple y todos los mensajes caducados en la cola se envían al tema especificado Tema: El diseño es simple, coloque todos los mensajes con el mismo tiempo de retraso en un temporizador

Desventajas: el temporizador es un hilo único, por lo que si la cantidad de mensajes retrasados ​​es muy grande, es posible que el hilo único no podrá procesarlo, lo que provocará que el mensaje caduque. Aún no se puede enviar.

Mejora: puede usar un temporizador para cada cola de retraso o usar temporizadores para escanear y luego eliminar mensajes en la cola de retraso. O utilice un temporizador para escanear y luego agregue un grupo de subprocesos para procesar los paquetes, lo que puede mejorar la eficiencia

.