RabbitMQ: poderoso middleware de mensajería para mensajería confiable

 Los middlewares de mensajería juegan un papel clave en los sistemas distribuidos modernos, proporcionan un método confiable y eficiente para la comunicación asincrónica y el desacoplamiento. En este blog, nos centraremos en RabbitMQ, un middleware de mensajería de código abierto ampliamente utilizado. Nos sumergiremos en las características de RabbitMQ, cómo funciona y cómo puede usarlo en sus aplicaciones para una mensajería confiable.

1. Introducción a RabbitMQ

RabbitMQ es un middleware de mensajería de código abierto basado en AMQP (Advanced Message Queuing Protocol). Proporciona un mecanismo de mensajería confiable, flexible y extensible que se usa ampliamente en varias industrias. La idea central de RabbitMQ es que el productor envía el mensaje al conmutador, el conmutador pasa el mensaje a la cola de acuerdo con las reglas de enrutamiento y luego el consumidor obtiene y procesa el mensaje de la cola.

2. Conceptos relacionados

RabbitMQ es un middleware de mensajes de código abierto escrito en Erlang e implementa el Protocolo avanzado de cola de mensajes (AMQP). Como sistema de mensajería confiable, flexible y escalable, RabbitMQ proporciona un mecanismo confiable para transferir datos entre aplicaciones.

La siguiente es una explicación detallada de algunas características y conceptos clave de RabbitMQ:

  1. Colas de mensajes: RabbitMQ utiliza colas de mensajes para almacenar y entregar mensajes. Una cola de mensajes es una estructura de datos de tipo primero en entrar, primero en salir (FIFO) que almacena mensajes temporalmente hasta que un consumidor está listo para recibirlos y procesarlos.

  2. Productor y Consumidor: El remitente del mensaje se llama productor, y el receptor del mensaje se llama consumidor. Los productores envían mensajes a las colas y los consumidores obtienen mensajes de las colas y los procesan.

  3. Queue: Queue es la parte central de RabbitMQ, que es el portador de almacenamiento y entrega de mensajes. Los productores envían mensajes a la cola y los consumidores obtienen mensajes de la cola. Las colas pueden ser persistentes, lo que significa que incluso si el servidor RabbitMQ está inactivo, los mensajes no se perderán.

  4. Intercambio (Exchange): El intercambio es el enrutador del mensaje, que envía el mensaje del productor a la cola. Enruta mensajes a una o más colas según reglas específicas. RabbitMQ proporciona diferentes tipos de conmutadores, incluidos conmutadores directos, conmutadores de tema, conmutadores de transmisión, etc.

  5. Vinculación: la vinculación asocia intercambios y colas para definir reglas de enrutamiento para mensajes entre intercambios y colas. Los enlaces especifican cómo se deben enrutar los mensajes desde los intercambios a las colas.

  6. Clave de enrutamiento: una clave de enrutamiento es un atributo que un productor especifica junto con un mensaje cuando lo envía. El intercambio utiliza la clave de enrutamiento para determinar a qué cola enrutar el mensaje.

  7. Persistencia: cuando las colas o los mensajes se marcan como persistentes, se conservan en el disco para evitar la pérdida de datos después de reiniciar RabbitMQ.

  8. Modo de publicación-suscripción: RabbitMQ admite el modo de publicación-suscripción, en el que un productor envía un mensaje al conmutador, y el conmutador transmite el mensaje a todas las colas vinculadas a él, y luego los consumidores de cada cola pueden recibir y procesar el mensaje.

  9. Mecanismo ACK: los consumidores pueden usar el mecanismo ACK para informar a RabbitMQ que el mensaje se recibió y procesó correctamente. RabbitMQ eliminará el mensaje de la cola solo después de que el consumidor lo reconozca explícitamente.

  10. Confirmación y persistencia de mensajes: RabbitMQ permite a los productores solicitar confirmación al enviar mensajes. Si un mensaje no se puede enrutar con éxito a una cola, o si ocurre un error durante el enrutamiento, RabbitMQ notificará al productor. Además, la persistencia de mensajes y colas garantiza que no se pierdan datos incluso después de reiniciar RabbitMQ.

