基础知识
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
信息来交换的,这个有点像HTTP
的Headers
。
将一个交换机声明成首部交换机,绑定一个队列的时候,定义一个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
,消息队列,保存消息并将它们转发给消费者。
消息发布流程:
- 生产者和Broker建立TCP连接。
- 生产者和
Broker
建立通道。 - 生产者通过通道消息发送给Broker,由Exchange将消息进行转发。
- Exchange将消息转发到指定的Queue(队列)
消息接收流程:
- 消费者和Broker建立TCP连接 。
- 消费者和
Broker
建立通道。 - 消费者监听指定的Queue(队列)
- 当有消息到达Queue时Broker默认将消息推送给消费者。
- 消费者接收到消息。
消息流转过程
生产者生产出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交换机实现,流程如下:
- 客户端即是生产者就是消费者,向
RPC
请求队列发送RPC调用消息,同时监听RPC响应队列。 - 服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果。
- 服务端将RPC方法的结果发送到
RPC
响应队列。 - 客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。
最后
小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以关注+点赞,点击这里免费获取
程序员代码面试指南 IT名企算法与数据结构题目最优解
这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!
《TCP-IP协议组(第4版)》
本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。
本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。
Java开发手册(嵩山版)
这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**
MySQL 8从入门到精通
本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。
Spring5高级编程(第5版)
本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。
本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。
JAVA核心知识点+1000道 互联网Java工程师面试题
企业IT架构转型之道 阿里巴巴中台战略思想与架构实战
本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。
[外链图片转存中…(img-yaRufJTN-1626863094118)]
JAVA核心知识点+1000道 互联网Java工程师面试题
[外链图片转存中…(img-vxOJJoLe-1626863094119)]
[外链图片转存中…(img-nphzRvJo-1626863094120)]
企业IT架构转型之道 阿里巴巴中台战略思想与架构实战
本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。