1. 消息队列
1.1 MQ的相关概念
1.1.1 什么是MQ
MQ(message queue),本质上是一个队列FIFO先进先出,只不过该队列存放的内容是message;还是一种夸进程通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游逻辑解耦+物理解耦的消息通信服务,使用了MQ之后,消息发送上游只需要依赖MQ,不依赖其它服务。
1.1.2 为什么使用MQ
- 流量削峰
- 应用解耦
- 异步处理
1.1.3 MQ的选择
- kafka:产生大量数据的互联网服务的数据收集,日志采集,大型公司,大数据
- RocketMQ:金融互联网,可靠性高,电商
- RabbitMQ:时效性好,社区活跃度高,中小型企业
1.2 RabbitMQ
1.2.1 组成
- 生产者
- 交换机
- 队列
- 消费者
1.2.2 六大模式
1.2.3 工作原理及名词解释
broker:接收和分发消息的应用,RabbitMQ Server就是Message Broker
connection:publisher/consumer和broker之间的tcp连接
channel:如果每一次访问RabbitMQ都建立起一个Connection,在消息量大的时候建立connection开销是巨大的,效率也低。channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯。channel作为轻量级的connection极大减少了操作系统建立的tcp connection的开销
exchange:message到达broker,根据分发规则,匹配查询表中的routing key,分发消息到queue中。常用的类型有:direct(point-to-point),topic(publish-subscribe)and fanout(multicast)
binding:exchange和queue之间的虚拟连接,binding中可以包含routing key,binding被保存到exchange中的查询表中,用于message分发
1.2.4 安装
# 下载erlange https://packagecloud.io/rabbitmq/erlang centos7下载el7
wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.2.3-1.el7.x86_64.rpm/download.rpm?distro_version_id=140
#下载rabbitmq https://packagecloud.io/rabbitmq/rabbitmq-server centos7下载el7
wget --content-disposition https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.9.16-1.el7.noarch.rpm/download.rpm?distro_version_id=140
rpm -ivh erlang-23.2.3-1.el7.x86_64.rpm
yum install socat -y
rpm -ivh rabbitmq-server-3.9.16-1.el7.noarch.rpm
#设置为开机自启动
chkconfig rabbitmq-server on
#启动rabbitmq
/sbin/service rabbitmq-server start
#查看rabbitmq的启动状态
/sbin/service rabbitmq-server status
#停止服务
/sbin/service rabbitmq-server stop
#安装可视化工具
rabbitmq-plugins enable rabbitmq_management
#关闭防火墙
systemctl stop firewalld
#查看用户列表
rabbitmqctl list_users
#添加用户
rabbitmqctl add_user admin admin
#添加角色
rabbitmqctl set_user_tags admin administrator
#赋予权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
#访问ip地址
http://192.168.29.101:15672