消息队列概念
消息队列(Message Queue)简称MQ,简单来说就是一种消息的容器
作用是采用FIFO(先入先出)的方式实现程序之间(服务、进程、线程)的消息通信。
消息队列的优点
MQ的优点有:
1)解耦
服务之间进行解耦,A服务调用B服务时,需要编写相关的代码,调用情况发生改变时,需要修改调用的代码
2)异步
传统的同步调用方式,需要等待调用完成,才能进行其它业务
异步调用方法,将消息发送到队列中,就可以返回,执行其它业务,速度大大提升
3)削峰
出现流量激增的情况时,消息队列可以设置消息的最大数量,处理一部分消息,其它消息交给队列排队处理
MQ的缺点:
- 增加了系统的复杂性
- 降低了系统的可用性(消息队列出现问题,整个系统的通信受影响)
- 。。。
主流的消息队列
目前市场上主流的消息队列有4种:
-
ActiveMQ
-
RabbitMQ
-
RocketMQ Alibaba
-
Kafka
RabbitMQ并发性能好,而且部署相对容易,是目前很多企业使用的消息队列。
安装RabbitMQ
Linux安装
安装erlang
wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
yum install epel-release
yum install erlang
安装rabbitmsq
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.7/rabbitmq-server-3.9.7-1.el7.noarch.rpm
yum install rabbitmq-server-3.9.7-1.el7.noarch.rpm # 目前的最新版本 支持erlang24
启动rabbitmsq
service rabbitmq-server start
启用管理工具
rabbitmq-plugins enable rabbitmq_management
防火墙允许端口
firewall-cmd --permanent --add-port=15672/tcp
firewall-cmd --permanent --add-port=5672/tcp
将配置文件模板复制到etc目录:
cp /usr/share/doc/rabbitmq-server-3.9.7-1/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
通过vi命令编辑:
vi /etc/rabbitmq/rabbitmq.config
修改下面内容:
注意要去掉后面的逗号
设置开机启动
输入下面命令
chkconfig rabbitmq-server on
Windows安装
文件下载
1)安装erlang
2)安装rabbitmq
3)打开菜单输入命令,启动管理工具
rabbitmq-plugins enable rabbitmq_management
4)启动rabbit
net start rabbitmq
net stop rabbitmq
5)浏览器输入: http://localhost:15672 账号密码都是guest
基本概念
-
生产者
向队列中发送消息的程序
-
消费者
从队列中消费消息的程序
-
队列
消息的容器,FIFO数据结构
-
交换机
将消息复制分发到不同的队列中
-
虚拟主机
包含交换机和队列的空间
-
连接
客户端和MQ服务的连接
-
通道
通信的通道
基本使用
用户
不同的系统可以使用各自的用户登录RabbitMQ,可以在Admin的User页面添加新用户
虚拟主机
虚拟主机相当于一个独立的MQ服务,有自身的队列、交换机、绑定策略等。
添加虚拟主机
队列
不同的消息队列保存不同类型的消息,如支付消息、秒杀消息、数据同步消息等。
添加队列,需要填写虚拟主机、类型、名称、持久化、自动删除和参数等。
交换机
生产者将消息发送到交换机Exchange,再由交换机路由到一个或多个队列中;
交换器的类型有fanout、direct、topic、headers这四种,下篇文章将详细介绍。
添加交换机