Spring Boot RabbitMQ 工作原理

RabbitMQ简介

 在介绍Rabbitmq之前先给大家介绍一下MQ,MQ是什么?

MQ全称是Message Queue,可以理解为消息队列的意思,简单来说就是消息以管道的方式进行传递。

既然我们知道了MQ是什么,那我们来说说RabbitMQ是什么?

RabbieMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,rabbitmq是使用Erlang语言来编写的,并且rabbitmq是基于amqp协议的。

可能很多人不理解AMQP协议是什么?

AMQP:高级消息队列协议。他是应用层协议的一个开放标准,为面对消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不接受产品、开发语言等条件的限制。简单理解就是定义了一个规范,而rabbitmq就是实现了这个规范。

应用场景         

   在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理(请求与动作分离),而这种异步处理的    方式大大的节省了服务的请求响应时间,从而提高了系统的性能等。

RabbitMQ一些优秀的特点:

1.除了Qpid,RabbitMQ是唯一一个实现了AMQP标准的消息服务器;

2.可靠性,RabbitMQ的持久化支持,保证了消息的稳定性;

3.高并发,RabbitMQ使用了Erlang开发语言,Erlang是为电话交换机开发的语言,天生自带高并发光环,和高可用特性;

4.集群部署简单,正是应为Erlang使得RabbitMQ集群部署变的超级简单;

5.社区活跃度高,根据网上资料来看,RabbitMQ也是首选;

RabbitMQ中一些相关名词:

Broker:简单来说就是消息队列服务器实体。

Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。

Queue:消息队列载体,每个消息都会被投放到一个或多个队列。

Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。

Routing Key:路由关键字,exchange根据这个关键字进行消息投递。

vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。

producer:消息生产者,就是投递消息的程序。

consumer:消息消费者,就是接收消息的程序。

channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

RabbitMQ消息发送原理

首先就是连接RabbitMQ,你的应用程序和RabbitMQ Server之间会创建一个TCP连接,一旦TCP打开,并通过了认证,认证就是你试图连接RabbitMQ之间发送的RabbitMQ服务器连接信息和用户名密码,一旦认证通过,你的应用程序和RabbitMQ就创建了一条AMQP信道(Channel)。

信道是创建在真是TCP上的虚拟连接,AMQP命令都是通过信道发送出去的,每个信道都会有一个唯一的ID,不论是发布信息,订阅队列或者介绍信息都市通过信道完成的。

为什么不通过TCP直接发送命令?

对于操作系统来说创建和销毁TCP会话是非常昂贵的开销,假设高峰期每秒有成千上万条连接,每个连接都要创建一条TCP会话,这就造成了TCP连接的巨大浪费,而且操作系统每秒能创建的TCP也是有限的,因此很快就会遇到系统瓶颈。

如果我们每个请求都使用一条TCP连接,既满足了性能的需要,又能确保每个连接的私密性,这就是引入信道概念的原因。

  

RabbitMQ执行流程

 消息生产者投递消息到exchange,Exchange根据某种路由规则路由到队列,消费者只需要监听队列进行消费就行,

生产者不需要关心要把消息投送到哪个队列,接收者只需要监听队列进行消费,从而做到解耦。

消息的持久化       

RabbitMQ 在重启服务器会导致消息丢失,那么怎么保证RabbitMQ在重启的时候不丢失呢?那就是持久化。

1.交换机持久化  Durable:是否持久化参数设为True即可

2.队列持久化  Durable:是否持久化参数设为True即可

这样就可以了  ,我们把服务器重启下,我们的消息还在,我这边就不贴图了。

持久化的工作原理

   RabbitMQ会将你的持久化消息写入磁盘上的持久化日志文件,等消息被消费后,RabbitMQ会把这条信息标识为等待垃圾回收。

持久化的缺点

消息持久化的有点显而易见,但缺点也很明显,那就是性能,因为要写入硬盘要比写入内存性能较低很多,从而降低了服务器的吞吐量,尽管使用SSD硬盘可是使事情得到环节,但他仍然吸干了RabbitMQ的性能,当消息成千上万条要写入硬盘的时候,性能的降低就显而易见了。

虚拟主机

每个RabbitMQ都能创建很多vhost,我们称之为虚拟主机,每个虚拟主机其实都市mini版的RabbitMQ,拥有自己的队列,交换器,绑定,权限机制。

vhost特性

  1. RabbitMQ默认的vhost是"/"开箱即用;
  2. 多个vhost是隔离的,多个vhost无法通讯,并且不用担心命名冲突(队列和交换机和绑定),实现了多层分离;
  3. 创建用户的时候必须指定vhost;

vhost操作

  之前总是在网上找问题  ,从来没想过自己写,我也想把自己学的分享给需要的人,还请点个赞让我继续坚持。

 我的博客里面还有rabbitmq系列的文章,欢迎大家观看,有写的不好的欢迎指出        

 Spring Boot RabbitMQ 五种模式

 Spring Boot RabbitMQ 消息确认

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot RabbitMQ是一个基于Spring Boot框架的消息队列服务,它使用RabbitMQ作为消息中间件,提供了一种简单、灵活、可靠的消息传递机制。通过Spring Boot RabbitMQ,开发者可以轻松地实现消息的生产、消费、路由、过滤等功能,从而构建高效、可靠的分布式应用系统。同时,Spring Boot RabbitMQ还提供了丰富的配置选项和监控工具,方便开发者进行调试和优化。 ### 回答2: Spring Boot RabbitMQ是一个消息队列中间件框架,用于实现高效可靠的消息传递和异步处理。它基于AMQP协议(Advanced Message Queuing Protocol)来实现消息的发布与订阅。 Spring Boot RabbitMQ的优点包括: 1. 简单易用:使用Spring Boot可以快速搭建RabbitMQ应用程序,并且具有自动配置和默认值的特性。开发人员只需简单配置一些参数,即可进行消息的发送和接收操作。 2. 可靠性:RabbitMQ提供持久化机制,确保消息在发送和接收过程中不会丢失。同时,RabbitMQ也支持消息的事务处理,保证消息的可靠性。 3. 异步处理:RabbitMQ使用消息队列的方式进行消息的传递,实现了消息的异步处理。发送方将消息发送到队列中后,不需要等待接收方的响应,可以继续处理其他任务。 4. 解耦合:使用消息队列可以实现系统的解耦合。发送方只需要将消息发送到队列中,接收方则可以通过订阅队列获取消息,实现了发送方和接收方之间的解耦合。 5. 可扩展性:RabbitMQ支持集群部署,可以根据实际业务需求进行水平扩展和负载均衡,提高系统的吞吐量和并发能力。 总而言之,Spring Boot RabbitMQ为开发人员提供了一种方便高效的消息传递和异步处理方式,降低了系统之间的耦合度,并且具备可靠性和可扩展性。在分布式系统中广泛应用于解决异步通信、任务调度和日志传输等场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值