RabbitMQ从概念到使用、从Docker安装到RabbitMQ整合Springboot

数据库 投稿 65600 0 评论

RabbitMQ从概念到使用、从Docker安装到RabbitMQ整合Springboot

消息中间件利用进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在。(来自百度百科)

如果大家对怎么选型感兴趣,可以看一下小编的这篇文章:四大MQ选型

Linux安装Docker

小编觉得在说概念之前,应该知道他的作用,然后再系统的学习概念等!

RabbitMQ作用

  • 异步处理

  • 应用解耦

  • 流量控制

下面我们进行一个个的简单描述一下哈,我们还是拿被用了一万次的例子和图例哈!

1. 异步处理

我们看到这样非常的耗时,其实保存完成后,就可以登录了,短信和邮件过一会接收也是没有什么问题的!或者发送失败,用户一直没有收到,这都是没什么问题的,用户已经登录进去了,管你发不发短信,大家说对吧!

我们可以在将注册信息保存数据库之后,把要发送注册邮件和发送短信的消息写入消息队列,然后就告知用户注册成功。发送邮件和短信将由订阅了消息的应用异步的去执行。这样耗时的问题就解决了!

2. 应用解耦

但是也存在问题,如果库存系统挂了,这样就会导致下单失败;如果你是用户,你会判断这个产品不行,以后不用了!

别着急,小编来和你说一下哈!刚刚出错的原因就是库存系统挂了,改处理的请求没有处理,所以下单失败;我们引入消息队列,就是把订单消息写入到消息队列中,然后库存系统订阅我们的消息队列;然后库存系统去消息队列中获取消息,进行处理订单,来完成减库存的操作;如果失败也会有,真的挂了,也可以,等到库存系统活了之后继续处理!一个宗旨,不能影响用户的使用体验呢!

3. 流量控制

假设一瓶茅台2万人抢,这是我们的系统可能会被打垮。所以我们把超过一定时,把超过的请求放在消息队列中,然后,然后慢慢处理;虽然可能降低一下用户的体验,但是秒杀就是这样,只能有一部分人成功,我们要保证好系统可以正常运行哈!

RabbitMQ概念

1. RabbitMQ简介

RabbitMQ 是部署最广泛的开源消息代理。
RabbitMQ拥有数万用户,是最流行的开源消息代理之一。从T-Mobile到Runtastic,RabbitMQ在世界各地的小型初创公司和大型企业中使用。
RabbitMQ是轻量级的,易于在本地和云中部署。它支持多种消息传递协议。RabbitMQ可以在分布式和联合配置中部署,以满足高规模、高可用性需求。
RabbitMQ运行在许多操作系统和云环境上,并为最流行的语言提供了广泛的开发工具。

2. 核心概念

Message
消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,
这些属性包括(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可
能需要持久性存储)等。

Publisher
消息的生产者,也是一个向交换器发布消息的客户端应用程序。

Exchange
交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
Exchange有4种类型:direct(默认),fanout, topic, 和headers,不同类型的Exchange转发消息的策略有所区别Queue
消息队列,用来保存消息直到发送给消费者。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

Binding
绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。

Connection
网络连接,比如一个TCP连接。

Channel
信道,多路复用连接中的一条独立的。信道是建立在真实的TCP连接内的虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。

Consumer
消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。

Virtual Host
虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。
类似docker容器和容器之间是相互隔离的,一个坏了,不耽误另一个使用

Broker
表示消息队列服务器实体。

总架构图

JMS与AMQP比较


JMS(Java Message Service) AMQP(Advanced Message Queuing Protocol)
定义 Java api 网络线级协议
跨语言
跨平台
Model 提供两种消息模型:
(1)、Peer-2-Peer
(2)、Pub/sub
提供了五种消息模型:
(1)、direct exchange
(2)、fanout exchange
(3)、topic change
(4)、headers exchange
(5)、system exchange
本质来讲,后四种和JMS的pub/sub模型没有太大差别,
仅是在路由机制上做了更详细的划分;
支持消息类
多种消息类型:
TextMessage
MapMessage
BytesMessage
StreamMessage
ObjectMessage
Message (只有消息头和属性)
byte[]
当实际应用时,有复杂的消息,可以将消息序列化后发
送。
实现中间件 ActiveMQ、HornetMQ RabbitMQ
综合评价 JMS 定义了JAVA API层面的标准;在java体系中,
多个client均可以通过JMS进行交互,不需要应用修
改代码,但是其对跨平台的支持较差;
AMQP定义了wire-level层的协议标准;天然具有跨平
台、跨语言特性

编程笔记 » RabbitMQ从概念到使用、从Docker安装到RabbitMQ整合Springboot

赞同 (157) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