基础知识

RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,它是使用Erlang语言来编写的,并且是基于AMQP协议的;

RabbitMQ高性能的原因

  • Erlang语言在交换机的交互方面性能优秀的(Erlang语言最初在于交换机领域的架构模式,这样使得RabbitMQ在Broker之间进行数据交互的性能是非常优秀的)
  • Erlang有着和原生Socket一样的延迟

AMQP协议

什么是AMQP高级消息队列协议

AMQP(Advanced Message Queueing Protocol)定义:具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计

AMQP协议模型:

Publisher 推送消息前先与Server建立连接,找到Virtual host,然后将消息推送至Exchange交换机。而交换机与Message Queue有绑定关系(一个交换机相当于一个独立的虚拟机,而这个虚拟机内的各种独立的应用就相当于一个Queue,这个Queue与交换机绑定),Consumer通过绑定的对队列,而交换机也绑定了队列。发送者将消息发送给交换机,这样就能完成消息的推送了

整体架构图

基本概念

Broker

消息队列服务进程,接收客户端的连接,实现AMQP实体服务。

Connection

连接,应用程序与Broker的网络连接。

Producer

消息生产者,即生产方客户端,生产方客户端将消息发送到MQ。

Consumer

消息消费者,即消费方客户端,接收MQ转发的消息。

Channel

网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务

Message

消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则就是消息体内容。

Virtual Host

虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面可以有若干个Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange或Queue

Exchange

交换机,接收消息,根据路由键转发消息到绑定的队列。

常见的有4种不同的交换机类型:

  • 直连交换机:Direct exchange
  • 扇形交换机:Fanout exchange
  • 主题交换机:Topic exchange
  • 首部交换机:Headers exchange

扇形交换机

扇形交换机是最基本的交换机类型,扇形交换机会把能接收到的消息全部发送给绑定在自己身上的队列。因为广播不需要思考,所以扇形交换机处理消息的速度也是所有的交换机类型里面最快的

直连交换机

直连交换机是一种带路由功能的交换机,一个队列会和一个交换机绑定,除此之外再绑定一个routing_key,当消息被发送的时候,需要指定一个binding_key,这个消息被送达交换机的时候,就会被这个交换机送到指定的队列里面去。同样的一个binding_key也是支持应用到多个队列中的

这样当一个交换机绑定多个队列,就会被送到对应的队列去处理

适用场景:有优先级的任务,根据任务的优先级把消息发送到对应的队列,这样可以指派更多的资源去处理高优先级的队列

主题交换机

直连交换机的routing_key方案非常简单,如果我们希望一条消息发送给多个队列,那么这个交换机需要绑定上非常多的routing_key,假设每个交换机上都绑定一堆的routing_key连接到各个队列上。那么消息的管理就会异常地困难。

所以RabbitMQ提供了一种主题交换机,发送到主题交换机上的消息需要携带指定规则的routing_key,主题交换机会根据这个规则将数据发送到对应的(多个)队列上。

主题交换机的routing_key需要有一定的规则,交换机和队列的binding_key需要采用*.#.*.....的格式,每个部分用.分开,其中:

  • *表示一个单词
  • #表示任意数量(零个或多个)单词

当一个队列的绑定键为#的时候,这个队列将会无视消息的路由键,接收所有的消息

首部交换机

首部交换机是忽略routing_key的一种路由方式。路由器和交换机路由的规则是通过Headers信息来交换的,这个有点像HTTPHeaders

将一个交换机声明成首部交换机,绑定一个队列的时候,定义一个Hash的数据结构,消息发送的时候,会携带一组hash数据结构的信息,当Hash的内容匹配上的时候,消息就会被写入队列。

绑定交换机和队列的时候,Hash结构中要求携带一个键x-match,这个键的Value可以是any或者all,这代表消息携带的Hash是需要全部匹配(all),还是仅匹配一个键(any)就可以了

