[RabbitMQ] Conceptos básicos de MQ, introducción e instalación de RabbitMQ

El concepto básico de MQ

Descripción general de MQ

El nombre completo de MQ es Message Queue (cola de mensajes), que es un contenedor para almacenar mensajes durante la transmisión de mensajes. Se utiliza principalmente para la comunicación entre sistemas distribuidos.

Generalmente, nuestros sistemas distribuidos se comunican de dos formas:

  • El primer método: el inserte la descripción de la imagen aquí
    sistema A accede al sistema B directamente a través de llamadas remotas

  • El segundo tipo:
    inserte la descripción de la imagen aquí

    El emisor se llama productor y el receptor se llama consumidor

    El sistema A depende de un tercero, y el tercero envía datos al sistema B para lograr una comunicación indirecta. Las colas de mensajes pertenecen a este método.

Ventajas y desventajas de MQ

MQ tiene tres ventajas:

  • desacoplamiento de aplicaciones
  • Aceleración asíncrona
  • Aceleración asíncrona

Aspectos de desacoplamiento de aplicaciones
inserte la descripción de la imagen aquí
Cuando el usuario hace clic en el botón para realizar un pedido, accede al sistema de pedidos, y luego el sistema de pedidos necesita acceder a los sistemas de inventario, pago y logística, aquí tiene dos formas de acceder. Una es una llamada remota directa, por lo que el sistema de pedidos y los tres sistemas de la derecha se acoplarán entre sí, lo que causará algunos problemas.

Por ejemplo, si nuestro sistema de inventario no funciona, nuestro sistema de pedidos tampoco funcionará:

inserte la descripción de la imagen aquí

Suponiendo que al usar el sistema de pedidos ahora, hay otro sistema X llamado, entonces tenemos que modificar el código del sistema de pedidos, lo que obviamente es muy problemático cuando la demanda aumenta y cambia con frecuencia.

inserte la descripción de la imagen aquí

Cuanto más acoplado esté el sistema, menor será la tolerancia a fallos y menor la mantenibilidad.

Y si usamos MQ, cuando el usuario realiza un pedido para acceder al sistema de pedidos, el sistema de pedidos solo necesita enviar un mensaje a MQ. En este momento, puede informar al usuario de que el pedido se realizó correctamente. El sistema de la derecha solo necesita sacar los datos del mensaje de pedido de MQ y luego procesarlos en su propio sistema. Y si el sistema de inventario no funciona en este momento, el sistema de pedidos no tendrá efecto.
inserte la descripción de la imagen aquí

Aceleración asíncrona
inserte la descripción de la imagen aquí
La operación de realizar un pedido requiere mucho tiempo: 20 + 300 + 300 + 300 = 920 ms Después
de que el usuario hace clic en el botón de pedido, debe esperar 920 ms para obtener la respuesta del pedido, ¡lo cual es demasiado lento!

inserte la descripción de la imagen aquí

Después de que el usuario haga clic en el botón de pedido, solo necesita esperar 25 ms para obtener la respuesta del pedido (20 + 5 = 25 ms).
Mejore la experiencia del usuario y el rendimiento del sistema (la cantidad de solicitudes procesadas por unidad de tiempo).

Recortando picos y rellenando valles

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
Después de usar MQ, limite la velocidad de consumo de mensajes a 1000. De esta manera, los datos generados durante el período pico inevitablemente se atrasarán en MQ, y el pico se "cortará", pero debido a la acumulación de mensajes, un período de tiempo después del período pico Dentro de un cierto período de tiempo, la velocidad de consumo de noticias aún se mantendrá en 1000 hasta que se consuma la acumulación de noticias, lo que se denomina "llenar el valle".

Después de usar MQ, se puede mejorar la estabilidad del sistema.

Desventajas de MQ:

inserte la descripción de la imagen aquí

  • Disponibilidad reducida del sistema Cuantas
    más dependencias externas introduzca el sistema, peor será la estabilidad del sistema. Una vez que MQ se caiga, afectará el negocio. ¿Cómo garantizar la alta disponibilidad de MQ?
  • Mayor complejidad del sistema
    La adición de MQ ha aumentado considerablemente la complejidad del sistema. En el pasado, había llamadas remotas síncronas entre sistemas, pero ahora las llamadas asíncronas se realizan a través de MQ. ¿Cómo garantizar que los mensajes no se consuman repetidamente? ¿Cómo lidiar con la pérdida de mensajes? Entonces, ¿para garantizar el orden de entrega del mensaje?
  • Problema de coherencia El
    sistema A termina de procesar el negocio y envía los datos del mensaje a los sistemas B, C y D a través de MQ. Si los sistemas B y C procesan correctamente, el sistema D falla. ¿Cómo garantizar la consistencia del procesamiento de datos de mensajes?

