AMQP

AMQP:Advanced Message Queuing Protocol(高级消息队列协议),下面主要介绍与其相关的几个常见术语:


1、Server(broker):接受客户端的链接,实现AMQP消息队列和路由的进程。

2、Virtrual Host:一批交换机、消息队列和相关对象的集合。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。客户端应用程序在登录到服务器之后,可以选择一个虚拟主机。

3、Exchange:交换机,用来接受生产者发送的消息,并根据Binding的规则将消息路由给服务器中的消息队列(Message Queue),其中交换机的类型决定了路由消息的行为。

4、Message Queue:消息队列,用来保存未被消费者消费的消息。

5、Message:消息,由Header和Body组成,Header是由生产者添加的各种属性集合,包括Message是否要持久化、有哪个Message Queue接受、优先级等。而Body是真正需要传输的APP数据。

6、Binding:绑定,Binding联系了Exchange和Message Queue。Exchange在与多个Message Queue发生绑定后会生成一张路由表,这个路由表保存着每个Message Queue所要接受什么样消息的限制条件即Binding Key。当Exchange收到Message时会解析其Header得到Routing Key,然后,Exchange根据Routing Key和Exchange Type将Message路由到Message Queue。Binding Key 是由消费者(Consumer)在绑定(Binding)Exchange和Message Queue时指定的,而Routing Key是由生产者(Producer)在发送Message是指定的,两者匹配的方式是由Exchange Type决定的。

7、Connection:链接,对于RabbitMq而言,其实就是一个位于客户端与Broker(Server)之间的TCP链接。

8、Channel:通道,多路复用连接中的一条独立的双向数据流通道,为会话提供物理传输介质。仅仅创建了客户端到与Broker之间的连接后,客户端还是不能发送消息的,需要为每个Connection创建一个Channel,AMQP规定只有通过Channel才能执行AMQP的命令。一个Connection可以有多个Channel,之所以需要Channel,是因为TCP连接的建立和释放是十分昂贵的,如果客户端的每一个线程都要与Broker交互,如果每一个线程都要建立一个TCP连接,暂且不考虑TCP连接是否浪费,就算操作系统也无法承受每秒创建如此多的链接。RabbitMQ建议客户端线程之间不要公用Channel,至少要保证共享用Channel的线程发送消息必须是串行的,但是建议尽量公用Connection。

9、Command:命令,客户端通过Command完成与AMQP服务器的交互来实现自身的逻辑。例如在RabbitMQ中,客户端可以通过publish命令发送消息,txSelect开启一个事务,txCommit提交一个事务。

10、Producer:生产者,一个向Exchange发送消息的客户端应用程序。

11、Consumer:消费者,一个从Message Queue中获取消息的客户端应用程序。



在了解了AMQP模型后,需要简单介绍下AMQP的协议栈,AMQP协议本身包含三层:


1、Module Layer:位于协议最高层,主要定义了一些供客户端调用的命令,客户端可以利用这些命令实现自己的业务逻辑,例如,客户端可以通过queue.declare声明一个队列,利用consume命令获取一个队列中的消息。

2、Session Layer:主要负责将客户端的命令发送给服务器,在将服务器端的应答返回给客户端,主要为客户端与服务器之间通信提供可靠性、同步机制和错误处理。

3、Transport Layer:主要传输二进制数据流,提供帧的处理、信道复用、错误检测和数据表示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值