ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

消息队列MQ

2022-07-23 23:31:15  阅读:35  来源: 互联网

标签:队列 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

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有