写点什么

docker 安装 openwrt 后 qb 没,深夜思考

发布于: 2021 年 07 月 30 日

基础知识

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 调用结果。

最后

小编在这里分享些我自己平时的学习资料,由于篇幅限制,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 架构转型之道 阿里巴巴中台战略思想与架构实战


本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。



用户头像

还未添加个人签名 2021.07.03 加入

VX:Lzzzzzz63 领取资料

评论

发布
暂无评论
docker安装openwrt后qb没,深夜思考