En resumen, RabbitMQ es un middleware de mensajes fiable y flexible. Toma la cola de mensajes como núcleo y utiliza conceptos como conmutadores, colas y enlaces para enrutar y entregar mensajes. Proporciona un mecanismo de mensajería altamente confiable y características ricas, y se usa ampliamente en sistemas distribuidos, arquitecturas de microservicios, colas de tareas y otros escenarios para ayudar a las aplicaciones a lograr el desacoplamiento, la comunicación asíncrona y la garantía de confiabilidad.

3. Cómo funciona RabbitMQ

El principio de funcionamiento de RabbitMQ se puede resumir simplemente en los siguientes pasos:

1. El productor envía un mensaje al intercambio:

Los productores se conectan a RabbitMQ y envían mensajes a intercambios predefinidos. Los mensajes pueden contener cualquier dato estructurado como JSON, XML, etc.

String message = "Hello, RabbitMQ!";
channel.basicPublish(exchangeName, routingKey, null, message.getBytes());

2. El conmutador enruta el mensaje a la cola:

Un intercambio enruta mensajes a una o más colas vinculadas a él de acuerdo con reglas de enrutamiento predefinidas. Las reglas de enrutamiento se pueden basar en la coincidencia exacta, la coincidencia de patrones, etc.

channel.queueBind(queueName, exchangeName, routingKey);

3. El consumidor recibe el mensaje de la cola:

Los consumidores se conectan a RabbitMQ y se suscriben a colas de interés. Una vez que llega un mensaje a la cola, RabbitMQ enviará inmediatamente el mensaje a los consumidores suscritos para su procesamiento.

channel.basicConsume(queueName, true, new DefaultConsumer(channel) {
    @Override
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
        String message = new String(body, "UTF-8");
        System.out.println("Received message: " + message);
    }
});

4. El consumidor procesa el mensaje y envía una confirmación:

Una vez que los consumidores reciben el mensaje, pueden realizar el procesamiento de lógica empresarial correspondiente. Una vez que el mensaje se procese con éxito, el consumidor enviará un reconocimiento a RabbitMQ de que el mensaje se ha consumido y RabbitMQ puede eliminarlo de forma segura.

Un productor envía mensajes a un intercambio llamado "my_exchange" y enruta los mensajes a una cola llamada "my_queue" con la clave de enrutamiento "my_routing_key". El consumidor se suscribe a la cola "my_queue" y llama a la función de devolución de llamada para procesar el mensaje cuando lo recibe.

4. Características de RabbitMQ

RabbitMQ proporciona muchas funciones potentes que lo convierten en un middleware de mensajería ampliamente utilizado:

  • Persistencia : RabbitMQ puede persistir mensajes y colas en el disco, y los mensajes no se perderán incluso después de reiniciar el servidor.
  • Reglas de enrutamiento flexibles : mediante el uso de diferentes tipos de interruptores y claves de enrutamiento, se pueden lograr estrategias precisas de enrutamiento de mensajes.
  • Confiabilidad y capacidad de recuperación : RabbitMQ proporciona una variedad de mecanismos para garantizar la entrega confiable de mensajes, como reconocimiento de mensajes, transacción, confirmación del editor, etc.
  • Escalabilidad : RabbitMQ admite la implementación distribuida y el modo de clúster, que pueden lograr un alto rendimiento y una alta disponibilidad.
  • Cliente multilingüe : RabbitMQ proporciona una variedad de bibliotecas de cliente admitidas oficialmente, como Java, Python, Ruby, etc., para facilitar el uso de los desarrolladores en diferentes entornos de idioma.

5. Escenarios de aplicación de RabbitMQ en aplicaciones prácticas

Artículo de referencia:

