TOC
- AMQP
- 基本概念
- Advanced Message Queuing Protocol
- 面向消息中间件提供的应用层协议
- AMQP关注于各种消息如何以字节流的形式进行传递。(对比JMS的接口层面和实现行为上进行的统一)
- 是一个二进制协议,特点:多信道、协商式、异步、安全、跨平台、中立、高效。
- Advanced Message Queuing Protocol
- 发展史
- 80年代:the Information bus(TIB)
- IBM: MQSeries 微软:Microsoft Message Queue
- 2001: Java Message queuing
- 2004:AMQP开放标准开发
- 2006:AMQP规范发布
- 2007:基于AMQP开发的RabbitMQ 1.0发布
- AMQP messaging中的基本概念
- Broker
- 接收和分发消息的应用
- RabbitMQ Server就是Message Broker
- 接收和分发消息的应用
- Virtual host
- 出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。
- 当多个不同的用户使用同一个RabbitMQ Server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange / queue等
- 出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。
- Connection
- publisher / consumer和broker之间的TCP连接
- 断开连接的操作只会在client端进行,Broker不会断开连接,除非出现网络故障或broker服务出现问题
- publisher / consumer和broker之间的TCP连接
- Channel
- 如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。Channel是在Connection内部建立的逻辑链接,如果应用程序支持多线程, 通常每个thread创建单独的channel进行通讯。
- AMQP method包含了channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。channel作为轻量级的connection极大减少了操作系统建立TCP connection的开销。
- 如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。Channel是在Connection内部建立的逻辑链接,如果应用程序支持多线程, 通常每个thread创建单独的channel进行通讯。
- Exchange
- message到达broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去。
- 常用的类型有:direct(point-to-point),topic(publish-subscribe)and fanout(multicast)
- message到达broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去。
- Queue
- 消息最终被送到这里等待consumer取走。
- 一个message可以被同时拷贝到多个queue中
- 消息最终被送到这里等待consumer取走。
- Binding
- exchange和queue之间的虚拟连接,binding中可以包含routing key。
- Binding信息被保存到exchange中查询表中,用于message的分发依据
- exchange和queue之间的虚拟连接,binding中可以包含routing key。
- Broker
- Exchage类型
- Exchage有多种类型,最常用的是Direct / Fanout / Topic三种类型
- Direct:Message中的“routing key”如果和Binding中的“binding key”一致,Direct exchange则将message发送到对应的queue中
- Fanout:每个发到Fanout类型Exchange的message都会分到所有绑定的queue上去
- Topic:根据routing key及通用规则,Topic exchange将分发到目标queue中
- Exchage有多种类型,最常用的是Direct / Fanout / Topic三种类型
- 典型的“生产 / 消费”模型
- 生产者发送消息到broker server(Rabbit MQ)。在Broker内部,用户创建Exchage / Queue,通过Binding规则将两者联系在一起。Exchange分发消息,根据类型 / binding的不同分发策略有区别。消息最后来到Queue中,等待消费者取走。
- 基本概念
comments powered by Disqus