Introducción a la cola de mensajes.
conejoMQ kafka activeMQ coheteMQ
Dividir órdenes de pago por negocio
Pago vertical dividido
Alipay Pago WeChat Cloud Quick Pass
Varios elementos de la implementación de microservicios
¿Cómo llegan los microservicios (docker)?
¿Cómo se descubren los microservicios entre sí?
¿Cómo acceden los microservicios entre sí? Cómo monitorear
la expansión rápida Cómo ver los registros de acceso (ELK ) de actualización y reversión (CI/CD )
bota de primavera
nube de primavera
postgres@server01:~$ apt-cache madison Rabbitmq-servidor
Instalación independiente de RabbitMQ
Sitio web oficial https://www.rabbitmq.com/install-debian.html#apt-quick-start-cloudsmith
官方安装脚本,ubuntu22.04系统
root@server01:~/sh# cat install_rabbitmq.sh
#!/bin/sh
sudo apt-get install curl gnupg apt-transport-https -y
## Team RabbitMQ's main signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Community mirror of Cloudsmith: modern Erlang repository
curl -1sLf https://ppa.novemberain.com/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Community mirror of Cloudsmith: RabbitMQ repository
curl -1sLf https://ppa.novemberain.com/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null
## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
# another mirror for redundancy
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
## Provides RabbitMQ
##
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
# another mirror for redundancy
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
EOF
## Update package indices
sudo apt-get update -y
## Install Erlang packages
sudo apt-get install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing
Enumere todas las fuentes del software Rabbitmq-Server
apt-cache Madison Rabbitmq-Server
Verifique la versión de RabbitMQ
root@server01:~/sh# estado de Rabbitmqctl | grep “Versión de RabbitMQ”
Versión de RabbitMQ: 3.12.3
Crear usuario
# 1、创建用户并设置密码
[root@rabbit01 ~]# rabbitmqctl add_user admin 123456
#2、赋予其administrator角色
[root@rabbit01 ~]# rabbitmqctl set_user_tags admin administrator
#3、设置权限
[root@rabbit01 ~]# rabbitmqctl set_permissions -p "/" admin '.*' '.*' '.*'
修改密码
root@server02:~# rabbitmqctl change_password n80 12345
http://dirección IP:15672 acceso
root@server02:~# rabbitmqctl add_vhost n80 #是用来创建一个名为n80的虚拟主机
root@server02:~# rabbitmqctl list_vhosts #用来列出当前 RabbitMQ 服务器上的所有虚拟主机。
root@server02:~# rabbitmqctl list_queues #列出当前 RabbitMQ 服务器上的所有队列及其相关信息。
Agregar usuarios y configurar permisos
implementación del clúster de conejos
El clúster rqbbit se divide en dos modos: modo normal y modo espejo
Hay dos tipos de nodos en el clúster:
nodo de disco: guarda datos en la memoria y en el disco.
Nodo de memoria: guarda datos en
la memoria. Aunque el nodo de memoria no escribe en el disco, funciona mejor que el nodo de disco. En el clúster, solo uno
Se necesita disco. Es suficiente para que los nodos guarden datos. Si solo hay nodos de memoria en el clúster, entonces no se pueden detener todos; de lo contrario,
todos los mensajes de datos se perderán después de detener todos los servidores.
Los tres nodos utilizan el script oficial para instalar Rabbitmq, configurar el nombre del host y la resolución del host.
vi /etc/hosts
192.168.74.70 nodo1.rabbit.org nodo1
192.168.74.71 nodo2.rabbit.org nodo2
192.168.74.72 nodo3.rabbit.org nodo3
Crear un clúster RabbitMQ
Cierre RabbitMQ en cada servidor:
El clúster RabbitMQ depende del clúster Erlang para funcionar, por lo que primero se debe crear el entorno del clúster Erlang. Cada nodo en el clúster Erlang se implementa a través de una cookie mágica. Esta cookie se almacena en /var/lib/rabbitmq/. En erlang. cookie, el permiso del archivo es 400 y las cookies de cada nodo deben ser consistentes. De lo contrario, los nodos no pueden comunicarse. Sincronice
.erlang.cookie en mq-server1 con los otros dos servidores:
scp /var/lib/rabbitmq/.erlang .cookie 192.168.74.71: /var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie 192.168.74.72:/var/lib/rabbitmq/
nodo1:
agregue el nodo1 al nodo3 como nodo de memoria y, como nodo de memoria, ejecute el siguiente comando en el nodo1
root@node1:/etc/rabbitmq# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node1 ...
root@node1:/etc/rabbitmq# rabbitmqctl reset
Resetting node rabbit@node1 ...
root@node1:/etc/rabbitmq# rabbitmqctl join_cluster rabbit@node3 --ram
Clustering node rabbit@node1 with rabbit@node3
root@node1:/etc/rabbitmq# rabbitmqctl start_app
Starting node rabbit@node1 ...
nodo2:
agregue el nodo2 al nodo3 como nodo de memoria y, como nodo de memoria, ejecute el siguiente comando en el nodo2:
root@node2:~# systemctl restart rabbitmq-server
root@node2:~# rabbitmqctl stop_app ##停止 app 服务
Stopping rabbit application on node rabbit@node2 ...
root@node2:~# rabbitmqctl reset ##清空元数据
Resetting node rabbit@node2 ...
root@node2:~# rabbitmqctl join_cluster rabbit@node3 --ram
Clustering node rabbit@node2 with rabbit@node3
root@node2:~# rabbitmqctl start_app ##启动 app 服务
Starting node rabbit@node2 ...
vista nodo3
root@node3:~# rabbitmqctl cluster_status
............
Disk Nodes
rabbit@node3
RAM Nodes #内存节点
rabbit@node1
rabbit@node2
Running Nodes #运行的节点
rabbit@node1
rabbit@node2
rabbit@node3
Versions
rabbit@node1: RabbitMQ 3.11.15 on Erlang 25.3.1
rabbit@node2: RabbitMQ 3.11.15 on Erlang 25.3.1
rabbit@node3: RabbitMQ 3.11.15 on Erlang 25.3.1
CPU Cores
Node: rabbit@node1, available CPU cores: 2
Node: rabbit@node2, available CPU cores: 2
Node: rabbit@node3, available CPU cores: 2
............
Configure el clúster en modo espejo
Rabbitmqctl set_policy ha-all “^” '{“ha-mode”:“todos”}'
Verificar el estado del clúster
Cree una cuenta en cualquier nodo
Rabbitmqctl add_user admin 123456
Rabbitmqctl set_user_tags admin administrador
Rabbitmqctl set_permissions -p "/" admin '. ' '. ' '.*'
Habilite complementos en todos los nodos
sudo Rabbitmq-plugins enable Rabbitmq_management #Habilitar complementos web
Los tres nodos pueden iniciar sesión
Para eliminar un clúster RabbitMQ, siga estos pasos:
-
Detenga todos los nodos RabbitMQ: ejecute el siguiente comando en cada nodo para detener el servicio RabbitMQ:
rabbitmqctl stop_app rabbitmqctl reset
-
Borrar el estado del clúster entre nodos: ejecute el siguiente comando en cada nodo para borrar el estado del clúster entre nodos:
rabbitmqctl force_reset
-
Restablezca el nombre del nodo o borre la configuración en cada nodo: puede optar por restaurar el nodo como un nodo independiente o borrar completamente la información de configuración del nodo. Si desea restaurar el nodo como un nodo independiente, elimine todos los archivos en el directorio de configuración de RabbitMQ (generalmente ubicado en
/etc/rabbitmq/
o/var/lib/rabbitmq/
). Luego reinicie el servicio RabbitMQ.
systemctl reinicia el servidor Rabbitmq
Tenga en cuenta que eliminar el clúster RabbitMQ puede provocar la pérdida de datos. Asegúrese de haber realizado una copia de seguridad de los datos importantes antes de realizar la operación.
Monitoreo de clústeres
API RabbitMQ:
curl -s -u invitado:invitado http://localhost:15672/api/nodes
Monitoreo del estado del clúster
root@node1:~/py# cat rabbitmq.py
#!/bin/env python
#coding:utf-8
#Author: ZhangJie
import subprocess
running_list = []
error_list = []
false = "false"
true = "true"
def get_status():
obj = subprocess.Popen(("curl -s -u guest:guest http://localhost:15672/api/nodes &> /dev/null"), shell=True, stdout=subprocess.PIPE)
data = obj.stdout.read()
data1 = eval(data)
for i in data1:
if i.get("running") == "true":
running_list.append(i.get("name"))
else:
error_list.append(i.get("name"))
def count_server():
if len(running_list) < 3: # 可以判断错误列表大于 0 或者运行列表小于 3,3未总计的节点数量
print(101) # 100 就是集群内有节点运行不正常了
else:
print(50) # 50 为所有节点全部运行正常
def main():
get_status()
count_server()
if __name__ == "__main__":
main()
Monitoreo del uso de memoria
root@node1:~/py# python3 rabbitmq_memory.py rabbit@node2
139382784
root@node1:~/py# cat rabbitmq_memory.py
#!/bin/env python
#coding:utf-8
#Author: ZhangJie
import subprocess
import sys
running_list = []
error_list = []
false = "false"
true = "true"
def get_status():
obj = subprocess.Popen(("curl -s -u guest:guest http://localhost:15672/api/nodes &> /dev/null"), shell=True, stdout=subprocess.PIPE)
data = obj.stdout.read()
data1 = eval(data)
#print(data1)
for i in data1:
if i.get("name") == sys.argv[1]:
print(i.get("mem_used"))
def main():
get_status()
if __name__ == "__main__":
main()
root@node1:~/py# python3 rabbitmq_memory.py rabbit-test
root@node1:~/py# python3 rabbitmq_memory.py rabbit@node1
138203136
Ver la lista de todas las conexiones
curl -s -u admin:123456 http://localhost:15672/api/connections
Ver la cola
curl -s -u admin:123456 http://localhost:15672/api/queues/