Chapter1 RabbitMQ简介
1.1 消息队列
1.1.1 概念
什么是MQ
- MQ(message queue),本质是个队列, FIFO 先入先出,只不过队列中存放的内容是message
- 是一种跨进程的通信机制,用于上下游传递消息。
- 在互联网架构中, MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务
作用
- 流量消峰
- 应用解耦
- 异步处理
1.1.2 常见MQ
- ActiveMQ
- Kafka:高吞吐
- RocketMQ:Alibaba,为互联网金融而生
- RabbitMQ
1.2 RabbitMQ
1.2.1 概念
- 什么是RabbitMQ
消息中间件,接受并转发消息 - 四大核心概念
- 生产者:产生数据发送消息
- 交换机:接收并处理消息
- 队列:本质上是一个大的消息缓冲区
- 消费者:等待接收消息的程序
1.2.2 六大模式
- Hello World 简单模式
- Work queues 工作模式
- Public/Subscribe 发布/订阅
- Routing 路由
- Topics 主题
- Publisher Confirms 发布确认
1.2.3 名词解释
- Broker:接收和分发消息的应用, RabbitMQ Server 就是 Message Broker
- Virtual host:
- 出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。
- 当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/ queue 等
- Connection: producer/ consumer 和 broker 之间的 TCP 连接
- Channel:
- Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 thread 创建单独的 channel 进行通讯
- AMQP method 包含了 channel id 帮助客户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。
- Channel 作为轻量级的Connection 极大减少了操作系统建立 TCP connection 的开销
- Exchange:
- message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到 queue 中去。
- 常用的类型有: direct (point-to-point), topic (publish-subscribe) and fanout (multicast)
- Queue: 消息最终被送到这里等待 consumer 取走
- Binding:
- exchange 和 queue 之间的虚拟连接, binding 中可以包含 routing key
- Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据
1.3 安装(CentOS 8)
1.3.1 在线安装
安装 erlang
# 安装 RabbitMQ 提供的精简版本 curl -1sLf \ 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/setup.rpm.sh' \ | sudo -E bash
设置 repository
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
更新
yum update -y yum -q makecache -y --disablerepo='*' --enablerepo='rabbitmq_erlang' --enablerepo='rabbitmq_server' # 这里需要把 rabbitmq_erlang、rabbitmq_server改成自己的,在 /etc/yum.repo.d/目录下 # 可以通过 ls /etc/yum.repos.d/ 命令查看
安装依赖
yum install socat logrotate -y
安装 RabbitMQ
yum install --repo rabbitmq_erlang --repo rabbitmq_server erlang rabbitmq-server -y
1.3.2 命令
设置开机启动
chkconfig rabbitmq-server on
启动
/sbin/service rabbitmq-server start
查看状态
/sbin/service rabbitmq-server status
停止
/sbin/service rabbitmq-server stop
1.3.3 远程登录
开启web管理
rabbitmq-plugins enable rabbitmq_management
创建账户
rabbitmqctl add_user admin password
分配角色
rabbitmqctl set_user_tags admin administrator
设置权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
浏览器访问
http://IP:15672/