前言
还不会MQ吗?赶快学起来!本文将介绍消息队列的概念和作用,还有RabbitMQ的安装和基本使用。
消息队列概念
消息队列(Message Queue)简称MQ,简单来说就是一种消息的容器,作用是采用FIFO(先入先出)的方式实现程序之间(服务、进程、线程)的消息通信。
消息队列的作用
MQ的作用有:
1)解耦
分布式系统都由N个系统组成,系统之间需要互相调用,如A服务要调用B服务和C服务。
直接调用的方式,代码需要写死在A服务中,如果需求发生变化(如删除C服务,添加D服务),需要修改大量原有代码,代码耦合性太高。
采用消息队列的方式,服务之间不是直接对接,对接的是消息队列,A停止发布消息给C,发布消息给D就可以了,系统耦合性大大降低。
2)异步
传统的接口调用方式,是同步执行的,需要等待每个接口调用完成,假设调用A调用B需要200ms,调用C需要300ms,调用D需要400ms,一共就需要900ms。
使用MQ后,A服务只需要向MQ发送3条消息然后立即返回,不需要等待消费者服务完成操作,大大提高了响应速度。
3)削峰
突然性流量过大,请求全部发送给服务处理,服务压力过大,可能导致性能降低,或者宕机。
MQ可以控制消息的容量,超过部分可以丢弃或延后处理。
主流的消息队列
目前市场上主流的消息队列有4种:
- ActiveMQ
- RabbitMQ
- RocketMQ
- 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安装
文件下载:https://download.csdn.net/download/u013343114/14950006
1)安装erlang
2)安装rabbitmq
3)打开菜单输入命令,启动管理工具
rabbitmq-plugins enable rabbitmq_management
4)启动rabbit
net start rabbitmq
net stop rabbitmq
5)浏览器输入: http://localhost:15672 账号密码都是guest
基本使用
用户
不同的系统可以使用各自的用户登录RabbitMQ,可以在Admin的User页面添加新用户
虚拟主机
虚拟主机相当于一个独立的MQ服务,有自身的队列、交换机、绑定策略等。
添加虚拟主机
队列
不同的消息队列保存不同类型的消息,如支付消息、秒杀消息、数据同步消息等。
添加队列,需要填写虚拟主机、类型、名称、持久化、自动删除和参数等。
交换机
生产者将消息发送到交换机Exchange,再由交换机路由到一个或多个队列中;
交换器的类型有fanout、direct、topic、headers这四种,下篇文章将详细介绍。
添加交换机
结束
大家如果需要学习其他Java知识点,戳这里 超详细的Java知识点汇总