Productos MQ comunes

En la actualidad, hay muchos productos MQ en la industria, como RabbitMQ, RocketMQ, ActiveMQ, Kafka, ZeroMQ, MetaMq, etc., y también hay casos de uso directo de Redis como cola de mensajes. Considere sus propias necesidades y productos MQ. características de manera integral.

inserte la descripción de la imagen aquí

Introducción a RabbitMQ

AMQP, es decir Advanced Message Queuing Protocol(高级消息队列协议), es un protocolo de red, un estándar abierto del protocolo de capa de aplicación, diseñado para middleware orientado a mensajes. El cliente y el middleware de mensajes basados ​​en este protocolo pueden transmitir mensajes, y no está limitado por diferentes productos de cliente/middleware, diferentes lenguajes de desarrollo y otras condiciones. En 2006, se publicó la especificación AMQP. Analogía HTTP.

inserte la descripción de la imagen aquí

El proceso de AMQP es: el productor publica el mensaje en el conmutador, y el conmutador envía el mensaje a diferentes colas para su almacenamiento a través de reglas de enrutamiento, y luego el consumidor supervisa y toma el mensaje correspondiente de la cola para su consumo. ,

En 2007, se lanzó RabbitMQ 1.0 desarrollado por Rabbit Technology Company basado en el estándar AMQP. RabbitMQ está desarrollado en lenguaje Erlang. El lenguaje Erlang fue diseñado por Ericson, un lenguaje especialmente desarrollado para el desarrollo de sistemas altamente concurrentes y distribuidos, y es ampliamente utilizado en el campo de las telecomunicaciones.

La estructura básica de
inserte la descripción de la imagen aquí
RabbitMQ es la siguiente: Conceptos relacionados en RabbitMQ:

  • Broker: La aplicación para recibir y distribuir mensajes, RabbitMQ Server es Message Broker
  • Virtual host: Diseñado para factores de seguridad y tenencia múltiple, los componentes básicos de AMQP se dividen en un grupo virtual, similar al concepto de espacio de nombres en la red. Cuando varios usuarios diferentes utilizan los servicios proporcionados por el mismo servidor RabbitMQ, se pueden dividir varios hosts virtuales y cada usuario crea un intercambio/cola en su propio host virtual, etc.
  • Connection: conexión TCP entre editor/consumidor y corredor
  • ChannelNota: si se establece una conexión cada vez que se accede a RabbitMQ, la sobrecarga de establecer una conexión TCP cuando el volumen de mensajes es grande será enorme y la eficiencia será baja. El canal es una conexión lógica establecida dentro de la conexión. Si la aplicación admite subprocesos múltiples, por lo general cada subproceso crea un canal independiente para la comunicación. El método AMQP incluye el ID del canal para ayudar al cliente y al intermediario de mensajes a identificar el canal, de modo que los canales estén completamente aislado de. Como una conexión liviana, Channel reduce en gran medida la sobrecarga del sistema operativo para establecer una conexión TCP
  • Exchange: el mensaje llega a la primera parada del intermediario, de acuerdo con las reglas de distribución, coincide con la clave de enrutamiento en la tabla de consultas y distribuye el mensaje a la cola. Los tipos comúnmente utilizados son: directo (punto a punto), tema (publicación-suscripción) y fanout (multidifusión)
  • Queue: El mensaje finalmente se envía aquí y espera a que el consumidor lo recoja
  • Binding: conexión virtual entre el intercambio y la cola, el enlace puede contener una clave de enrutamiento. La información vinculante se almacena en la tabla de consulta en el intercambio como base para la distribución de mensajes.

RabbitMQ proporciona 6 modos de trabajo:

  • modo simple
  • colas de trabajo
  • Publicar/Suscribir modo de publicación y suscripción
  • Modo de enrutamiento de enrutamiento
  • Modo de tema de temas
  • Modo de llamada remota RPC (llamada remota, no demasiado MQ; sin introducción por ahora).

Introducción al modo correspondiente del sitio web oficial: https://www.rabbitmq.com/getstarted.html

inserte la descripción de la imagen aquí