【RabbitMQ】¿Qué es RabbitMQ? ¿Para qué sirve RabbitMQ? ¿Cuáles son los escenarios de aplicación? _Blog de Luyao Yezi-Blog CSDN

RabbitMQ tiene una amplia gama de aplicaciones en varios escenarios, que incluyen, entre otros:

  • Procesamiento de tareas asincrónicas : envíe tareas que consumen mucho tiempo a RabbitMQ y ejecútelas de forma asincrónica por parte de los consumidores para mejorar el rendimiento de la respuesta y la escalabilidad del sistema.
  • Arquitectura basada en eventos : al usar RabbitMQ para implementar la publicación y suscripción de eventos, se pueden desacoplar diferentes componentes suscribiéndose a eventos de interés.
  • Desacoplamiento de aplicaciones y control de flujo : mediante la introducción de middleware de mensajes, se pueden desacoplar diferentes aplicaciones y se pueden implementar mecanismos como el control de flujo y la degradación del servicio.
  • Recopilación y análisis de registros : use RabbitMQ para enviar mensajes de registro en el sistema distribuido al servidor de registro central para administración y análisis centralizados.

 5.1 Desacoplamiento entre servicios

Pedidos de usuarios, procesamiento de inventario. [Desacoplamiento entre servicios]

Antes de usar MQ:

Cuando el sistema es normal, el usuario realiza un pedido y el sistema de pedidos llama al sistema de inventario para realizar una operación de eliminación. Si la operación es exitosa, devolverá un mensaje para recordar que el pedido se realizó correctamente. Cuando el sistema es anormal, el sistema de inventario será inaccesible, lo que resultará en la incapacidad de ejecutar la operación de eliminación del pedido y, en última instancia, provocará la falla al realizar el pedido.

Después de usar MQ:

El sistema de pedidos y el sistema de inventario ya no interactúan entre sí y se ejecutan de forma independiente, logrando el propósito de desacoplar la aplicación. El sistema de pedidos solo necesita escribir el mensaje de pedido en MQ y luego puede ejecutar directamente el siguiente paso. En este momento, incluso si el sistema de inventario es anormal, no afectará el funcionamiento del sistema de pedidos, y el registro de eliminación de inventario del pedido se guardará permanentemente en MQ hasta que el sistema de inventario vuelva a la normalidad y se suscriba al pedido. mensaje de MQ para el consumo hasta que tenga éxito.

Antes de usar MQ:


Después de usar MQ:

5.2  Realizar comunicación asíncrona

Registro de usuario, envío de SMS, correo electrónico . [Realizar comunicación asíncrona]

Antes de usar MQ:

Todo el proceso de operación se completa en el hilo principal. Haga clic en Registro de usuario--"Agregar usuario en almacenamiento--"Enviar correo electrónico--"Enviar SMS. Cada paso debe esperar a que se complete el paso anterior antes de poder ejecutarse. Además, el tiempo de respuesta de cada paso de la operación no es fijo. Si hay demasiadas solicitudes, llevará mucho tiempo solicitar el hilo principal, ralentizará la respuesta e incluso provocará un bloqueo, lo que afecta gravemente la experiencia del usuario.

Después de usar MQ:

El subproceso principal solo necesita procesar las operaciones de almacenamiento que consumen menos tiempo y luego escribir los mensajes que se procesarán en la cola de mensajes de MQ y luego suscribirse a los mensajes en la cola de mensajes para que los consuman diferentes sistemas de correo y sistemas de SMS independientes en al mismo tiempo. De esta manera, la cola de mensajes se utiliza como intermediario para almacenar y entregar mensajes, lo que no solo requiere mucho tiempo y consume muy pocos recursos, sino que también un solo servidor puede soportar más solicitudes simultáneas.


 

5.3  Recorte de picos de caudal

Ventas flash de productos básicos y compras instantáneas. 【Recorte de pico de flujo】

La reducción de los picos de tráfico es un escenario común en las colas de mensajes y, por lo general, se usa en ventas flash o actividades de compras grupales.

