一、MQ:

MQ全称MessageQueue(消息队列),是在消息的传输过程中保存消息的容器,多用于分布式系统之间进行通信。

rabbitmq在OpenStack项目中的作用 rabbitmq container_java

MQ有如下特点

优势:1、应用解耦 2、任务异步处理 3、削峰填谷

劣势:1、系统可用性降低2、系统复杂性提高3、如何保证数据的一致性

常见的MQ产品:

rabbitmq在OpenStack项目中的作用 rabbitmq container_分布式_02

本文主要讲解RabbitMQ的安装和使用。

二、RabbitMQ基本概念


1.Broker :接收和分发消息的应用, RabbitMQ Server 就是 Message Broker



2.Virtual host :出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类 似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务


时,可以划分出多个 vhost ,每个用户在自己的 vhost 创建 exchange / queue 等。



3.Connection : publisher / consumer 和 broker 之间的 TCP 连接



4.Channel :如果每一次访问 RabbitMQ 都建立一个 Connection ,在消息量大的时候建立 TCP


Connection 的开销将是巨大的,效率也较低。 Channel 是在 connection 内部建立的逻辑连接,


如果应用程序支持多线程,通常每个 thread 创建单独的 channel 进行通讯, AMQP method 包含


了 channel id 帮助客户端和 message broker 识别 channel ,所以 channel 之间是完全隔离的。


Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销。



5.Exchange : message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key ,分发 消息到queue 中去。常用的类型有: direct (point-to-point), topic (publish-subscribe) 和fanout (multicast)



6.Queue :消息最终被送到这里等待 consumer 取走



7.Binding : exchange 和 queue 之间的虚拟连接, binding 中可以包含 routing key 。 Binding 信息


被保存到 exchange 中的查询表中,用于 message 的分发依据



RabbitMQ提供了6种工作模式:简单模式、工作模式、发布与订阅模式、路由模式、主题模式、RPC远程调用模式。

rabbitmq安装(使用docker):

1.拉取镜像

docker pull rabbitmq:management

2.运行镜像

docker run -itd --name rabbit01 --hostname myrabbit -e RABBITMQ_DEFAULT_USER=qyl -e RABBITMQ_DEFAULT_PASS=qyl123 -p 15672:15672 -p  5672:5672 -p 25672:25672 rabbitmq:management

注意:RABBITMQ_DEFAULT_USER=qyl -e RABBITMQ_DEFAULT_PASS=qyl123这里设置的是(RABBITMQ_DEFAULT_USER)登录的账号和( RABBITMQ_DEFAULT_PASS)密码,根据自身来修改
可以使用docker ps 查看是否运行成功

成功后,可以通过配置的虚拟机的地址和端口号进行访问

rabbitmq在OpenStack项目中的作用 rabbitmq container_rabbitmq_03

 如果使用的是云服务器,那么你需要在对应的安全组中开放15672端口号。

三、RabbitMQ的集群搭建

创建三个rabbitmq容器

docker run -itd --name rabbit01 --hostname myrabbit01 -v /home/software/rabbitmqcluster/rabbitmq01:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=qyl-e RABBITMQ_DEFAULT_PASS=qyl-e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' -p 15672:15672 -p  5672:5672 -p 25672:25672 rabbitmq:management
 
docker run -itd --name rabbit02 --hostname myrabbit02 -v /home/software/rabbitmqcluster/rabbitmq01:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=qyl-e RABBITMQ_DEFAULT_PASS=qyl-e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbit01:myrabbit01 -p 15673:15672 -p  5673:5672 -p 25673:25672 rabbitmq:management


 
docker run -itd --name rabbit03 --hostname myrabbit03 -v /home/software/rabbitmqcluster/rabbitmq01:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=qyl-e RABBITMQ_DEFAULT_PASS=qyl-e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbit01:myrabbit01  --link rabbit02:myrabbit02 -p 15674:15672 -p  5674:5672 -p 25674:25672 rabbitmq:management

 执行以下命令,进入第一个rabbitmq节点容器

docker exec -it rabbit01 /bin/bash

进入容器后,执行以下命令


1. rabbitmqctl stop_app
2. rabbitmqctl reset
3. rabbitmqctl start_app
4. exit

执行下面命令,进入第二个rabbitmq节点容器

docker exec -it rabbit02 /bin/bash

进入第二个容器后执行如下命令


1. rabbitmqctl stop_app
2. rabbitmqctl reset
3. rabbitmqctl join_cluster --ram rabbit@myrabbit01
4. rabbitmqctl start_app
5. exit

同上面操作,进入第三个容器节点

最后获得下图

rabbitmq在OpenStack项目中的作用 rabbitmq container_TCP_04