消息中间件 | 消息协议 | AMQP -- 《分布式 消息中间件实践》笔记
04年,AMQP开放标准被开发
06年,AMQP规范被发布
基本概念
Message:与平台无相关的数据。
Publisher:向交换器发布消息的客户端应用程序
Exchange:用来接收消息生产者所发送的消息并把这些消息路由给服务器中的队列
Binding:用于消息队列和交换器之间的关联
VirtualHost:是消息队列以及相关对象的集合,是共享同一个身份验证和加密环境的独立服务器。
Broker(消息代理):表示消息队列服务器实体,接受客户端连接,实现AMQP消息队列和路由功能的过程。
Routing Key(路由规则):虚拟机用它来确定如何路由一个特定的消息。
Queue:用来保存消息的消息队列。
Connection:略
Channel:略
Consumer:略
消息的生命周期:
描述消息被生产者生产直到被消费者消费过程
Q1:如果消息在Exchange不能被路由怎么办?
A1:交换器会将消息丢弃或者将其返回给生产者
Q1:消息在消息队列传递给消费者时不成功?
A1:消息队列存储消息或者持久化到内盘或者内存中,等待消费者准备好;如果没有消费者,消息队列可以通过AMQP将消息返回给生产者。
交换器的生命周期
每台AMQP服务器都预先创建了许多交换器实例,他们在服务器启动时就存在并且不能被销毁。可以选择自己创建交换器,并在完成工作后销毁。
队列的生命周期
持久化消息队列可被多个消费者共享,不管是否有消费者接受,他们都可以独立存在。
临时消息队列对某个消费者是私有的,只能绑定到此消费者,当消费者断开连接时,该消息队列被删除。
功能命令
这里说的功能命令是指协议对外提供一套可操作的命令集合,应用程序正是基于这些命令来实现自己的业务功能。
AMQP协议文本是分层描述的,在不同主版本中划分的层次是有一定的区别,在0-9版本中分成FunctionLayer(功能层)和TransportLayer(传输层)两层,而在0-10版本中分为ModeLayer(模型层)、SessionLayer(会话层)、TransportLayer(传输层)三层,分层的目的是在不改变协议对外提供的功能的前提下替换各层的实现,而又不影响该层与其他层的交互。在AMQP 0-9版本中,功能命令包括Connection、Channel、Exchange、Queue、Basic和Transaction几大类,每个命令按照类+方法+参数的 方式来组织描述。
消息数据格式
在消息生命周期中,描述了一条消息队列服务器中流转的过程,为了实现这些处理过程,所有的消息必须有特定的格式来支持,这部分是在传输层中定义的。
消息信道复用
数据可见性保证
内容排序保证
错误处理