相比直连交换机,首部交换机的优势是匹配的规则不被限定为字符串

  • any: 只要在发布消息时携带的有一对键值对headers满足队列定义的多个参数arguments的其中一个就能匹配上,注意这里是键值对的完全匹配,只匹配到键了,值却不一样是不行的;
  • all:在发布消息时携带的所有Entry必须和绑定在队列上的所有Entry完全匹配

Binding

Exchange和Queue之间的虚拟连接,Exchange在与多个Message Queue发生Binding后会生成一张路由表,路由表中存储着Message Queue所需消息的限制条件即Binding Key。当Exchange收到Message时会解析其Header得到Routing Key,Exchange根据Routing Key与Exchange Type将Message路由到Message Queue。Binding Key由Consumer在Binding Exchange与Message Queue时指定,而Routing Key由Producer发送Message时指定,两者的匹配方式由Exchange Type决定

Routing Key

一个路由规则,虚拟机可用它来确定如何路由一个特定消息。

Queue

也称为Message Queue,消息队列,保存消息并将它们转发给消费者。

消息发布流程:

  1. 生产者和Broker建立TCP连接。
  2. 生产者和Broker建立通道。
  3. 生产者通过通道消息发送给Broker,由Exchange将消息进行转发。
  4. Exchange将消息转发到指定的Queue(队列)

消息接收流程:

  1. 消费者和Broker建立TCP连接 。
  2. 消费者和Broker建立通道。
  3. 消费者监听指定的Queue(队列)
  4. 当有消息到达Queue时Broker默认将消息推送给消费者。
  5. 消费者接收到消息。

消息流转过程

生产者生产出Message并投递到Exchange

一个Exchange可以绑定多个Message Queue,它根据路由策略(routing key)路由到指定的队列,最后由消费端去监听队列

工作模式

队列模式:

对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。

1、一条消息只会被一个消费者接收;

2、rabbitmq采用轮询的方式将消息是平均发送给消费者的;

3、消费者在处理完某条消息后,才会收到下一条消息。

发布订阅模式:

1、每个消费者监听自己的队列。

2、生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收到消息

对应交换机中的fanout类型

路由模式:

1、每个消费者监听自己的队列,并且设置routingkey。

2、生产者将消息发给交换机,由交换机根据routingkey来转发消息到指定的队列。

对应交换机中的direct类型

通配符模式:

对应交换机中的topics类型

Header转发器模式:

对应交换机中的header类型

远程过程调用模式:

RPC即客户端远程调用服务端的方法,使用MQ可以实现RPC的异步调用,基于Direct交换机实现,流程如下:

  1. 客户端即是生产者就是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。
  2. 服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果。
  3. 服务端将RPC方法的结果发送到RPC响应队列。
  4. 客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。

写在最后

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源我都在这里公开分享出来

以上我的经历希望能够给大家带来帮助,需要这些资料的朋友可以戳这里,就可以免费拿到了

5222)]

[外链图片转存中…(img-6uor8Rj5-1625068685223)]

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源我都在这里公开分享出来

以上我的经历希望能够给大家带来帮助,需要这些资料的朋友可以戳这里,就可以免费拿到了