Finalmente, hablemos de JMS:

JMS Java 消息服务(JavaMessage Service)应用程序接口es una API para middleware orientado a mensajes en la plataforma Java

  • JMS es una de las especificaciones de JavaEE, análoga a JDBC
  • Muchos middleware de mensajes implementan la especificación JMS, por ejemplo: ActiveMQ.
  • RabbitMQ no proporciona oficialmente paquetes de implementación de JMS, pero la comunidad de código abierto ha

Instalación de RabbitMQ

1. Instalar entorno dependiente

La instalación en línea depende del entorno:

yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz

2. Instalar Erlang

subir

erlang-18.3-1.el7.centos.x86_64.rpm
socat-1.7.3.2-5.el7.lux.x86_64.rpm
rabbitmq-server-3.6.5-1.noarch.rpm

# 安装
rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm

Si ocurre el siguiente error

inserte la descripción de la imagen aquí

Significa que la versión gblic es demasiado baja. Podemos ver la versión gblic de la máquina actual

strings /lib64/libc.so.6 | grep GLIBC

inserte la descripción de la imagen aquí

La versión más alta actual es 2.12, que requiere 2.15, por lo que debe actualizar glibc

  • Use yum para actualizar e instalar dependencias

    sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y
    
  • descargar paquete rpm

    wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-utils-2.17-55.el6.x86_64.rpm &
    wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-static-2.17-55.el6.x86_64.rpm &
    wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm &
    wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm &
    wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm &
    wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm &
    wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/nscd-2.17-55.el6.x86_64.rpm &
    
  • Instale el paquete rpm

    sudo rpm -Uvh *-2.17-55.el6.x86_64.rpm --force --nodeps
    
  • Una vez completada la instalación, verifique la versión de glibc y descubra que la versión de glibc ha llegado a 2.17

    strings /lib64/libc.so.6 | grep GLIBC
    

inserte la descripción de la imagen aquí

3. Instalar RabbitMQ

# 安装
rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm

# 安装
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm

4. Abra la interfaz de administración y configure

# 开启管理界面
rabbitmq-plugins enable rabbitmq_management
# 修改默认配置信息
vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app 
# 比如修改密码、配置等等,例如:loopback_users 中的 <<"guest">>,只保留guest

5. empezar

service rabbitmq-server start # 启动服务
service rabbitmq-server stop # 停止服务
service rabbitmq-server restart # 重启服务
  • establecer el archivo de configuración
cd /usr/share/doc/rabbitmq-server-3.6.5/

cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

6. Configurar hosts virtuales y usuarios

rol del usuario

Después de instalar RabbitMQ, se puede acceder a http://ip地址:15672él; viene con un nombre de usuario y una contraseña de invitado/invitado; si necesita crear un usuario personalizado, también puede iniciar sesión en la interfaz de administración, de la siguiente manera:

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Descripción del rol :

1. Superadministrador (administrador)

Puede iniciar sesión en la consola de administración, ver toda la información y realizar operaciones en usuarios y políticas.

2. Monitoreo

Puede iniciar sesión en la consola de administración y puede ver la información relevante del nodo rabbitmq (número de procesos, uso de memoria, uso de disco, etc.)

3. Formulador de políticas

Puede iniciar sesión en la consola de administración y administrar políticas al mismo tiempo. Pero no puede ver la información relevante del nodo (la parte marcada con el cuadro rojo en la figura anterior).

4. Directivos ordinarios (gerencia)

Solo puede iniciar sesión en la consola de administración, pero no puede ver la información del nodo ni administrar las políticas.

5. Otros

No se puede iniciar sesión en la consola de administración, generalmente productores y consumidores comunes.

Configuración de hosts virtuales

Al igual que mysql, tiene el concepto de una base de datos y puede especificar permisos de usuario para operaciones como bibliotecas y tablas. RabbitMQ también tiene una administración de permisos similar; en RabbitMQ, se puede usar el Host virtual del servidor de mensajes virtual, y cada Host virtual es equivalente a un servidor RabbitMQ relativamente independiente, y cada Host virtual está aislado entre sí. El intercambio, la cola y el mensaje no pueden comunicarse entre sí. Equivalente a la base de datos de mysql. El nombre virtual generalmente comienza con /.

Crear hosts virtuales

inserte la descripción de la imagen aquí

Establecer permisos de hosts virtuales

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/zyb18507175502/article/details/127504610
Recomendado
Clasificación