GENGEN
主页
vuepress
  • GIT命令
  • python+django
  • vue cli搭建项目
  • babel es6转换es5
  • docker aliyun配置
  • npm 配置
  • linux 常用命令
  • Ubuntu 下Linux 命令
  • github
  • gitee
  • csdn
  • 关于我
主页
vuepress
  • GIT命令
  • python+django
  • vue cli搭建项目
  • babel es6转换es5
  • docker aliyun配置
  • npm 配置
  • linux 常用命令
  • Ubuntu 下Linux 命令
  • github
  • gitee
  • csdn
  • 关于我
  • java基础

    • JDK8 函数式编程
    • JDK8 新特性之Date-Time
    • Servlet 源码分析
    • ArrayList 源码
    • LinkedList 源码
    • HashMap 源码
    • String 源码
    • BigDecimal 源码
    • java 类的加载
    • Class 源码
    • Synchronized锁升级
    • 事务的传播机制
    • knowledge
  • JAVA WEB

    • Java Servlet
    • 权限设计
    • logback日志的链路追踪
  • DATABASE

    • MySQL EXPLAIN详解
    • MySQL 索引
    • MySQL 表锁、行锁
    • MySQL ACID与transcation
    • 分布式事务
    • MySQL MVCC机制
    • Mysql 乐观锁与悲观锁
    • 分布式锁1 数据库分布式锁
    • 分布式锁2 Redis分布式锁
    • 分布式锁3 ZK分布式锁
  • SpringCloud

    • SpringCloud服务注册中心之Eureka
    • SpringCloud服务注册中心之Zookeeper
    • SpringCloud服务调用之Ribbon
    • SpringCloud服务调用之OpenFeign
    • SpringCloud服务降级之Hystrix
    • SpringCloud服务网关之Gateway
    • SpringCloud Config分布式配置中心
    • SpringCloud服务总线之Bus
    • SpringCloud消息驱动之Stream
    • SpringCloud链路追踪之Sleuth
    • SpringCloud Alibaba Nacos
    • SpringCloud Alibaba Sentinel
  • Spring

    • SpringBoot
    • Spring-data-jpa入门
    • SpringCloud问题
    • dispatcherServlet 源码分析
    • @SpringBootApplication注解内部实现与原理
    • spring启动初始化初始化
  • 中间件

    • 分布式协调服务器Zookeeper
    • 服务治理Dubbo
    • 分布式配置管理平台Apollo
    • 消息中间件框架Kafka
    • 分布式调度平台ElasticJob
    • 可视化分析工具Kibana
    • ElacticSearch 基础
    • ElacticSearch进阶
    • ElacticSearch集成
  • 环境部署

    • 应用容器引擎Docker
    • DockerCompose服务编排
    • 负载均衡Nginx
    • Nginx的安装配置
    • K8S基础
  • 代码片段

    • listener 监听模式
    • spingboot 整合redis
    • XSS过滤
    • profile的使用
    • ConfigurationProperties注解
  • 设计模式

    • 工厂模式
    • 单例模式
    • 装饰者模式
    • 适配器模式
    • 模板方法模式
    • 观察者模式
  • 读书笔记

    • 《Spring in Action 4》 读书笔记
    • 《高性能mysql》 读书笔记
  • NoSQL

    • Redis基础
    • Redis高级
    • Redis集群
    • Redis应用
  • MQ

    • rabbitMQ基础
    • rabbitMQ高级
    • rabbitMQ集群
  • JVM

    • JVM体系架构概述
    • 堆参数调整
    • GC 分代收集算法
    • JVM 垃圾回收器
    • JVM 相关问题
  • JUC

    • JUC总览
    • volatile关键字
    • CAS
    • ABA问题
    • collections包下线程安全的集合类
    • Lock 锁
    • LockSupport
    • AQS
    • Fork/Join分支框架
    • JUC tools
    • BlockingQueue 阻塞队列
    • Executor 线程池
    • CompletableFuture
    • 死锁以及问题定位分析
  • Shell

    • shell命令
    • shell基础
  • Activiti

    • IDEA下的Activiti HelloWord
    • 流程定义的CRUD
    • 流程实例的执行
    • 流程变量
  • VUE

    • vue基础
    • vue router
    • Vuex
    • Axios 跨域
    • dialog 弹出框使用
    • vue 动态刷新页面
    • vue 封装分页组件
    • vue 动态菜单
    • vue 常用传值
  • Solidity 智能合约

    • Solidity 基础
    • Solidity ERC-20
    • Solidity 101
  • English

    • 时态

