java热血征途触屏版,源码+原理+手写框架

基础知识
是一个开源的消息代理和队列服务器 , 用来通过普通协议在完全不同的应用之间共享数据 , 它是使用语言来编写的 , 并且是基于AMQP协议的;
高性能的原因
AMQP协议
什么是AMQP高级消息队列协议
AMQP()定义:具有现代特征的二进制协议 。是一个提供统一消息服务的应用层标准高级消息队列协议 , 是应用层协议的一个开放标准 , 为面向消息的中间件设计
AMQP协议模型:
推送消息前先与建立连接 , 找到 host , 然后将消息推送至交换机 。而交换机与 Queue有绑定关系(一个交换机相当于一个独立的虚拟机 , 而这个虚拟机内的各种独立的应用就相当于一个Queue , 这个Queue与交换机绑定) , 通过绑定的对队列 , 而交换机也绑定了队列 。发送者将消息发送给交换机 , 这样就能完成消息的推送了
整体架构图
基本概念
消息队列服务进程 , 接收客户端的连接 , 实现AMQP实体服务 。
连接 , 应用程序与的网络连接 。
消息生产者 , 即生产方客户端 , 生产方客户端将消息发送到MQ 。
消息消费者 , 即消费方客户端 , 接收MQ转发的消息 。
网络信道 , 几乎所有的操作都在中进行 , 是进行消息读写的通道 。客户端可建立多个 , 每个代表一个会话任务

java热血征途触屏版,源码+原理+手写框架

文章插图
消息 , 服务器和应用程序之间传送的数据 , 由和Body组成 。可以对消息进行修饰 , 比如消息的优先级、延迟等高级特性;Body则就是消息体内容 。
Host
虚拟地址 , 用于进行逻辑隔离 , 最上层的消息路由 。一个 Host里面可以有若干个和Queue , 同一个 Host里面不能有相同名称的或Queue
交换机 , 接收消息 , 根据路由键转发消息到绑定的队列 。
常见的有4种不同的交换机类型:
扇形交换机
扇形交换机是最基本的交换机类型 , 扇形交换机会把能接收到的消息全部发送给绑定在自己身上的队列 。因为广播不需要思考 , 所以扇形交换机处理消息的速度也是所有的交换机类型里面最快的
直连交换机
直连交换机是一种带路由功能的交换机 , 一个队列会和一个交换机绑定 , 除此之外再绑定一个 , 当消息被发送的时候 , 需要指定一个 , 这个消息被送达交换机的时候 , 就会被这个交换机送到指定的队列里面去 。同样的一个也是支持应用到多个队列中的
这样当一个交换机绑定多个队列 , 就会被送到对应的队列去处理
适用场景:有优先级的任务 , 根据任务的优先级把消息发送到对应的队列 , 这样可以指派更多的资源去处理高优先级的队列
主题交换机
直连交换机的方案非常简单 , 如果我们希望一条消息发送给多个队列 , 那么这个交换机需要绑定上非常多的 , 假设每个交换机上都绑定一堆的连接到各个队列上 。那么消息的管理就会异常地困难 。
所以提供了一种主题交换机 , 发送到主题交换机上的消息需要携带指定规则的 , 主题交换机会根据这个规则将数据发送到对应的(多个)队列上 。
主题交换机的需要有一定的规则 , 交换机和队列的需要采用*.#.*.....的格式 , 每个部分用.分开 , 其中: