一、概述
简介
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
核心名词简介
Publisher:消息生产者
Exchange: 交换器,用来接收生产者发送的消息并将这些消息根据路由键和队列的绑定关系路由给服务器中的队列
Exchange有4种类型:direct(默认),fanout, topic, 和headers:
diract: 完全匹配策略,交换器的路由键key必须和binding中的路由key完全一直,才能发送消息到对应的消息队列,点对点模式;
fanout: 广播策略,不进行路由键的匹配,把消息发送给所有绑定了该交换器的队列,由于不进行路由键的匹配处理,速度最快
topic: 通配符匹配主题策略, 交换器通过模式匹配分配消息的路由键属性,将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。它将路由键和绑定键的字符串切分成单词,这些单词之间用点隔开。它同样也会识别两个通配符:符号“#”和符号“*”。#匹配0个或多个单词,*匹配一个单词
headers: 基本不用,匹配的是消息内的header,不是匹配的路由键,性能很差
Queue:消息队列
Binding:绑定关系,用来表示绑定交换器和队列的关联,一个交换器能指定多个队列,也可以是多对多的关系
路由键: 通过路由键的key来匹配到交换器和队列的绑定关系
Channel :
多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。
Consumer:消息消费者
Virtual Host :虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。
Broker: 表示消息队列服务器实体,就是一个rabbitmq服务器
二、部署安装
环境说明
操作系统:centos 7.6
ip地址:192.168.66.160
下载镜像
dockerhub官方地址:https://registry.hub.docker.com/_/rabbitmq
目前最新版本为3.8.16
查看tag版本,链接如下:https://registry.hub.docker.com/_/rabbitmq?tab=tags&page=1&ordering=last_updated
主要有4个
3.8.16-management-alpine 3.8.16-management 3.8.16-alpine 3.8.16
注意:带有alpine的是用最小linux镜像构建的,体积最小可以达5M初学者不建议这么折腾,而且 Alpine Linux使用了muslmusl实现的DNS服务不会使用resolv.conf文件中的search和domain两个配置,通过DNS来进行服务发现时需要注意。,带有-management的是带有web控制台
这里选择 3.8.16-management 带有web界的
创建数据目录
mkdir -p /data/rabbitmq/data
启动
docker run -d --name rabbitmq3.8.16 --hostname my-rabbit -p 5672:5672 -p 15672:15672 -v /data/rabbitmq/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3.8.16-management
参数说明:
-d 后台运行容器;
--name 指定容器名;
-p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);
-v 映射目录或文件;
--hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
-e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)
等待30秒,查看web页面访问url:http://192.168.66.160:15672/
注意:192.168.66.160是服务器ip,请根据实际情况修改。
用户名和密码都是admin
访问成功之后,效果如下:
本文参考链接: