标签:队列 rabbitmq MQ 消息 下单 docker
一、消息队列概述
MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的一种数据结构。指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消息。主要解决应用解耦,异步消息,消息分发(发布订阅:观察者模式),流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。
二、消息队列应用场景
MQ解决的问题主要有有以下四种:
1.应用解耦 2.流量消峰 3.消息分发(发布订阅:观察者模式) 4.异步消息(celery就是对消息队列的封装)
应用解耦:
一个业务需要多个模块共同实现,或者一条消息有多个系统需要对应处理,只需要主业务完成以后,发送一条MQ,其余模块消费MQ消息,即可实现业务,降低模块之间的耦合。
流量削峰:
高并发情况下,业务异步处理,提供高峰期业务处理能力,避免系统瘫痪。比如双十一,正常的下单并发量只有1万,而双十一会达到10万,正常情况下达到1万后,只能拒绝用户下单,而通过异步处理订单消息,虽然有时候订单要十几秒才会提示下单成功,但是总比不能下单的体验感要强。消息分发:
多个服务队数据感兴趣,只需监听同一类消息即可处理。
异步:
主业务执行结束后从属业务通过MQ,异步执行,减低业务的响应时间,提高用户体验。 传统的电商系统中,假如库存系统无法访问,则订单减库存将失败,从而导致订单失败,订单系统与库存系统耦合。当转变成消息队列的方式后,系统间的调用问题会减少很多,假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统被缓存在消息队列中,当库存系统恢复以后,用户下单正常完成,期间,用户感知不到库存系统的故障。实现订单系统与库存系统的应用解耦,提升系统的可用性。三、RabbitMQ
目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ,这里我们主要介绍RabbitMQ。
1.安装
1.1 原生安装
需要先安装epel扩展源:https://dl.fedoraproject.org/pub/epel/,在其中找到对应的版本下载安装即可,如下:
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -ivh epel-release-latest-7.noarch.rpm
下载erlang
yum -y install erlang
安装并启动 rabbitmq
yum -y install rabbitmq-server systemctl start rabbitmq-server
1.2 docker 上安装
直接在docker上拉取镜像即可,这里我们选择 rabbitmq:management 版本的,因为该版本带有web管理界面,无需自己去配置
docker pull rabbitmq:management
启动容器,映射端口,并设置密码
docker run -di --name rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management
参数详解:
5672:是rabbitmq的默认端口
15672:web管理界面的端口
2.创建用户
如果是原生安装模式直接输入如下即可:
rabbitmqctl add_user yessir 123 # 如果是通过docker容器启动的,需要先进入docker容器再执行上面这句命令(docker exec -it 容器id bash)
3.分配用户权限
如果是原生安装模式直接输入如下即可:
rabbitmqctl set_user_tags yessir administrator # 添加用户标签 rabbitmqctl set_permissions -p "/" yessir ".*" ".*" ".*" # 添加用户权限 # 如果是通过docker容器启动的,需要先进入docker容器再执行上面的两句命令(docker exec -it 容器id bash)
RabbitMQ基本使用
标签:队列,rabbitmq,MQ,消息,下单,docker 来源: https://www.cnblogs.com/yesirya/p/16513579.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。