RabbitMQ简介及安装
RabbitMQ简介
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。
RabbitMQ——Rabbit Message Queue的简写,但不能仅仅理解其为消息队列,消息代理更合适。RabbitMQ 是一个由 Erlang 语言开发的AMQP(高级消息队列协议)的开源实现。
RabbitMQ作为一个消息代理,主要和消息打交道,负责接收并转发消息。
RabbitMQ提供了可靠的消息机制、跟踪机制和灵活的消息路由,支持消息集群和分布式部署。适用于排队算法、秒杀活动、消息分发、异步处理、数据同步、处理耗时任务、CQRS等应用场景
MQ使用场景
-
异步处理
不用MQ时可能的处理流程:
common使用MQ处理:
mq
-
流量削峰
decrease top
-
应用解耦
cross_system_mq
-
日志处理
log_mq
Install on Windows
-
安装 Erlang 环境
RabbitMQ 是 Erlang 语言写的,首先我们需要安装Erlang 环境
下载地址:
-
安装 RabbitMQ Server
下载地址:
-
启用Web管理插件
RabbitMQ 安装后会自动在安装并启动服务,RabbitMQ 自带一个Web管理界面,需要手动启用
打开 RabbitMQ 安装目录,在
sbin目录下执行命令:-
cmd
rabbitmq-plugins.bat enable rabbitmq_management -
powershell
.\rabbitmq-plugins.bat enable rabbitmq_management
在浏览器访问 http://localhost:15672 ,登录 Web 管理界面
默认用户名/密码:
guest/guest -
Get Started
-
RabbitMQ 核心概念
- Publisher:生产者,消息的发送方。
- Connection:网络连接。
- Channel:信道,多路复用连接中的一条独立的双向数据流通道。
- Exchange:交换器(路由器),负责消息的路由到相应队列。
- Binding:队列与交换器间的关联绑定。消费者将关注的队列绑定到指定交换器上,以便Exchange能准确分发消息到指定队列。
- Queue:队列,消息的缓冲存储区。
- Virtual Host:虚拟主机,虚拟主机提供资源的逻辑分组和分离。包含连接,交换,队列,绑定,用户权限,策略等。
- Broker:消息队列的服务器实体。
- Consumer:消费者,消息的接收方。
-
RabbitMQ 消息模型
-
RabbitMQ 消息结构
应用场景架构图:
从示意图可以看出消息生产者并没有直接将消息发送给消息队列,而是通过建立与Exchange的Channel,将消息发送给Exchange,Exchange根据规则,将消息转发给指定的消息队列。消费者通过建立与消息队列相连的Channel,从消息队列中获取消息。 -
无Exchange单Consumer
RabbitMQ single consumer -
无Exchange多Consumer
RabbitMQ single consumer -
Exchange多Consumer
RabbitMQ single consumer -
公平分发
RabbitMQ avarage distribution -
RPC
RabbitMQ RPC
-
-
RabbitMQ 常用ExchangeType介绍
-
direct(明确的路由规则:消费端绑定的队列名称必须和消息发布时指定的路由名称一致)
direct exchangeType -
fanout(消息广播,将消息分发到exchange上绑定的所有队列上)
fanout的路由机制如下图,即发送到
fanout类型exchange的消息都会分发到所有绑定该exchange的队列上去。
fanout exchangeType -
topic(模式匹配的路由规则:支持通配符)
topic是direct的升级版,是一种模式匹配的路由机制。它支持使用两种通配符来进行模式匹配:符号#和符号*。其中*匹配一个单词,#则表示匹配0个或多个单词,单词之间用.分割。如下图所示。
topic exchangeType
-
Linux系统安装
环境:Centos6.5
yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl
wget http://www.erlang.org/download/otp_src_18.3.tar.gz
tar -xzvf otp_src_18.3.tar.gz
cd otp_src_18.3/
mkdir /usr/local/erlang
./configure --prefix=/usr/local/erlang
make && make install
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-generic-unix-3.6.1.tar.xz --no-check-certificate
xz -d rabbitmq-server-generic-unix-3.6.1.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.6.1.tar
mv rabbitmq_server-3.6.1/ /usr/local/rabbitmq_server
vim /etc/profile
ERL_HOME=/usr/local/erlang/
PATH=$ERL_HOME/bin:$PATH:/usr/local/rabbitmq_server/sbin
export ERL_HOME PATH
source /etc/profile
rabbitmq-server -detached
ps -ef |grep rabbit
rabbitmqctl status
mkdir /etc/rabbitmq
rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins enable rabbitmq_stomp
rabbitmqctl add_user root 123456
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
rabbitmqctl set_user_tags root administrator
getenforce
setenforce 0
service iptables status
service iptables stop
rabbitmqctl list_users
参考:
https://www.jianshu.com/p/542e371c7f77
https://www.cnblogs.com/duanxz/p/3542320.html#top
https://www.jianshu.com/p/5c2d8af2c78e















浙公网安备 33010602011771号