ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MQ概述

2021-04-08 09:33:27  阅读:309  来源: 互联网

标签:AMQP 队列 模式 交换机 概述 消息 MQ


MQ概述

一、消息队列MQ概述

MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。
作用:在消息传输过程汇总缓存消息,用于分布式系统之中进行通信。

1.1、为什么使用MQ

在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

开发中消息队列通常有如下优点:

  • 异步提速:
    异步处理任务,将不需要同步处理且耗时长的操作交由消息队列进行异步处理,大大提高了应用程序的处理时间。
  • 应用解耦:
    应用程序解耦合,MQ充当中介,生产方通过MQ与消费方交互,它将应用程序解耦合了
  • 削峰填谷:
    在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见;如果为以能处理这类峰值访问为标准,来投入资源随时待命无疑是巨大的浪费。使用MQ能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷请求而完全崩溃。
  • 可恢复性:
    系统的一部分组件失效时,不会影响到整个系统。MQ降低了程序间的耦合度,所以即使一个处理消息的挂掉,加入队列中的消息仍然可以在系统恢复后被再次被改程序处理。
  • 排序保证:
    消息队列可以控制数据处理的顺序,因为消息队列本身使用的是队列这个数据结构,FIFO(先进先出),在一些场景中,数据处理的顺序很重要,比如商品下单、抢票、秒杀…等。

劣势

  • 系统的可用性降低
  • 系统的复杂度提高
  • 一致性问题

1.2、消息队列产品

市场上常见的消息队列有如下:

  • ActiveMQ:基于JMS实现, 比较均衡, 不是最快的, 也不是最稳定的.
  • ZeroMQ:基于C语言开发, 目前最好的队列系统.
  • RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好, 数据基本上不会丢失
  • RocketMQ:基于JMS,阿里巴巴产品, 目前已经捐献给apahce, 还在孵化器中孵化.
  • Kafka:类似MQ的产品;分布式消息系统,高吞吐量, 目前最快的消息服务器, 不保证数据完整性.
    在这里插入图片描述

1.3、AMQP 和 JMS

Dubbo协议:Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。

MQ是消息通信的模型;实现MQ的大致有两种主流方式:AMQP、JMS。

1.3.1. AMQP

AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

1.3.2. JMS

JMS即Java消息服务(JavaMessage Service)应用程序接口,是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

1.3.3. AMQP 与 JMS 区别

JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。JMS规定了两种消息模式;而AMQP的消息模式更加丰富.

JMSAMQP
定义Java apiWire-protocol
跨语言
跨平台

二、 RabbitMQ

RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列产品,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。

RabbitMQ官方地址:http://www.rabbitmq.com/

RabbitMQ提供了6种模式:Hello Word简单模式,work工作模式,Publish/Subscribe发布与订阅模式,Routing路由模式,Topics主题模式(通配符模式),RPC远程调用模式(远程调用,不太算MQ;不作介绍)

官网对应模式介绍:https://www.rabbitmq.com/getstarted.html/

2.1、应用场景

  • 1、双十一商品秒杀/抢票功能实现
    我们在双11的时候,当我们凌晨大量的秒杀和抢购商品,然后去结算的时候,就会发现,界面会提醒我们,让我们稍等,以及一些友好的图片文字提醒。而不是像前几年的时代,动不动就页面卡死,报错等来呈现给用户。
  • 2、积分兑换(积分可用于多平台)
    积分兑换模块,有一个公司多个部门都要用到这个模块,这时候就可以通过消息队列解耦这个特性来实现。 各部门系统做各部门的事,但是他们都可以用这个积分系统进行商品的兑换等。其他模块与积分模块完全解耦。
  • 3、大平台用户注册
    发送邮件、用户大数据分析操作等 基于同步变异步功能实现

2.2、用户注册真实操作步骤

  • 1、用户注册选择的兴趣标签,根据用户的属性,行为进行用户分析,计算出推荐内容
  • 2、注册后可能需要发送邮件给用户
  • 3、发送短信给用户
  • 4.、发送给用户指南的系统通知
  • 5、…等等

正常情况注册,不出现高并发,假如有大量的用户注册,发生了高并发,就会出现如下情况

邮件接口承受不住,或是分析信息时的大量计算使 cpu 满载。这将会出现,虽然用户数据记录很快的添加到数据库中了,但是执行流程却卡在发邮件或分析用户信息的情况。导致请求的响应时间大幅增长,甚至出现超时,这就有点不划算了。面对这种情况一般也是将这些操作放入消息队列(生产者消费者模型),消息队列慢慢的进行处理,同时可以很快的完成注册请求,不会影响用户使用其他功能。

2.3、RabbitMQ 提供了 6 种工作模式

  • 简单模式、work queues
  • Publish/Subscribe 发布与订阅模式
  • Routing 路由模式
  • Topics 主题模式
  • RPC 远程调用模式(远程调用,不太算 MQ;暂不作介绍)。
    官网对应模式介绍:https://www.rabbitmq.com/getstarted.html

2.4、总结

  • RabbitMQ 是基于 AMQP 协议,使用 Erlang 语言开发的一款消息队列产品。
  • RabbitMQ提供了6种工作模式,我们学习5种。这是今天的重点。
  • AMQP 协议,类似于HTTP的概念。

三、模式总结RabbitMQ

工作模式:

简单模式 HelloWorld :

  • 角色:一个生产者、一个队列、一个消费者,不需要交换机(默认交换机)
    工作队列模式 Work Queue:
  • 角色:一个生产者、多个队列、多个消费者(竞争关系),不需要交换机(默认交换机)

发布订阅模式 Publish/subscribe:

  • 角色:一个生产者、一个交换机、多个队列、多个消费者
  • 交换机类型为**fanout**,并且交换机和队列要进行绑定,不设置路由键(routing key)
  • 当发送消息到交换机后,交换机会将消息广播发送到绑定的队列

路由模式 Routing

  • 角色:一个生产者、一个交换机、多个队列、多个消费者
  • 交换机类型为**direct**,并且交换机和队列要进行绑定,并且需要设置路由键(routing key)
  • 当发送消息到交换机后,交换机会根据路由键(routing key)将消息发送到队列

通配符模式Topic

  • 角色:一个生产者、一个交换机、多个队列、多个消费者
  • 交换机类型为**topic**,并且交换机和队列要进行绑定,并且需要设置路由键(routing key)
  • 路由键字符串使用通配符,*#,*好匹配一个单词,#匹配一个或多个单词。单词用.分隔
  • 当发送消息到交换机后,交换机会根据路由键(routing key)加通配符将消息发送到队列

标签:AMQP,队列,模式,交换机,概述,消息,MQ
来源: https://blog.csdn.net/qq_37242720/article/details/114906493

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有