Directorio de artículos
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
sistema A accede al sistema B directamente a través de llamadas remotas -
El segundo tipo:
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
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á:
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.
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.
Aceleración asíncrona
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!
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
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:
- 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.
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.
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
RabbitMQ es la siguiente: Conceptos relacionados en RabbitMQ:
Broker
: La aplicación para recibir y distribuir mensajes, RabbitMQ Server es Message BrokerVirtual 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 corredorChannel
Nota: 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 TCPExchange
: 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 recojaBinding
: 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
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
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
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
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:
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 /.