成为阿里P7移动架构师到底有多难?享学课堂java架构师相关推荐

  1. 深入剖析原理!享学课堂java架构师课程

    为什么要公开这些面试题? 原因一:身边从事 Java 开发的人员越来越多,我的表弟表妹们,朋友的表弟表妹们,朋友的朋友的表弟表妹们,每次问我要相同的面试复习材料,已经让我疲于应付,索性整理出来,直接发 ...

  2. 享学课堂java架构师课程,你还看不明白?

    正文 在实际的工作项目中, 缓存成为高并发.高性能架构的关键组件 ,那么Redis为什么可以作为缓存使用呢?首先可以作为缓存的两个主要特征: 在分层系统中处于内存/CPU具有访问性能良好, 缓存数据饱 ...

  3. 2021Java高级面试题,享学课堂java架构师课程

    开头 学习如逆水行舟,尤其是IT行业有着日新月异的节奏. 而且现在这个浮躁而又拜金的社会,我相信很多人做技术并非出于热爱,只是被互联网的高薪吸引,毕竟技术岗位非常枯燥,不仅要面对奇奇怪怪的需求,还要不 ...

  4. 享学课堂java架构师课程,深度解析,值得收藏

    8-22 投递简历 8-24 一面(大概1h50min) 0.currenthashmap怎么扩容的?fwn为什么固定hash -1,这样设计有什么好处?帮助扩容是发生在什么阶段?读线程和写线程都会帮 ...

  5. java二期_享学二期java架构师

    前言-薇:itstudy01 在我们工作和学习的过程中,Java线程我们或多或少的都会用到,但是在使用的过程上并不是很顺利,会遇到各种各样的坑,这里我通过讲解Thread类中的核心方法,以求重点掌握以 ...

  6. java架构师主要负责什么_Java架构师主要学什么 Java架构师工资多少

    Java架构师主要学什么 Java架构师工资多少 Java架构师是当下一个热门的职业,这已成不争的事实.学习Java架构技术成目前较为流行的一种趋势,作为Java架构师主要学什么呢?Java架构师工资 ...

  7. 阿里P7架构师到底有多难?

    搜索"架构师"三个字,会自动出现几个高频问题: 1.架构师是做什么的? 2.架构师需要掌握哪些知识? 3.架构师和程序员的区别是什么? 江湖上对于架构师有着各种各样的传说,但架构师 ...

  8. 【转载】阿里架构师告诉你一套能成为Java架构师的体系是什么样的

    JAVA架构演变之路 2017-12-17 14:25:11 架构师是一个充满挑战的职业,知识面的宽窄往往决定着一个架构师的架构能力 知识面的宽广对于一名出色的架构师来说是必不可少的技能,也许很多人对 ...

  9. 我要带徒弟学写JAVA架构,引路架构师之路

    带徒弟学JAVA架构 Java程序员如何打破工作2,3年的瓶颈问题,如何更上一层楼? 太多的巧合,让我接触到了开源,通过JEECG与很多朋友交流后,让我有了帮助别人学习底层架构的想法. 很多人做jav ...

最新文章

  1. view for easyui 后台模板html_Thinkphp6模板引擎循环标签(五)
  2. 创建IT运维管理门户
  3. 微信 语音转文字 java,在微信——怎么将语音转化为文字,你需要学习了
  4. 19、SOAP安装,运用与比对结果解释
  5. BZOJ 1007 水平可见直线
  6. Sharepoint学习笔记—Ribbon系列-- 2. 在Ribbon中添加新Tab
  7. GetlastError()函数返回值
  8. 关于url路径的定义方式
  9. 第三十八篇、给UITabBar按钮的动画效果
  10. win10创建html,小米随身WIFI在WIN10下无法创建.htm
  11. mac m1 obs录制麦克风+桌面音频
  12. 【mac】一招帮你腾出mac的大量储存空间
  13. pcm设备相关代码解析
  14. CSS盒子模型、Boder基础
  15. AUTOCAD——表格样式
  16. 优信二手车创新发展,获业内外交口称赞
  17. 2023届暑期实习京东二面
  18. 【金融科技发展研究】国内研究:科技助力农业金融创新
  19. 一周信创舆情观察(2021.12.27~2022.1.3)
  20. 以太网卡驱动程序移植linux,Linux下移植ENC424J600网卡驱动,SPI接口初始化的相关问题...

热门文章

  1. 【Python】花式索引
  2. (转载)推荐2款3D游戏制作开发软件Blender3D 和3D RAD
  3. NodeMCU篇-(三)用arduino的方式
  4. 关于举办2021年蜀山区青少年信息学科普日暨第二十届青少年信息学竞赛的通知
  5. 杭州电子商务研究院与乐通达联合发布:基于LTD“从引导到成交“的营销SaaS知识图谱
  6. 计算机与气象学,2022应用气象学专业考研推荐方向
  7. Google免费GPU Colab使用教程
  8. html调用app store,调用App Store Connect Api
  9. zb加密插件报错Call to undefined function app\admin\model\parse_attr()
  10. 【Unity——模板测试Stencil】