0
点赞
收藏
分享

微信扫一扫

RabbitMQ 原理相关

回望这一段人生 2022-04-29 阅读 95

一、为什么使用RabbitMq

  • RabbitMq是一个实现了AMQP(advanced Message Queuing Protocol)高级消息队列协议的消息队列服务,用erlang语言实现
  • 可靠性,RabbitMQ的持久化支持,保证消息的稳定性·;
  • 高并发高可用,RabbitMQ使用了Erlang开发语言,Erlang是为电话交换机开放的语言,本身具有高并发的优势
  • 集群部署简单,(Erlang功劳)
  • 使用频率较高

二、RabbitMq工作机制

  • 生产者:消息的创建者,负责创建和推动数据到消息服务器;
  • 消费者:消息的接受方用于处理数据和确认消息
  • 代理:就是本身RabbitMQ本身,用于扮演“跑腿”的角色,本身不产生消息

原理流程:就是生产者发送到消息到虚拟主机,虚拟主机把消息交给指定的交换机,交换机按照规则扔给消息队列进行存储,消息队列等待消费者来消费

消息持久化原理:

  • Rabbit会将持久化消息写入磁盘上的持久化日志,等消息被消费后,Rabbit会把这条消息标识为等待垃圾回收

持久化缺点

-因为写入硬盘要比写入内存性能低很多,从而降低了服务器的吞吐量,景观使用SSD硬盘可以使这种情况得到缓解,但同时仍然使Rabbit性能大幅度下降,当消息成千上万要写入磁盘的时候性能是很低的

三、 MQ应用场景

1.同步消息变异步消息

  • 当用户下单完成,发送邮件和短信通知
  • 运用消息队列之后,用户下单完成之后,下单的信息写入数据库,再写入消息队列,发送邮件消息和发送短信各自去消息队列进行读取
  • 节省时间提高效率

2、应用解耦

场景:用户下单后,订单需要多渠道通知用户

  • a.下单服务系统:用户使用下单服务后,讲下单信息写入数据库,下单成功。
  • b.短信服务系统:用户下单后将短信写入消息队列,已发送短信信息通知用户交易信息‘
  • b.邮件服务系统:用户下单后将邮件写入消息队列,已发送邮件信息通知用户交易信息

这样,如果微信通知不能正常使用,也不影响用户下单,用户下单后,只把下单的通知消息写入消息队列,也不需要关心后续的操作,实现了订单系统和通知系统的解耦

2、流量削峰

使用场景:(电商里秒杀或者团购活动)秒杀活动中一般流量暴增会导致应用挂掉。针对这个问题,一般在应用前段加入消息

  • 1、可以控制活动人数
  • 2、可以缓解短时间内高流量的应用压力
    原因
    服务器接收到用户的请求后,首先写入消息队列,如果消息队列的数量大于最大数量,则直接抛弃用户请求或者跳转到错误页面

消息流程

  • 生产者(producer) 把消息发送给交换机。当你创建交换机的时候,你需要指定类型。交换机的类型接下来会讲到。

  • 交换机(exchange) 接收消息并且负贵对消息进行路由。根据交换机的类型,消息的多个属性会被使用,例如路由键。

  • 绑定(bindlng) 需要从交换机到队列的这种方式来进行创建。在这个例子里,我们可以看到交换机有到两个不同队列的绑定,交换机根据消息的属性来把消息分发到不同的队列上。

  • 消息(message) 消息会一直留在队列里直到被消费。

  • 消费者(consumer) 处理消息。

RabbitMQ核心概念
  • ·生产者(Producer):发送消它的应用。
  • 消费者(Consumer):接收消息的应用。
  • 队列(Queue):存储消息的惯存。
  • 消息(Message):又生产者通过RabbitMQ发送给消费者的信息。
  • 连接(Connection):连接RabbitMQ和应用服务器的TCP连度。
  • 通道(Channel):连接里的一个虚拟通道。当你通过消息队列发送或者接收消息时,这个操作都是通过通道进行的。交换机(Exchange):从生产者那里接收消息,并根据交换类型分发到对应的消息列队里。要实现消息的接收,一个队列必须绑定一个交换机。
  • 绑定(Binding):绑定是队列和交换机的一个链接。
举报

相关推荐

0 条评论