带你走进消息中间件RabbitMQ与METAQ

1,901 阅读8分钟

首先,这篇博客就从消息中间件的基本概念、架构原理、使用场景来展开讲解,对于配置不做详细讲解。方便理解与掌握!!!

1、消息中间件概念

消息中间件是在消息的传输过程中保存消息的容器,消息中间件再将消息从它的源中继到它的目标时充当中间人的作用。 队列的主要目的是提供路由并保证消息的传递,如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功的传递它为止,当然,消息队列保存消息也是有限期的。

2、消息中间件特点

  • 采用异步处理模式

    基本概念: 消息生产者发送一个消息无需等待响应,将消息发送到消息中间件中,消息消费者监听消息中间件中的消息,消费者无需对生产者做出同步反应,而是将消息消费之后响应给消息中间件,消息中间件删除该消息。

    使用场景:用户注册时过段时间发送邮件或者短信。

  • 应用程序和应用程序调用之间为松耦合关系

    基本概念: 发送者和接收者不需了解对方,只需确认消息。发送者和接收者不需同时在线。

    使用场景:在线交易系统中订单模块和支付模块通过消息中间件进行解耦。

3、图解在线交易系统消息中间件的处理流程

在线交易系统中,当用户下完订单之后,订单系统调用支付系统的接口,将消息发送给支付系统,当用户支付完成之后,消息将会响应给订单系统,状态从未支付到已支付,但是如果中间网络出现问题,订单系统没有接收到消息,让用户一直在这等待,用户体验度不够好,这时就引入类消息中间件,订单系统和支付系统不不进行直接交互,而是把消息发送给消息中间件,让消息中间件作为第三者保存消息,这样不会导致消息的丢失问题,对订单模块和支付模块进行解耦,此时支付系统和消息中间件就共同构成了一个事务,要么都成功,要么都不成功!

4、消息中间件的传递过程

消息传递:

生产者和消费者是双向进行的,我们只需要了解一个方向即可,程序A可以看成是生产者,程序B可以看成消费者,当消息到来之后,消息会到达消息中间件接口,保存到消息队列中,通过通道代理将消息传送到网络中,消费者可以直接来通过网络获取消息,也可以通过消息中间件接口,队列,通道来获取消息,这样可以避免消息堆积问题。

5、消息中间件的模型

  • 点对点模型(一对一关系)

消息生产者和消息消费者之间点到点的通信。例如:用户网站注册后,发送给特定的邮件确认和短信,是一对一的。

1、每个消息只有一个消费者。

2、发送者和接收者没有时间依赖。是直接消费的。

3、接收者确认消息接受和处理成功。

  • 发布订阅模型

一个生产者可以对应一或多个消费者。发布者和订阅者有时间依赖,只有两者建立了订阅关系才能收到消息

1、每个消息可以有多个订阅者。

2、客户端只有订阅后才能接收到消息。

3、持久订阅和非持久订阅。

持久订阅:生产者和消费者建立关系之后,消息就不会消失,无论消费者是否在线。

非持久订阅:消费者只有一直在线,才能接收消息,只有一个消费者时约等于点对点模型。

6、消息中间件使用场景

点对点模型:用户注册

生产者: 用户注册服务

消费者:邮件服务和短信服务

点对点模型:延迟消息发送和暂存(消息中间件把用户同一时刻发送到的订单消息暂存到消息中间件缓存,分时段将消息从消息中间件发送消息到后端系统进行消费,淘宝双十一采用的是RacotMQ消息中间件。)

1、把消息中间件当成可靠的消息暂存地

2、定时进行消息投递,模拟用户秒杀访问,进行系统性能压测。

生产者:用户的行为信息

消费者:后端系统

发布订阅模式:日志收集处理,用于获得用户行为分析

生产者:各个应用服务

消费者:分析服务

数据复制

消息广播(发送订阅模式:一对多)

数据变更之后,如果不采用消息中间件,将消息发送到多个本地缓存中,此时网络出现故障,有的缓存中信息还是之前的信息,那么数据就不一致了,要想数据一致,将变更消息发送到消息中间件,本地缓存从消息中间件获取消息,保证缓存和消息中间件长连接,数据保持强一致性。

生产者:数据变更

消费者:多个本地缓存

8、消息中间件的分类

  • push 推消息模型:消息生产者将消息发送给消息中间件,消息中间件把消息发送给消息消费者。

  • pull 拉消息模型:消费者请求消息中间件接收消息,生产者从消息中间件拉取消息。

push和pull两者最大区别:

push实时性比较好,接收数据立刻给消费者消费。pull实时性取决于pull的间隔时间。

9、METAQ消息中间件简介

METAQ消息中间件:完全的队列模型消息中间件,基于java语言编写,多平台部署,单台服务器可支持1万以上个消息队列。队列数可以任意横向扩展,每个队列都是持久化、长度无限的,并且可以从队列任意位置开始消费。

10、METAQ消息中间件特点

11、METAQ的执行流程

Broker为消息中间件存放消息的一个节点,多个Broker通过长连接存放到ZK集群中,生产者发送消息到ZK中,zk根据哪个Broker存活,将生产者的消息存放到Broker中,消费者从zk中的Broker获取消息,消费者是通过office偏移量确定消费的是哪个broker的消息,然后进行消费。

12、METAQ重要术语

  • Topic:消息主题,相当于给每个消息起个名字,消费者可以识别这条消息进行消费。
  • Offset:绝对偏移量,消费者会根据此偏移量从zookeeper集群中查到要消费是哪条消息。
  • Broker:meta的服务端或者服务器。

13、METAQ主要配置项

14、METAQ的主要命令

15、METAQ的安装

16、RabbitMQ介绍

RabbitMq是实现AMQP消息队列和路由功能的进程,内部结构为多个Virtual Host虚拟机,虚拟机中有Exchange和Queue两个组件,Exchange接收生产者发送的消息,根据Binding路由规则将消息路由给服务器中的队列,BindingKey将特定的Exchange和特定的队列Queue绑定起来,ExchangeType决定了Exchange路由消息的行为,ExchangeType有direct、Fabout、Topic三种,不同类型ExchangeType行为是不一样的。MessageQueue是存放还未被消费者消费的消息。

三种ExchangeType:

ExchangeTYpe的分类:

Direct Exchange: 直接交互式处理路由键,需要将一个队列绑定到交换机上,要求该消息和一个路由键完全匹配,才可以将消息发送到该队列中。

Fanout Exchange: 广播式路由键:将队列绑定到交换机上,一个发送到该交换机上的消息都会转发到所有消息队列上。相当于子网广播。Fanout转发消息是最快的。

*Topic Exchange:主题式关键字,通过消息的路由关键字和绑定关键字进行模式匹配,将发送来的消息根据路由路由键的模式匹配规则,转发到一个或者多个队列中,匹配一个词组,#匹配0个或多个词组

17、Rabbit MQ的环境配置

18、Rabbit Mq命令


好了,今天关于消息中间件的内容就到此了,继续关注作者,后期还有更多的MQ供大家学习,博客里面有理解不到位之处请大家指出来,共同进步,小女子再次多谢了,记得点赞👍+关注哦!!!