Antes de usar MQ: para las actividades de ventas flash y compras de pánico, el tráfico generado por el acceso de los usuarios será muy grande, e incluso aparecerán decenas de millones de solicitudes en el mismo período de tiempo. Este aumento de tráfico instantáneo, la configuración de nuestro sistema de aplicaciones es insoportable. , hará que el sistema se bloquee directamente.

Por ejemplo: el sistema A generalmente solicita 100 solicitudes por segundo y el sistema funciona de manera estable; sin embargo, hay un pico de actividad a las 8:00 p. m. y la cantidad de solicitudes aumenta a 10,000 por segundo y el sistema puede procesar un máximo de 1.000 solicitudes por segundo, lo que provoca que el sistema se bloquee. 

Después de usar MQ: cuando una gran cantidad de usuarios realizan solicitudes de pico, rechazamos esa gran solicitud de tráfico en la capa superior del procesamiento comercial del sistema y la transferimos a MQ en lugar de verterla directamente en nuestra interfaz. Aquí, la cola de mensajes de MQ actúa como caché.

Por ejemplo: 1 millón de usuarios solicitan 5000 solicitudes por segundo durante el período pico. Escribir estas 5000 solicitudes en el sistema MQ solo puede procesar 2000 solicitudes por segundo, porque MySQL solo puede manejar 2000 solicitudes; el sistema extrae 2000 solicitudes por segundo. Más de puedes manejar

Antes de usar MQ:

 Después de usar MQ:

5.4 Otros escenarios de aplicación:

1. Sistema de procesamiento de pedidos:

En una plataforma de comercio electrónico, RabbitMQ se puede utilizar para procesar pedidos. Cuando un usuario realiza un pedido, la información del pedido se publica en el conmutador RabbitMQ y luego los consumidores relacionados obtienen el mensaje del pedido de la cola y lo procesan, como la verificación del pedido, la gestión del inventario, el pago, etc.

2. Recopilación y distribución de registros:

Suponga que tiene varias aplicaciones que generan registros y desea procesarlos y almacenarlos de forma centralizada. Cada aplicación puede publicar mensajes de registro en un intercambio llamado "log_exchange", y luego diferentes consumidores se suscriben al intercambio y escriben los mensajes de registro en la base de datos o los envían al sistema de análisis de registros.

3. Transmisión de datos en tiempo real:

Si hay un sistema de monitoreo en tiempo real, los datos del sensor deben transmitirse a la plataforma de monitoreo en tiempo real para su procesamiento y visualización. El sensor publica los datos en el conmutador RabbitMQ, y el consumidor de la plataforma de monitoreo se suscribe al conmutador y procesa los datos para realizar funciones de alarma y monitoreo en tiempo real.

4. Procesamiento de tareas asincrónicas:

Supongamos que hay una aplicación que necesita manejar muchas tareas que consumen mucho tiempo, como el procesamiento de imágenes, la conversión de PDF, etc. La aplicación publica tareas en la cola de RabbitMQ y, luego, varios nodos de trabajo actúan como consumidores para obtener tareas de la cola y procesarlas para lograr un procesamiento paralelo de las tareas y reducir la presión sobre la aplicación principal.

5. Sistema de notificación de mensajes:

 Supongamos que en un sistema de suscripción, los usuarios pueden suscribirse a diferentes temas o eventos. Cuando se publica un nuevo mensaje, RabbitMQ enrutará el mensaje a la cola correspondiente y luego los usuarios que se suscriban a la cola recibirán las notificaciones correspondientes. Este método se puede utilizar para implementar la suscripción por correo electrónico, envío de noticias y otras funciones.

6. Arquitectura de microservicios:

En una arquitectura de microservicios, la mensajería y la colaboración pueden ser necesarias entre diferentes servicios. El uso de RabbitMQ puede realizar el desacoplamiento y la comunicación asincrónica entre servicios, y cada servicio puede enviar y recibir mensajes a través de conmutadores y colas, logrando así un acoplamiento débil entre microservicios.

