Spring Boot 整合 RabbitMQ 实现耽误消息

打印 上一主题 下一主题

主题 531|帖子 531|积分 1593

关于 RabbitMQ


消息队列(Message Queuing,简写为 MQ)最初是为了办理金融行业的特定业务需求而产生的。慢慢的,MQ 被应用到了更多的范畴,然而贸易 MQ 高昂的价格让许多初创公司望而却步,于是 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)应运而生。

随着 AMQP 草案的发布,两个月后,RabbitMQ 1.0 就发布了。

RabbitMQ 的架构模子可以分为客户端和服务端两部分,客户端包罗生产者和消费者,服务端包罗捏造主机、交换器和队列。




团体的流程非常简单,生产者将消息发送到服务端,消费者从服务端获取对应的消息。

生产者在发送消息前需要先确认发送给哪个捏造主机的哪个交换器,再由交换器通过路由键将消息转发给与之绑定的队列。

末了,消费者到指定的队列中获取自己的消息进行消费。

客户端


生产者和消费者都属于客户端。

生产者:消息的发送方,将要发送的消息封装成肯定的格式,发送给服务端。消息包罗消息体和标签。

消费者:消息的吸取方,负责消费消息体。

服务端


捏造主机、交换机、队列都属于服务端。

捏造主机:用来对交换器和队列进行逻辑隔离,在同一个捏造主机下,交换器和队列的名称不能重复。有点雷同 Java 中的包,同一个包下,不能有雷同名称的类或者接口。

交换器:负责吸取生产者发来的消息,并根据规则分配给对应的队列,不生产消息,只是消息的搬运工。

队列:负责存储消息,生产者发送的消息会放在这里,消费者从这里取。

连接和信道


连接和信道是两个差别的概念,连接的英文叫 connection,信道叫 channel。




连接里包含了多条信道,连接用的是 TCP 连接,由于 AMQP 就是用 TCP 实现的。

为什么不直接使用连接,而要在连接的底子上新建信道呢?

由于 TCP 连接是比较昂贵的,新建需要三次握手,烧毁需要四次挥手,所以如果每个线程在想 RabbitMQ 服务端发送/吸取消息的时候都新建一个 TCP 连接,就会非常的消耗资源,于是就有了信道。

信道是线程私有的,连接是线程共享的。

信道+连接的模式,既包管了线程之间的私密性,又减少了系统开销。

业务场景


消息队列的主要功能有三种:



  • 异步处理,比如说在做电贸易务的时候,提交订单的动作大概涉及到创建订单、扣除库存、增长用户积分、发送订单邮件等。它们并不是一个串行的操作,可以把发送订单邮件和增长用户积分交给消息队列去做。
  • 系统解耦,消息队列可以作为差别系统之间的桥梁,且不受系统技术栈的束缚。
  • 缓冲削峰,消息队列可以将大量的请求放到队列中,然后再按照肯定的顺序规则交给业务服务器处理。

工作模式


RabbitMQ 支持 7 种工作模式:



  • 简单模式
  • 工作队列模式
  • 广播模式
  • 路由模式
  • 动态路由模式
  • 远程模式
  • 生产者确认模式

我们这里只演示前三种,

简单模式


简单模式真的超等简单,生产者将消息发送给队列,消费者从队列中获取消息队列即可。




生活中就雷同于 快递员将包裹放到快递柜,然后给取件人发一个取件码,取件人通过取件码去快递柜里取包裹
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表