消息协议
消息协议就是指用于实现消息队列时所涉及的协议
AMQP
主要概念
- Message(消息):处理的消息单元,消息通常由一个内容头,一组属性,一个内容体三部分组成
- Publisher(消息生产者):向交换机发布消息的客户端应用程序
- Exchange(交换机):用来接受消息生产者所发送的消息并将这些消息路由给服务器中的队列
- Binding(绑定):用于消息队列和交换器之间的关联,一个绑定就是基于路由键将交换器和消息队列链接起来的路由规则。
- Virtual Host(虚拟主机):每一个虚拟主机本质上是一个mini版的消息服务器,拥有自己的队列,交换器,绑定和权限机制
- Broker(消息代理):表示消息队列服务器实体,接受客户端连接,实现消息队列和路由功能的过程
- Routine Key(路由规则):由它确定如何路由一个特定消息
- Queue(消息队列):存放消息的容器
- Connection(连接):可以理解成客户端和消息队列服务器的一个TCP连接
- Channel(信道):信道是一条独立的双向数据流通道,他是建立在真实的TCP连接内的虚拟连接,AMQP命令都是通过信道发送出去的,不管是发布消息,订阅队列还是接受消息,都通过信道完成,一个连接可以包含多个信道,之所以需要信道,是因为TCP的连接和释放是昂贵的,如果每一个线程与消息队列服务器交互都创建一个TCP,那么代价是十分昂贵的且浪费。
- Consumer(消息消费者):表示从一个消息队列中取出消息的客户端应用程序
核心组件的生命周期
消息的生命周期:
一条消息的流转过程:Publisher产生一条消息,发送到Broker,Broker接受到消息之后根据Routine Key查询投递的目标Queue。Consumer像Broker发送订阅消息时会指定自己监听哪个Queue,当有数据到达时Broker会推送到Consumer
交换器的生命周期:
每台AMQP服务器都预先创建了许多交换器实例,他们在服务启动时就存在并且不能被销毁。如果你的应用程序有特殊要求,则可以选择自己创建交换器,并在完成工作后销毁
队列的生命周期:
这里主要有两种消息队列的生命周期,即持久化消息队列和非持久化消息队列,持久化消息队列可被多个消费者共享,不管是否有消费者接受,他们可以独立存在。临时消息队列对某个消费者是私有的,只能绑定到此消费者,当消费者断开连接时,该消息队列将被删除
消息数据格式
一个帧头(header,7个字节)、任意大小的负载(payload)和一个检测错误的结束帧组成。
帧头:一个type字段、一个channel字段、一个size字段
type:type=1:"METHOD"方法帧,type=2:"HEADER"内容头帧,type=3:"BODY"内容体帧,type=4:"HEARTBEAT"心跳帧