rabbitmq系列(一)-基本概念理解
2017-05-31 16:50
253 查看
1.简介
RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue protocol)的开源实现。AMQP高级消息队列,说白了就是一个开源的消息中间件。它能解决不同组件、模块、系统间消息通信。2.系统架构
RabbitMQ Server: 也叫broker server,存储消息的地方Producer:数据的发送方
Consumer:数据的接收方
Connection: 就是一个TCP的连接。Producer和Consumer都是通过TCP连接到RabbitMQ Server的。以后我们可以看到,程序的起始处就是建立这个TCP连接。
Channels: 虚拟连接。它建立在上述的TCP连接中。数据流动都是在Channel中进行的。也就是说,一般情况是程序起始建立TCP连接,第二步就是建立这个Channel。
那么,为什么使用Channel,而不是直接使用TCP连接?
对于OS来说,建立和关闭TCP连接是有代价的,频繁的建立关闭TCP连接对于系统的性能有很大的影响,而且TCP的连接数也有限制,这也限制了系统处理高并发的能力。但是,在TCP连接中建立Channel是没有上述代价的。对于Producer或者Consumer来说,可以并发的使用多个Channel进行Publish或者Receive。
3、图解
1. 信息生产者将消息(message)发送到exchange
2. exchange接受消息之后,负责将其路由到具体的队列中
3. Bindings负责连接exchange和队列(queue)
4. 消息到达队列(queue),然后等待被消息接收端处理
5. 消息接收端处理消息
Exchanges有三种类型:direct, fanout,topic。 每个实现了不同的路由算法(routing algorithm)。
Direct exchange: 如果 routing key 匹配, 那么Message就会被传递到相应的queue中。其实在queue创建时,它会自动的以queue的名字作为routing key来绑定那个exchange。
Fanout exchange: 会向响应的queue广播。
Topic exchange: 对key进行模式匹配,比如ab*可以传递到所有ab*的queue。
Consumer和Procuder都可以通过 queue.declare 创建queue。如果queue已经存在,也不会报错。如果没有,要么发送不了消息,要么取不到消息,所以还是都创建吧。
Bindings就是将通过Exchange将queue和routing keys绑定。
相关文章推荐
- javaSE_8系列博客——Java语言的特性(一)--关于面向对象基本概念的理解(1)
- 通过实例理解 RabbitMQ 的基本概念
- Oracle 11g AWR 系列一:AWR 的基本概念理解
- Kafka系列4-基本概念及消费者组(Consumer Group)的理解
- 分布式消息队列RabbitMQ之一:基本概念理解
- javaSE_8系列博客——Java语言的特性(一)--关于面向对象基本概念的理解(2)--对象
- TensorFlow系列03——TensorFlow基本概念Tensor理解
- 消息中间件系列二:RabbitMQ入门(基本概念、RabbitMQ的安装和运行)
- DB2基本概念的理解
- 大型企业网络配置系列课程详解(二) --OSPF多区域配置与相关概念的理解 推荐
- Remoting系列(一)----Remoting的基本概念
- WebSphere Application Server 概要(Profile)理解入门,第 1 部分:基本概念
- STL:一些基本概念的粗浅理解和一些别人的经验
- Mogre学习系列(3)基本概念Cameras, Lights, and Shadows
- 大型企业网络配置系列课程详解(三)--OSPF高级配置与相关概念的理解 推荐
- 大型企业网络配置系列课程详解(四) --HSRP和VRRP配置与相关概念的理解(一) 推荐
- 活动目录系列之一:基本概念
- (教学思路 c#之面向对象二) 初步理解面向对象的基本概念
- 基本概念理解——回送