RabbitMQ基础

MQ基本概念

  • MQ全称Message Queue,多用于分布式系统之间进行通信。
    • 系统通信有直接远程调用
    • 也可以采用消息中间件
  • MQ的优劣:
    • 优势:应用解耦;异步提速;削峰填谷
    • 劣势:系统可用性降低;系统复杂性提高;一致性问题

Tips

  • 异步提速:同步需要等待处理完成后的结果(串行),异步不需要等待
  • 一致性问题:即CAP中满足AP,满足最终一致性

AMQP

  • AMQP: 即Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端、中间件、语言不同限制。

RabbitMQ 架构

dock
  • Broker 这个是rabbitMQ的Server
    • Virtual Host虚拟机一个Server包含多个虚拟机,是一种逻辑分区。每个用户在自己的vhost创建exchange\queue
      • Exchange交换机 分发消息(三种交换机类型)
        • Fanout广播:将消息投递给所有绑定该交换机的队列
        • Direct定向:把消息交给符合指定RoutingKey的队列
        • Topic通配符:把消息交给符合Routing Pattern(路由模式)的队列
      • Queue队列 存储消息
      • Exchange与Queue的关系由Binding虚拟连接
  • Routes路由 管理Exchange把根据规则把消息分发给哪个Queue
  • Publisher生产者
    • Connection TCP连接,用于跟MQ通信
    • channel每个Connection下包括多个channel(类型线程池的概念,减少TCP开销)
  • Consumer消费者

RabbitMQ 6种工作模式

  • 简单模式
  • work queues
  • Publish/Subsvribe 发布订阅
  • Routing 路由模式
  • Topics 主题模式
  • RPC 远程调用模式 (忽略)

RabbitMQ工作模式

  • 工作模式其实就是消息路由分发的不同模式

workqueues 工作队列模式 Exchange类型null

dock
  • 根据上图可知,工作队列模式是一个Publisher,对应多个Consumer模式,多个Consumer之间是竞争关系。
  • 默认情况下,rabbitmq将会按顺序派发每个任务给下一个消费者,平均而言,每个消费者将获得相同数量的消息,这种分发消息的方式称为轮询。
  • 应用场景:对应一些任务过重或者任务较多的情况,使用这种模式提高任务处理速度

Pub/Sub 订阅模式 Exchange类型Fanout

dock
  • 这个模式中,多了个Exchange角色,过程也有变化
    • P:发送消息到Exchange,而不是Queue
    • Exchange :一方面接收消息,另一方面知道如何处理消息。(例如递交给某个特别队列、递交给所有队列、或者丢弃消息,如果操作取决于Exchange类型)
  • Exchange只负责分发消息,不具备存储消息能力,所有如果没有任何Queue绑定Exchange,或者没有符合的路由规则,消息会丢失
  • 可以不指定RoutingKey

Routing 路由模式 Exchange类型Direct

dock
  • 队列与交换机的绑定,不能是任意绑定了,而是指定一个RoutingKey
  • 消息的发送放在向Exchange发送消息时,必须指定消息的RoutingKey
  • Exchange不再把消息交给每一个绑定的Queue,而是根据消息的RoutingKey进行判断,只有队列的RoutingKey和消息的RoutingKey一致时,才会接收到消息

Tips

  • 简单理解就是虽然exchange绑定了多个队列,但是根据指定的RoutingKey可以选择性的把消息发送给指定的队列
  • Routing模式要求绑定Exchange交换机时指定RoutingKey

Topics 主题模式 Exchange类型Topics

dock
  • Topics主题模式可以实现Pub/Sub发布订阅模式 和 Routing路由模式,只是Topics在配置RoutingKey的时候可以使用通配符,更加灵活。
  • 模糊匹配,*代表一个单词,#表示零个或者多个单词
Last Updated:
Contributors: wal365@126.com
Next
rabbitMQ高级