6. Instalación de RabbitMQ

Dirección del sitio web oficial:

RabbitMQ: transmisión y mensajería flexibles y fáciles de usar — ​​RabbitMQ

6.1 instalación de cerveza

brew update #更新一下homebrew
brew install rabbitmq   #安装rabbitMQ 

Resultado de la instalación:

==> Advertencias
==>
Complemento de administración de rabbitmq habilitado de forma predeterminada en http://localhost:15672

Para reiniciar rabbitmq después de una actualización:
  brew services reinicie rabbitmq
O, si no desea/necesita un servicio en segundo plano, simplemente puede ejecutar:
  CONF_ENV_FILE="/opt/homebrew/etc/rabbitmq/rabbitmq-env.conf" /opt/ homebrew/opt/rabbitmq/sbin/rabbitmq-servidor

 La ruta de instalación de rabbitmq:

/opt/homebrew/opt/rabbitmq

6.2, configurar variables de entorno

1,

vi ~/.bash_profile

2, 

export RABBIT_HOME=${PATH}:/opt/homebrew/opt/rabbitmq
export PATH=${PATH}:$RABBIT_HOME/sbin

3, 

source ~/.bash_profile

6.3, inicie RabbitMQ

1. Ejecute
el servidor rabbitmq en primer plano

2. Ejecute
rabbitmq-server-tached en segundo plano

3. Ver el estado de ejecución
del estado de rabbitmqctl

4. Inicie el complemento web
rabbitmq-plugins enable rabbitmq_management

5. Reinicie
el reinicio del servidor rabbitmq

5. Cerrar
la parada de rabbitmqctl

6.4 Acceder a MQ

1. Dirección del navegador


http://localhost:15672/
El nombre de usuario y la contraseña predeterminados son invitados

Agregar usuario
rabbitmqctl add_user miaojiang 123

Establecer el usuario como administrador
rabbitmqctl set_user_tags miaojiang administrador

Configure los usuarios para iniciar sesión de forma remota en
rabbitmqctl set_permissions -p "/" miaojaing ".*" ".*" ".*"

Ver cuentas recién agregadas

conejomqctl lista_usuarios

Ver los permisos usados
​​rabbitmqctl list_permissions -p/

Siete, aplicación del proyecto Spring Boot RabbitMQ

7.1 Agregue la dependencia de Maven:

Agregue la dependencia de la biblioteca del cliente RabbitMQ al archivo pom.xml de su proyecto

<!--AMQP依赖,包含RabbitMQ-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

7.2 Configurar la conexión RabbitMQ:

Agregue información de conexión de RabbitMQ en el archivo de configuración de Spring Boot (application.properties o application.yml).

aplicaciones.propiedades:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

Configure los parámetros de mq en application.yml:

spring:
  rabbitmq:
    #设置RabbitMQ的IP地址
    host: localhost
    #设置rabbitmq服务器用户名
    username: guest
    #设置rabbitmq服务器密码
    password: guest
    #设置rabbitmq服务器连接端口
    port: 5672

7.3 Crear un interruptor

nombre de interruptor personalizado

Crea un intercambio llamado "myExchange"

package com.example.usermanagement.mq;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {
    /*
    使用 @Configuration 注解创建一个配置类,并通过 @Bean 注解创建了一个名为 declareExchange 的方法,用于声明创建交换机。请根据实际情况修改交换机名称、类型和持久化设置。
     */

    public static final String EXCHANGE_NAME = "myExchange";

    @Bean
    public Exchange declareExchange() {
        return ExchangeBuilder.directExchange(EXCHANGE_NAME)
                .durable(true)
                .build();
    }
}

7.4 Crear un remitente de mensajes

Crear un remitente de mensajes: cree una clase de remitente de mensajes para enviar mensajes a RabbitMQ

