首页 > 其他分享 >RabbitMQ简介和安装

RabbitMQ简介和安装

时间:2023-10-25 12:07:33浏览次数:42  
标签:调用 服务 AMQP 简介 端口 RabbitMQ Erlang 安装

一、RabbitMQ是什么 ?

RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。支持消息的持久化、事务、拥塞控制、负载均衡等特性,使得RabbitMQ拥有更加广泛的应用场景。RabbitMQ跟Erlang和AMQP有关。下面简单介绍一下Erlang和AMQP。

Erlang是一门动态类型的函数式编程语言,它也是一门解释型语言,由Erlang虚拟机解释执行。从语言模型上说,Erlang是基于Actor模型的实现。在Actor模型里面,万物皆Actor,每个Actor都封装着内部状态,Actor相互之间只能通过消息传递这一种方式来进行通信。对应到Erlang里,每个Actor对应着一个Erlang进程,进程之间通过消息传递进行通信。相比共享内存,进程间通过消息传递来通信带来的直接好处就是消除了直接的锁开销(不考虑Erlang虚拟机底层实现中的锁应用)。

AMQP(Advanced Message Queue Protocol)定义了一种消息系统规范。这个规范描述了在一个分布式的系统中各个子系统如何通过消息交互。而RabbitMQ则是AMQP的一种基于erlang的实现。AMQP将分布式系统中各个子系统隔离开来,子系统之间不再有依赖。子系统仅依赖于消息。子系统不关心消息的发送者,也不关心消息的接受者。

二、现存问题

2.1.服务调用

服务调用:两个服务调用时,可以通过传统的HTTP方式,让服务A直接去调用服务B的接口,但是这种方式是同步的方式,虽然可以采用SpringBoot提供的@Async注解实现异步调用,但是这种方式无法确保请求一定回访问到服务B的接口。那如何保证服务A的请求信息一定能送达到服务B去完成一些业务操作呢?如何实现异步调用?

RabbitMQ简介和安装_服务器

2.2.海量请求

海量请求:在我们在做一些秒杀业务时,可能会在某个时间点突然出现大量的并发请求,这可能已经远远超过服务器的并发瓶颈,这时我们需要做一些削峰的操作,也就是将大量的请求缓冲到一个队列中,然后慢慢的消费掉。如何提供一个可以存储千万级别请求的队列呢?

RabbitMQ简介和安装_服务器_02

2.3.微服务调用

在微服务架构下,可能一个业务会出现同时调用多个其他服务的场景,而且这些服务之间一般会用到Feign的方式进行轻量级的通讯,如果存在一个业务,用户创建订单成功后,还需要去给用户添加积分、通知商家、通知物流系统、扣减商品库存,而在执行这个操作时,如果任意一个服务出现了问题,都会导致整体的下单业务失败,并且会导致给用户反馈的时间延长。这时就造成了服务之间存在一个较高的耦合性的问题。如何可以降低服务之间的耦合性呢?

RabbitMQ简介和安装_服务调用_03

三、解决方案

上述的问题就需要通过RabbitMQ解决

3.1.服务调用

服务之间如何想实现可靠的异步调用,可以通过RabbitMQ的方式实现,服务A只需要保证可以把消息发送到RabbitMQ的队列中,服务B就一定会消费到队列中的消息只不过会存在一定的延时。

RabbitMQ简介和安装_服务调用_04

3.2.海量数据

突然的海量请求可以存储在RabbitMQ的队列中,然后由消费者慢慢消费掉,RabbitMQ的队列本身就可以存储上千万条消息

RabbitMQ简介和安装_服务器_05

3.3.微服务调用

在调用其他服务时,如果允许延迟效果的出现,可以将消息发送到RabbitMQ中,再由消费者慢慢消费|

RabbitMQ简介和安装_服务调用_06

四、RabbitMQ安装

这里推荐搭建采用Docker的方式在Linux中安装RabbitMQ,

4.1.拉取 RabbitMQ 镜像

这里选择的版本是 rabbitmq:3.12-management在终端中执行以下命令以拉取 rabbitmq:3.12-management根据自己使用过的版本:

镜像尽量选择 带-management后缀的,因为这个是自带Web监控页面,同3.12版本MQ有两个

docker pull rabbitmq:3.12-management #推荐使用
docker pull rabbitmq:3.12 #这个是不带Web管理页面的,是需要自己手动安装插件

4.2.创建并运行容器

使用以下命令创建一个新的 rabbitmq容器并将其启动:

docker run --name myrabbitmq -p 5672:5672 -p 15672:15672 -d rabbitmq:3.12-management

参数说明:

  • --name 是 容器别名,
  • 将 宿主机 5672端口映射到 容器内5672,
  • 端口15672端口映射到 容器内15672 端口,
  • 访问宿主机端口的时候会映射到对应容器端口,
  • -d 表示后台运行。

4.3.RabbitMQ 常用端口以及作用

  • 5672端口:AMQP(Advanced Message Queuing Protocol)协议的默认端口,用于客户端与RabbitMQ服务器之间的通信。
  • 15672端口:RabbitMQ的管理界面,默认使用HTTP协议,用于监控和管理RabbitMQ服务器。
  • 4369端口:Erlang分布式节点通信端口,用于RabbitMQ节点之间的通信。
  • 25672端口:Erlang分布式节点通信端口,用于集群中的内部通信。
  • 5671端口:安全的AMQP端口,使用TLS/SSL进行加密通信。

4.4.访问 管理页面测试,是否启动成功

访问 localhost:15672 管理页面是否正常

http://服务器ip地址:15672/

RabbitMQ默认的登录账号和密码如下:

  • 用户名:guest
  • 密码: guest

访问如下:

RabbitMQ简介和安装_服务器_07

登录后如下图:

RabbitMQ简介和安装_服务调用_08

五、RabbitMQ构架

RabbitMQ的架构可以查看官方地址:https://rabbitmq.com/tutorials/amqp-concepts.html

RabbitMQ简介和安装_Erlang_09

从上图可以看出RabbitMQ中主要分为三个角色:

  • Publisher:消息的发布者,将消息发布到RabbitMQ中的Exchange(交换机)
  • RabbitMQ服务:Exchange接收Publisher的消息,并且根据Routes策略将消息转发到Queue(队列)中
  • Consumer:消息的消费者,监听Queue中的消息并进行消费

官方提供的架构图相对简洁,我们可以自己画一份相对完整一些的架构图:

RabbitMQ简介和安装_Erlang_10

上图说明:

  • Publisher和Consumer都是单独和RabbitMQ服务中某一个Virtual Host建立Connection的客户端
  • 后续通过Connection可以构建Channel通道,用来发布、接收消息
  • Channel 是在 connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯,AMQP method包含了channel id帮助客户端和message broker识别channel,所以channel 之间是完全隔离的。Channel 作为轻量级的Connection极大减少了操作系统建
  • 一个Virtual Host中可以有多个Exchange和Queue,Exchange可以同时绑定多个Queue
  • RabbitMq的VirtualHost(虚拟消息服务器),每个VirtualHost相当于一个相对独立的RabbitMQ服务器;
  • 每个VirtualHost之间是相互隔离的,exchange、queue、message不能互通。

在基于架构图再看图形化界面如下:

RabbitMQ简介和安装_服务调用_11



标签:调用,服务,AMQP,简介,端口,RabbitMQ,Erlang,安装
From: https://blog.51cto.com/u_13661275/8016269

相关文章

  • RabbitMQ通讯方式
    RabbitMQ提供了七种通讯方式,可以去官方查看:https://rabbitmq.com/getstarted.html一、RabbitMQ提供的通讯方式其中通讯方式如下:HelloWorld!:为了入门操作提供的方式Workqueues:一个队列被多个消费者消费Publish/Subscribe:手动创建Exchange(FANOUT)Routing:手动创建Exchange(DIRECT)Topi......
  • 苹果端安装fiddler证书打开代理后无法上网的解决办法
    1.删除电脑与手机上的fiddler证书2.下载fiddler官方插件‘FiddlerCertMaker.exe’ 工具重新生成证书,下载之后双击运行,运行成功后,重新启动fiddler3.生成新的证书安装到苹果端4.打开苹果端代理进行抓包 安卓端出现同样问题也可使用此方法解决......
  • Harbor系统文章01---Linux安装Harbor
    1、切换到指定目录下载harbor安装包wgethttps://ghproxy.com/https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz 2、解压文件:tar-zxvfharbor-offline-installer-v2.5.3.tgz 3、注释https配置,测试环境用http。把harbor.yml.tm......
  • pip安装opencv-contrib-python库报错
    背景介绍:opencv-python是opencv的python代码库,包含一些基本的主要的函数,而opencv-contrib-python可以理解为是opencv-python库的高配版本,它还额外包含一些扩展函数与新研发的正在使用阶段的函数等等。笔者在Windows中使用pycharm建立一个新的虚拟环境,想要安装opencv-contrib-p......
  • centos7安装Docker(2023/10/24)
    centos7安装Docker(2023/10/24)一、安装前必读系统配置方面,这里使用的是Centos7Linux内核:官方建议3.10以上。注意:本文的命令使用的是root用户登录执行,非root用户所有命令前面要加sudo1.查看当前的内核版本1uname-r如图为3.10,满足条件。 2.使用root权限更......
  • 电脑LR软件版安装包-lightroom下载 官方免激活
    LRC软件的应用场景LRC软件主要应用于摄影师的后期处理和照片调色中,特别是在图像处理上有较高的应用价值。例如,摄影爱好者使用LRC后可以轻松制作出高质量的图片,同时也可以将照片存储在本地库中以便日后查找和分享。LRC软件还广泛应用于新闻、广告、网页设计等领域,并且在商业摄影......
  • SolidWorks (SW) 2023 下载及安装教程
    本文所提供的安装教程均来自互联网,仅供大家学习使用,不可用于商业用途,否则本作者不负责,如本文提供的信息涉及侵权,请联系作者删除,谢谢大家配合。  软件介绍:Solidworks是一款功能强大的三维机械设计软件系统,有功能强大、易学易用和技术创新三大特点,这使得SolidWorks成为领先的、主......
  • docker安装yesplaymusic
    docker安装网易云音乐(yesplaymusic)演示地址:https://music.qier222.com/镜像地址:https://hub.docker.com/r/fogforest/yesplaymusic/tags项目地址:https://github.com/qier222/YesPlayMusic✨特性✅使用Vue.js全家桶开发......
  • 麒麟KYLINOS桌面操作系统2303上安装tigervnc
    好文推荐:统信UOS或者麒麟KYLINOS上软件包有未满足的依赖关系怎么办hello,大家好啊,今天给大家带来在麒麟桌面操作系统2303上安装tigervnc的文章,本篇文章给大家讲述如何安装并且远程连接使用,后面会给大家更新如何将tigervnc做成桌面图标点击即可开启及关闭,欢迎大家浏览分享转发。1、查......
  • 学习笔记431—freesurfer下载安装,常用术语和recon-all命令
    freesurfer下载安装,常用术语和recon-all命令1基础知识1.1简介freesurfer是一个分析和可视化大脑结构成像和功能成像的工具包,可以处理MRI、fMRI数据,进行大脑解剖学数据测量等。1.2安装freesurfer目前该软件包仅支持Linux和MacOS系统,且官方推荐下载最新版本。官网下载指南......