AMQP浅谈

来源:互联网 发布:中国刀 日本刀 知乎 编辑:程序博客网 时间:2024/06/03 20:44

AMQP,高级消息队列协议(Advanced Message Queuing Protocol),是一个异步消息传递所使用的应用层协议规范,和JMS不同,JMS是一组API,而AMQP是一个规范,是一个二进制协议。

AMQP采用了分层的协议架构,共分为三层,包括Model Layer、Session Layer、Transport Layer,Model层定义了基本域模型(exchange、queue)产生的行为,Session层定义了客户端与broker(AMQP服务器端)之间的通信,为可靠传输提供保障,Thransport层专注于数据传输,并与Session层保持交互,接受上层的数据,将数据封装,加上一些label信息,组装成二进制流,到达receiver后再解析得到真实数据交付给Session层,在这个过程中,Transport层是没法接触到真实数据的,而且数据也应该是不可见的!

AMQP中提供了4中域模型:1,exchange、2,queue、3,bindings。

1,exchange其实就是一个路由,它有四种不同类型,采用不同的路由算法,它里面绑定了queue,记录下了这个queue得routing key,并转发Message,当Message到达时,首先会获取Message的routing key,然后它会在内部维护的一个路由表里面去匹配这个routing key,根据自身的路由算法,将Message发送到对应的queue;

2,queue,是消息的存储容器,接收消息,直到消息被receiver取走;

3,bindings,绑定器,将exchange和queue通过routing key连接起来,并且封装消息的路由信息。

还有两个比较重要的点:Connection、Channel,在下面的流程中来说:

整个传输流程是这样的:

首先客户端建立到服务器端(broker)的连接,然后发送Message到exchange,exchange获取Message的routing key,与内部的路由表匹配,将Message发送到对应的queue,而Receive则从queue中取走Message。

这里的连接其实是建立channel,它的完整过程是先在客户端和服务器端建立tcp连接(Connection),当客户端需要发送Message的时候,在tcp连接上面建立channel连接(Channel)用于Message的发送,因为对于OS来说,建立和关闭TCP连接是有代价的,频繁地建立关闭tcp连接对于系统性能的影响很大,而且tcp得连接数也有限制,这就限制了系统处理高并发的能力。但是,在tcp上建立channel是不存在这些的。

这里继续说receive从queue中取消息:一个Message到达queue中后,必须确保被正确收到。当没有receiver时,Message会被缓存,当有receiver时,会将queue发送到receiver上,保证正确接收。为了保证正确接收,通过ack。每个Message都要被acknowledge(ack,确认),当receiver接收到Message之后,会发送一个ack到queue,queue接收到ack之后,将Message从队列中移除。

4,Virtual hosts,它是一个虚拟概念,其实就是服务器端消息队列的一套服务,包括了exchange、queue、bindings等基本域及其一系列行为。


下一篇将讲述AMQP实现之--RabbitMQ


1 0
原创粉丝点击