1,本质
它是一种接收数据,接收请求,存储数据,发送数据等功能的技术服务;<br>
4,协议
什么是协议
所谓协议是指:<br>1.计算机底层操作系统和应用程序通讯时共同遵守的一组约定,只有遵守共同的约定和规范,系统和底层操作系统之间才能相互交流。
2.和一般的网络应用程序的不同它主要负责数据的接受和传递,所以性能比较的高
3.协议对数据格式和计算机之间交换数据都必须严格遵守规范
MQTT协议(应用较少)
MQTT协议:消息队列是IBM开发的一个即时通讯协议,物联网中的重要组成部分。特点:1,轻量。2,结构简单。3,传输快,不支持事务。4,没有持久化设计。 应用场景:1,适用于计算能力有限。2,低带宽。3,网络不稳定的场景。支持者:RbiitMQ。ActiveMQ
AMQP协议
AMQP:(Advanced Message Queuing Protocol)是高级消息队列协议。油摩根大通集团联合其他公司共同设计。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件限制。Erlang语言中的实现有RabbitMQ。特性:1,分布式事务支持。2,消息的持久化支持。3,高性能和高可靠的消息处理优势。支持者:RabiitMQ,ActiveMQ
OpenMessage协议(使用这个就得用Apache RocketMQ)
是近几年由阿里,雅虎和滴滴出行,Stremalio等公司共同参与创立的分布式消息中间件,流处理等领域的应用开发标准。特点:1,结构简单。2,解析速度快。3,支持事务和持久化设计。支持者:Apache RocketMQ
Kafka协议(性能最高)
Kafka协议是基于TCP/IP的二进制协议。消息内部是通过长度来分割,由一些基本数据类型组成。特点:1.结构简单。2,解析速度快。3,无事务支持。4,有持久化设计。性能最高。直接转成二进制传输。
5,消息的分发策略
MQ消息队列有如下角色:1,生产者。2,存储消息。3,消费者。那么生产者生成消息后,MQ进行存储,消费者是如何获取消息的呢?一般获取数据的方式无外乎推(push)或拉(pull)。典型的git就有推拉机智,我们发送的http请求就是一种典型的拉去数据库数据返回的过程。而消息队列MQ是一种推送的过程,而这些推机制会适用到很多的业务场景也有很多对应推机制策略。
6.消息队列高可用和高可靠
所谓高可用:是指产品在规定的条件和规定的时刻或时间内处于可执行规定功能状态的能力。<br>当业务量增加时,请求也过大,一台消息中间件服务器的会触及硬件(CPU,内存,磁盘)的极限,一台消息服务器已无法满足业务的需求,所以消息中间件必须支持集群部署。来达到高可用的目的。
所谓高可用是指:是指系统可以无故障的持续运行,比如一个系统突然崩溃,报错,异常等等并不影响线上业务的正常运行,出错的几率极低,就称之为:高可靠。<br>在高并发的业务场景中,如果不能保证系统的高可靠,那造成的隐患和损失是非常严重的。<br>如何保证中间件消息的可靠性呢?可以从两个方面考虑:<br>1:消息的传输:通过协议来保证系统间数据解析的正确性。<br>2:消息的储存可靠:通过持久化来保证消息的可靠性。
7.erlang及rabblitMQ下载安装(注意版本对应)
windows环境下载安装教程:https://blog.csdn.net/qq_42402854/article/details/103032007 版本对应:https://www.rabbitmq.com/which-erlang.html<br>rabbitMQ常用指令:1.https://www.cnblogs.com/ericli-ericli/p/5902270.html (包含角色分配)<br>2.https://blog.csdn.net/shaoyunzhe/article/details/96461703<br>
8.RabbitMQ的角色分类
1:none:不能访问management plugin
2:management:查看自己相关节点信息:<br>(1)列出自己可以通过AMQP登入的虚拟机<br>(2)查看自己的虚拟机节点virtual host和queues,exchangs和bindings信息<br>(3)查看有关自己的虚拟机节点virtual hosts的统计信息,包括其他用户在这个节点virtual hosts中的活动信息
3:Policymaker:<br>(1)包含management所有权限。<br>(2)查看和创建和删除自己的virtual hosts所属的policis和parameters信息。
4:Monitoring:<br>(1)罗列出所有的virtual hosts,包括不能登录的virtual hosts<br>(2)查看其他用户的connections和channels<br>(3)查看节点级别的数据和clustering和memory使用情况<br>(4)查看所有的virtual hosts的全局统计信息
5:Administrator<br>(1)最高权限<br>(2)可以创建和删除virtual hosts<br>(3)可以查看,创建和删除users<br>(4)查看创建permissions<br>(5)关闭所有用户的connections
9.AMQP
TCP/IP协议三次握手,四次挥手:https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc
10.RabbitMQ核心组成部分
核心概念:<br>Server: 又称Broker,接收客户端的连接,实现AMQP实体服务,安装rabbitmq-server<br>Connection:连接,应用程序与Broker的网络连接TCP/IP/三次握手和四次挥手<br>Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道,客户端可以建立对各Channel,每个Channel代表一个会话任务。<br>Message:消息:服务与应用程序之间传送的数据,由Properties和body组成,Properties可是对消息进行修饰,比如消息的优先级,延迟等高级特性,Body则就是消息体的内容。<br>Virual Host虚拟地址,用于进行逻辑隔离,最上层的消息路由,一个虚拟主机里可以有若干个Exchange和Queue,同一个虚拟主机里面不能有相同名字的Exchange<br>Exchange:交换机,接收消息,根据路由键发送消息到绑定的队列(不具备消息储存的能力)<br>Bindings:Exchange和Queue之间的虚拟连接,binding中可以保护多个routing key<br>Routing key:是一个路由规则,虚拟机可以用它来确定如何路由一个特定消息<br>Queue:队列:也称为Message Queue消息队列,保存消息并将他们转发给消费者。
RabbitMQ支持消息的模式
参考网址:https://rabbitmq.com/getstarted.html<br>1,简单模式<br>2,工作模式Work(工作中最多)<br>3,发布订阅模式fanout:发布一条,所有人都会收到消息.<br>4,路由模式routing:根据路由key(工作中最多)<br>5,主题Topic模式: 模糊匹配 *代表1级,#代表0~n级<br>6,参数模式heafers:根据参数匹配
工作模式Work<br>轮询模式:一个消费者消费一条,按均分配。<br>公平分发:根据消费者的消费能力分发,处理快的处理的多,按劳分配。<br><br>指标Qos:一个消费者最多只能一次拉取N条消息,<br>一旦N条消息没有处理完,就不会从队列中获取新的消息,直到有消息被ack。<br>设置qos的作用就是防止消费者从队列中一下拉取所有消息,从而导致<br>击穿服务,导致服务崩溃或异常。<br><br>ACK机制是消费者从RabbitMQ收到消息并处理完成后,反馈给RabbitMQ,RabbitMQ收到反馈后才将此消息从队列中删除。<br>