消息中间件概述


📃个人主页:不断前进的皮卡丘
🌞博客描述:梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记
🔥个人专栏:消息中间件专栏

学习消息队列的原因

📖在电子商务应用中,我们经常需要对庞大的数据进行监控,MQ的使用与日俱增,特别是RabbitMQ在分布式系统中存储转发消息,可以保证数据不丢失,也可以保证高可用性,即集群的时候部分机器宕机可以继续执行。在大型电子商务类网址,比如京东、淘宝等网址有着深入的应用。
🔥队列可以消除高并发访问高峰,加快网站的响应速度。
👀在不适用消息队列的情况,用户的请求直接写入数据库,在高并发的情况会对数据库造成巨大的压力,同时也会导致系统响应延迟加剧。

消息中间件概述

  • MQ(Message Queue),消息队列(MQ)是一种应用程序对应用程序的通信方法
  • 消息队列是一种先进先出的数据结构
  • 消息传递:指的是程序直接通过消息发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是拥有远程调用的技术
  • 在这里插入图片描述
  • 引入消息队列的原因:
    • 不同进程之间传递消息的时候,两个进程之间耦合度过高,一个进程的改变就会引发另外一个进程的改变。为了让它们不会互相干扰,我们需要在两个进程之间抽离出一个模块,两个进程之间传递的消息通过消息队列来传递。单独修改某一个进程不会影响另外一个。
    • 某个进程一下子接受的消息太多了,无法马上处理好,就需要对接受的消息进行排队,所以有了消息队列
    • 我们可以把一些不需要即时返回而且又耗费时间的操作提取出来,进行异步处理,可以节省服务器的请求响应时间,从而提高了系统的吞吐量。

消息队列应用场景

消息中间件主要作用

  • 异步处理
  • 解耦服务
  • 流量削峰

应用解耦

  • 传统的模式会出现耦合的情况
  • 通过中间件模式,可以进行解耦的作用
  • 在这里插入图片描述

异步处理

  • 场景说明:用户注册以后,需要发送注册邮件和注册短信,传统的方式有两种:串行方式和并行的方式。

  • 串行方式:

    • 把注册信息写到数据库中后,发送注册邮件,再发送注册短信,这三个认为全部完成以后才返回给客户端。但是有个地方要注意,邮件和短信并不是必须的,它只是一个通知,这种方式会导致客户端在等一些没有必要等待的东西。
    • 在这里插入图片描述
  • 并行方式:

    • 把注册信息写到数据库中后,发送邮件的同时,发送短信,这三个认为任务完成后返回给客户端,并行的方式可以提高处理的事件时间
    • 在这里插入图片描述
    • 虽然并行的方式可以提高效率,但是因为短信和邮件对于我们正常使用网站来说是没有影响的,所以客户端并不需要等到它发送完成以后才显示注册成功,应该是写入数据库中后就可以返回。
  • 消息队列:

    • 引入消息队列以后,把发送短信,邮件等不是必须的业务逻辑进行异步处理
    • 在这里插入图片描述
    • 引入消息队列以后,用户的响应时间就等于写入数据库的时间+写入消息队列的时间(可以忽略不计)

流量削峰(削峰填谷)

  • 流量削峰一般在秒杀活动中应该广泛,因为秒杀活动一般会因为流量过大,导致应用挂掉,为了解决这个问题,我们一般需要加入消息队列
  • 传统模式:在下单的时候就会往数据库中添加数据,但是如果并发量过高的话,就可能导致宕机。
  • 如果说消息被MQ保存起来,然后系统可以按照自己的消费能力来消费,比如每秒1000个数据,这样慢慢写入到数据库中,就不会导致数据库卡死了
  • 系统慢慢的按照数据库能够处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。

QPS,PV,UV,PR概念

  • QPS
    • QPS:每秒查询率,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
    • 因特网经常用每秒查询率来衡量域名系统服务器的机器的性能
    • QPS=并发量/平均响应时间
  • 在这里插入图片描述
  • PV:Page View,网页浏览量。网页被读者调用浏览的次数。网页每次打开或刷新一次页面,记录一次。用户对同一页面的多次访问,访问量累计。
  • UV (Unique Visitor,独立访客访问数)
    统计1天内访问某站点的用户数(以 cookie 为依据),一台电脑终端为一个访客。
  • PR:PageRank,网页的级别技术,用来标识网页的等级/重要性。级别从1到10.PR越高,说明这个网页越受欢迎

AMQP和JMS

  • MQ是消息通信的模型,实现MQ大致有两种主流方式:AMQP、JMS
  • AMQP是一种高级消息队列协议(Advanced Message Queuing Protocol),更准确的说是一种链接协议。这是和JMS的 本质区别,AMQP不和API层进行限定,而是直接定义网络交换的数据格式
  • JMS即Java消息服务(JavaMessage Service)应用程序接口,是一个Java平台关于面向消息中间件(MOM)的API,用在两个应用程序之间,或者分布式系统中发送消息,进行异步通信。
  • 二者的区别
    • JMS是定义了统一的接口,来对消息进行操作统一;AMQP是通过规定协议来统一数据交互的格式
    • JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,是跨语言的
    • JMS规定了两种消息模式;二AMQP的消息模式更加丰富。

消息队列产品

在这里插入图片描述
常用6种消息队列介绍和对比

RabbitMQ核心概念 架构原理

在这里插入图片描述

  • Broker :接收和分发消息的应用, RabbitMQ Server 就是 Message Broker
  • Virtual host: 出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似 于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出 多个 vhost ,每个用户在自己的 vhost 创建 exchange / queue 等
  • Connection: publisher / consumer 和 broker 之间的 TCP 连接
  • Channel :如果每一次访问 RabbitMQ 都建立一个 Connection ,在消息量大的时候建立 TCP连接 的开销将是巨大的,效率也较低。 Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 thread 创建单独的 channel 进行通讯, AMQP method 包含了 channel id 帮助客 户端和 message broker 识别 channel ,所以 channel 之间是完全隔离的。 Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP 连接 的开销
  • Exchange: message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key ,分发消息到 queue 中去。常用的类型有: direct (point-to-point), topic (publish-subscribe) and fanout(multicast)
  • Queue: 消息最终被送到这里等待 consumer 取走
  • Bindingexchange 和 queue 之间的虚拟连接, binding 中可以包含 routing key , Binding 信息被保 存到 exchange 中的查询表中,用于 message 的分发依据
    在这里插入图片描述
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RabbitMQ是一个由Erlang语言开发的AMQP(高级消息队列协议)的开源实现。它是一种消息中间件,主要用于解耦组件之间的通信,发送者和接收者之间不需要直接知道彼此的存在。RabbitMQ的内部组成包括Exchange、Queue和Binding。消息在进入队列之前会通过Exchange进行路由。 RabbitMQ具有以下特点: 1. 可靠性:RabbitMQ使用持久化、传输确认和发布确认等机制来保证消息的可靠性。 2. 灵活的路由:消息在进入队列之前,会通过Exchange进行路由,可以根据不同的路由规则将消息发送到不同的队列中。 3. 消息集群:多个RabbitMQ服务器可以组成一个集群,形成一个逻辑的Broker,提高可扩展性和容错性。 4. 高可用性:队列可以在集群中的多个节点上进行镜像,即使某些节点出现问题,队列仍然可用。 5. 多种协议:RabbitMQ支持多种消息队列协议,如STOMP、MQTT等。 6. 多语言客户端:RabbitMQ几乎支持所有常用的编程语言,包括Java、.NET、Ruby等。 7. 管理界面:RabbitMQ提供了一个易用的管理界面,用户可以监控和管理消息Broker的各个方面。 8. 跟踪机制:如果消息发生异常,RabbitMQ提供了消息跟踪机制,使用者可以找出发生了什么。 9. 插件机制:RabbitMQ提供了许多插件来扩展功能,用户也可以编写自己的插件。 RabbitMQ的应用场景广泛,常用于以下情况: - 异步任务处理:将耗时的任务放入消息队列中,由消费者异步处理,提高系统的响应速度和吞吐量。 - 应用解耦:通过消息队列实现不同组件之间的解耦,提高系统的灵活性和可维护性。 - 流量削峰:将高峰期的请求放入消息队列中,由消费者按照自身处理能力进行消费,避免系统的过载。 - 分布式系统:通过消息队列实现不同服务之间的通信和协调,提高分布式系统的可靠性和扩展性。 总之,RabbitMQ是一种可靠、灵活且功能强大的消息中间件,适用于各种应用场景,并提供了丰富的特性和易用的管理界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不断前进的皮卡丘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值