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绑定。

最新文章

  1. asp.net读取execl模板并填充数据,关闭进程
  2. List去重复(不是最简单,但绝对是最易理解)
  3. 第十章 系统级I/O
  4. shell学习记录002-知识点储备
  5. Android Studio:Gradle常用命令
  6. OC - 11.使用Quartz2D剪裁图片并保存
  7. SQL string类型的数据按int类型排序 分类: SQL Server 2014-12-08 16:56 393人阅读 评论(0) 收藏
  8. 克拉夫斯曼高端定制 刘霞---【YBC中国国际青年创业计划】
  9. javascript设计模式——组合模式
  10. highcharts使用-拼接数据
  11. div上下左右居中
  12. 【BZOJ1419】Red is good 期望DP
  13. Aurora 安装
  14. Docker使用exec进入正在运行中的容器
  15. extract-text-webpack-plugin 作用、安装、使用
  16. Wannafly挑战赛13 C:zzf的好矩阵(思维)
  17. JS脚本实现CSDN免登陆免关闭广告插件自动展开“阅读更多”内容
  18. 【硅谷问道】Chris Lattner 访谈录(下)
  19. ppt标题排版
  20. UI5-文档-4.24-Filtering

热门文章

  1. java、c/c++ 、python 等性能比较 杂谈(整理)
  2. ant入门程序
  3. Android网络开发之基本介绍
  4. ASP.NET DataBase
  5. 路径,通过navigation可以查看 *.class文件
  6. HUDOJ-----1394Minimum Inversion Number
  7. Python的 numpy中 meshgrid 和 mgrid 的区别和使用
  8. 微软解决方案框架 - MSF的团队模型、MSF的开发模型,关于SA系统分析师信息的一篇好帖子
  9. HDU 3666 THE MATRIX PROBLEM (差分约束 深搜 & 广搜)
  10. python练习笔记——完全数(1000以内的)