package com.example.usermanagement.mq;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessageSender{

    private final AmqpTemplate amqpTemplate;
    private final String exchangeName = "myExchange"; // 自定义交换机名称

    @Autowired
    public MessageSender(AmqpTemplate amqpTemplate) {
        this.amqpTemplate = amqpTemplate;
    }

    public void sendMessage(Object message) {
        amqpTemplate.convertAndSend(exchangeName, "", message); // 发送消息到默认交换机和空路由键
    }
}

Aviso:

 El tipo sendMessage usa el tipo Object

7.5 Fondo de administración de RabbitMQ para agregar columnas

paso:

  1. Abra un navegador e ingrese la URL del fondo de administración de RabbitMQ. De forma predeterminada, la URL es http://localhost:15672/. Asegúrese de que su servidor RabbitMQ esté funcionando y en el número de puerto correcto.

  2. Ingrese el nombre de usuario y la contraseña para iniciar sesión en el fondo de administración de RabbitMQ. De forma predeterminada, el nombre de usuario es guest, y la contraseña también es guest. Si ha cambiado su nombre de usuario y contraseña, inicie sesión con sus credenciales personalizadas.

  3. Después de iniciar sesión con éxito, verá la interfaz principal del fondo de administración de RabbitMQ. En la barra de navegación superior, elija QueuesPestañas.

  4. En Queuesla página, verá una lista de las colas existentes. Si desea crear una nueva cola, haga clic en Add a new queueel botón.

  5. En la página para agregar una cola, complete la siguiente información:

    • Name: El nombre de la cola. Proporcione un nombre único para la cola. (como mi cola)
    • Durability: Persistencia de la cola. Seleccione Sí o No para especificar si la cola debe persistir en los reinicios del servicio RabbitMQ.
    • Auto delete: Eliminación automática de la cola. Seleccione Sí o No para especificar si se eliminará la cola cuando se desconecte el último consumidor.
    • Arguments: Parámetros adicionales para la cola. Esto es opcional, puede establecer algunos parámetros específicos para la cola.
  6. Después de completar la información de la cola, haga clic en Add queueel botón para crear la cola.

  7. Después de que la creación sea exitosa, verá Queuesla cola recién agregada en la página. Puede ver los detalles de la cola en esta página, incluida la cantidad de mensajes, la cantidad de consumidores, etc.

http://localhost:15672/#/colas

Simplemente agregue el nombre de la cola 

7.6 Llamando al productor

1. MessageSenderInstancia de inyección

@Autowired
private MessageSender messageSender;

2. Llame al método donde se debe enviar el mensaje messageSender.sendMessage. De acuerdo con su lógica comercial, puede llamar a este método en una ubicación adecuada. Por ejemplo, después de que el pedido se haya creado correctamente, puede agregar el siguiente código:

messageSender.sendMessage("订单已创建:" + order.getOrderId());

7.7 Crear un receptor de mensajes

Crear un receptor de mensajes: cree una clase de receptor de mensajes para procesar los mensajes RabbitMQ recibidos.

Aquí escribimos directamente la lógica para procesar mensajes RabbitMQ.

package com.example.usermanagement.mq;

import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MessageReceiver {

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("your_queue_name"),
            exchange = @Exchange(value = RabbitMQConfig.EXCHANGE_NAME)
//            key = "your_routing_key"
    ))
    public void receiveMessage(Object message) {
        System.out.println("Received message: " + message);
        // 处理消息逻辑
    }
}

Aviso:

 El tipo sendMessage usa el tipo Object

your_queue_nameReemplace con el nombre de la cola que desea escuchar (como myQueue)

Reemplace your_routing_keycon la clave de enrutamiento adecuada (si se usa)

Ocho, introducción a la interfaz MQ

