Introducción a RocketMQ
RocketMQ se llama Metaq dentro de Alibaba (originalmente se llamaba "La Metamorfosis", que es una obra maestra de la novela corta de Kafka, y puede verse como un homenaje a Kafka).
RocketMQ es la versión de código abierto de Metaq desde Metaq 3.0.
Metaq se utiliza ampliamente en varios negocios internos de Alibaba Group, Ant Financial, Cainiao y otras empresas, y decenas de miles de aplicaciones están conectadas al sistema. Ha respaldado con éxito las promociones de Double Eleven (un billón de mensajes) a lo largo de los años, ha tenido un buen desempeño en términos de rendimiento, estabilidad, confiabilidad, etc., y desempeña un papel decisivo en todo el sistema tecnológico de Alibaba y la plataforma grande y mediana. estrategias.
Metaq en última instancia se originó en Kafka y tomó prestados muchos diseños excelentes de Kafka en los primeros días. Sin embargo, dado que Kafka está escrito en el lenguaje Scale y Alibaba usa principalmente Java, no puede cumplir con los escenarios de comercio electrónico y negocios financieros de Alibaba. Por lo tanto, el equipo reinventó la rueda usando Java e hizo muchas modificaciones y optimizaciones.
Antes de esto, Taobao tenía un middleware de mensajes llamado Notify, que luego fue reemplazado gradualmente por Metaq.
La primera generación de Notify adopta el modo push para resolver el problema de los mensajes de transacciones; la segunda generación de MetaQ adopta el modo pull para resolver el problema de los mensajes secuenciales y la gran acumulación. En comparación con Kafka, que está escrito en lenguaje Scale, RabbitMQ está escrito en lenguaje Erlang, y es más probable que otros proveedores investiguen y personalicen ampliamente RocketMQ basado en Java después de ser de código abierto.
Proceso de ejecución:
La suscripción de mensajes de RocketMQ tiene dos modos, uno es el modo push (MQPushConsumer), es decir, MQServer envía activamente al consumidor el otro es el modo pull ( MQPullConsumer), es decir, el consumidor lo lleva activamente al servidor MQ cuando es necesario. Sin embargo, cuando se implementan, tanto el modo push como el pull utilizan esencialmente el pull activo por parte del consumidor, es decir, el consumidor sondea para extraer mensajes del Broker.
Ventajas: Es en tiempo real.
Desventajas: la potencia de procesamiento del consumidor es limitada, por lo que cuando envía una gran cantidad de mensajes al consumidor, es fácil provocar una acumulación de mensajes en el lado del consumidor y, en casos graves, el cliente quedará abrumado.
La diferencia entre push y pull:
En push, el consumidor encapsula la operación de sondeo a largo plazo y registra el oyente MessageListener, despertando así el consumeMessage() del messageListener para consumir mensajes.
Durante el proceso de envío, consumeMessage() de MessageListener despertará al oyente del mensaje para recibir el mensaje, lo que se siente como enviar el mensaje al usuario.
En el método Pull, el proceso de obtención del mensaje requiere que el usuario lo llame activamente. Primero, obtienen la colección de MessageQueue a través del tema que pretenden consumir, atraviesan la colección de MessageQueue y luego obtienen los mensajes de cada MessageQueue en lotes. Una vez completada la adquisición, registran el desplazamiento inicial de la siguiente cola de adquisición hasta que se completa la adquisición. completado y luego cambie a la nueva cola Reciba el mensaje nuevamente.
RocketMQ utiliza el mecanismo de sondeo largo para simular el efecto push, que tiene en cuenta las ventajas de ambos.
RocketMQ utiliza sondeos largos para simular el envío.