Descripción general: proporciona un informe general que incluye información del servidor y del clúster, estado del nodo, resúmenes de colas y conexiones, y entradas de registro relacionadas recientes.
Conexiones: muestra las aplicaciones cliente actualmente conectadas al servidor RabbitMQ, incluido el nombre de la conexión, el protocolo, el host virtual y otra información.
Canales: muestra los canales activos en cada conexión y algunas métricas relacionadas con cada canal, como la cantidad de consumidores, la cantidad de mensajes no reconocidos, etc.
Intercambios: enumera todos los intercambios, incluido el nombre, el tipo, las colas enlazadas y la cantidad enlazada.
Colas (queue): Muestra todas las colas, incluyendo información como nombre, número de mensajes, número de consumidores, etc. También puede realizar algunas operaciones a través de la cola, como crear, eliminar, vaciar, etc.
Admin (administrador): proporciona algunas funciones de gestión avanzadas, como gestión de usuarios y autoridades, gestión de host virtual, gestión de complementos, etc.

8.1 Resumen

Descripción general: proporciona un informe general que incluye información del servidor y del clúster, estado del nodo, resúmenes de colas y conexiones, y entradas de registro relacionadas recientes.

8.2 Conexiones

Conexiones: muestra las aplicaciones cliente actualmente conectadas al servidor RabbitMQ, incluido el nombre de la conexión, el protocolo, el host virtual y otra información.

8.3 Canales


Canales: muestra los canales activos en cada conexión y algunas métricas relacionadas con cada canal, como la cantidad de consumidores, la cantidad de mensajes no reconocidos, etc.

8.3.1 captación previa (prefetch)

En Message Queue (Message Queue), la captación previa (prefetch) es un concepto importante, que se utiliza para controlar la velocidad a la que los consumidores reciben mensajes de la cola de mensajes.

Prefetch se refiere a obtener una cierta cantidad de mensajes en la memoria caché local antes de que el consumidor obtenga el mensaje de la cola de mensajes para que el consumidor lo procese rápidamente. De esta forma, se puede mejorar el rendimiento y la eficiencia del sistema, y ​​se puede reducir la sobrecarga de transmisión de la red.

Específicamente, la captación previa puede ayudar a evitar las siguientes situaciones:

  1. Despacho justo : cuando varios consumidores procesan mensajes en paralelo, si no hay un límite de captación previa, un consumidor puede recibir demasiados mensajes a la vez, lo que genera menos oportunidades para otros consumidores. Al configurar la captación previa, puede asegurarse de que cada consumidor solo pueda recibir una cierta cantidad de mensajes para lograr una distribución de mensajes más justa.

  2. Equilibrio de carga del consumidor : cuando hay una gran cantidad de mensajes pendientes en la cola de mensajes, los consumidores pueden acumular mensajes debido a la baja velocidad de procesamiento. Al establecer un valor de captación previa adecuado, puede limitar la cantidad de mensajes que los consumidores reciben cada vez, de modo que los mensajes se puedan distribuir uniformemente a varios consumidores, logrando así el equilibrio de carga.

En RabbitMQ, la configuración de captación previa se puede basic.qosconfigurar a través del método. Por ejemplo, el siguiente código establecerá el recuento de captación previa en 10:

channel.basic_qos(prefetch_count=10)

Tenga en cuenta que la configuración de captación previa debe ajustarse de acuerdo con los escenarios de aplicación específicos y las condiciones de carga del sistema. La configuración adecuada de la captación previa puede mejorar el rendimiento y la estabilidad del sistema.

8.4 Intercambios (conmutadores)


Intercambios: enumera todos los intercambios, incluido el nombre, el tipo, las colas enlazadas y la cantidad enlazada.

8.5 Colas (cola)


Colas (queue): Muestra todas las colas, incluyendo información como nombre, número de mensajes, número de consumidores, etc. También puede realizar algunas operaciones a través de la cola, como crear, eliminar, vaciar, etc.

8.6 Administrador (administrador)


Admin (administrador): proporciona algunas funciones de gestión avanzadas, como gestión de usuarios y autoridades, gestión de host virtual, gestión de complementos, etc.

Supongo que te gusta

Origin blog.csdn.net/qq_39208536/article/details/132227106
Recomendado
Clasificación