什么是AMQP?

AMQP,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件而设计的。基于此协议的客户端与消息中间件可以传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。RabbitMQ就是通过Erlang语言实现的一种消息中间件。

AMQP的特征

AMQP的主要特征是面向消息、队列、路由(包括点对点和发布\订阅模式)、可靠性、安全

JMS编程模型

connectionFactory、destination、connection、session(产生客户端与消息队列服务器的TCP连接)
消息生产者、消息消费者、消息监听器

RabbitMQ是什么

RabbitMQ是一个遵循AMQP协议的消息中间件,它从生产者接受消息并传递给消费者,在这和过程中,根据路由规则就行路由、缓存和持久化。

消息队列中间件的应用场景(不只是RabbitMQ)

  • 异步处理:在注册服务的时候,如果同步串行化的方式处理,让存储数据、邮件通知等挨着完成,延迟较大,采用消息队列,可以将邮件服务分离开来,将邮件任务之间放入消息队列中,之间返回,减少了延迟,提高了用户体验
  • 应用解耦:电商里面,在订单与库存系统的中间添加一个消息队列服务器,在用户下单后,订单系统将数据先进行持久化处理,然后将消息写入消息队列,直接返回订单创建成功,然后库存系统使用拉/推的方式,获取订单信息再进行库存操作
  • 流量削锋:秒杀活动中,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。
    服务器在接收到用户请求后,首先写入消息队列。这时如果消息队列中消息数量超过最大数量,则直接拒绝用户请求或返回跳转到错误页面;
    秒杀业务根据秒杀规则读取消息队列中的请求信息,进行后续处理
  • 日志处理:Kalfka消息中间件

RabbitMQ的结构图

几个概念说明:

  • Broker:简单来说就是消息队列服务器实体。
  • Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
  • Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
  • Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
  • Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
  • vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
  • Producer:消息生产者,就是投递消息的程序。
  • Consumer:消息消费者,就是接受消息的程序。
  • Channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

消息队列的使用过程

1、客户端连接到消息队列服务器,打开一个channel。
2、客户端声明一个exchange,并设置相关属性。
3、客户端声明一个queue,并设置相关属性。
4、客户端使用routing key,在exchange和queue之间建立好绑定关系。
5、客户端投递消息到exchange。
6、exchange接收到消息后,就根据消息的key和已经设由binding,进行消息路里,将消息投递到一个或多个队列里

ps:通过durable参数来进行exchang、queue、消息持久化

RabbitMQ交换机

RabbitMQ包含四种不同的交换机类型:

  • Direct exchange:直连交换机,转发消息到routigKey指定的队列,如果消息的routigKey和binding的routigKey直接匹配的话,消息将会路由到该队列
  • Fanout exchange:扇形交换机,转发消息到所有绑定队列(速度最快),不管消息的routigKey息和binding的参数表头部信息和值是什么,消息将会路由到所有的队列
  • Topic exchange:主题交换机,按规则转发消息(最灵活),如果消息的routigKey和binding的routigKey符合通配符匹配的话,消息将会路由到该队列
  • Headers exchange:首部交换机 ,如果消息的头部信息和binding的参数表中匹配的话,消息将会路由到该队列。

参考博客地址:http://blog.csdn.net/u010046908/article/details/54864567

消息队列之RabbitMQ原理相关推荐

  1. 消息队列、RabbitMQ原理、消息队列保证幂等性,消息丢失,消息顺序性,以及处理消息队列消息积压问题

    消息队列 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已 常见的消息队列 RabbitMq ActiveM ...

  2. 消息队列之 RabbitMQ

    消息队列之 RabbitMQ 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时候把这块的知识整理记录一下了. 市面上的消息队列产品有很 ...

  3. 【重难点】【RabbitMQ 01】消息队列的作用、主流的消息队列、RabbitMQ 基于什么传输消息、RabbitMQ 模型架构、死信队列和延迟队列

    [重难点][RabbitMQ 01]消息队列的作用.主流的消息队列.RabbitMQ 基于什么传输消息.RabbitMQ 模型架构.死信队列和延迟队列 文章目录 [重难点][RabbitMQ 01]消 ...

  4. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ

    RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ ...

  5. 消息队列mysql redis那个好_Redis作为消息队列与RabbitMQ的比较

    Redis作为消息队列与RabbitMQ的比较 RabbitMQ RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩 ...

  6. 【消息队列之rabbitmq】Rabbitmq之消息可靠性投递和ACK机制实战

    目录 一.绪论 二.生产者 2.1事务机制 2.2confirm模式 串行模式 批量模式 异步模式 三.消费者 3.1手动ACK 一.绪论 上篇文章介绍了rabbitmq的基本知识.交换机类型实战&l ...

  7. 消息队列和ZeroMQ原理和应用

    一.定义 消息队列(message queue)本质就是个队列,先进先出FIFO. 利用FIFO先进先出的特性,可以保证消息的顺序性. 主要用途:不同服务server.进程process.线程thre ...

  8. MQ消息队列之RabbitMQ的安装和原理

    1. RabbitMQ安装 1.1 推荐方法:docker安装 一行命令搞定: docker pull rabbitmq:management 开启宿主机与容器的两个重要的端口映射即可: docker ...

  9. 消息队列探秘 – RabbitMQ 消息队列工作原理

    1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ...

最新文章

  1. css火狐 hover 图片会重新请求,在“unhovering”之后使CSS Hover状态保持不变
  2. STL中的栈结构和队列结构
  3. 任意组合指令达到免杀
  4. 记一次 .NET 某市附属医院 Web程序 偶发性CPU爆高分析
  5. 【专升本计算机】最新甘肃省专升本考试C语言部分复习题带答案
  6. OCLint+Xcode 代码规范利器
  7. fullcalendar 显示的时间间隔只有四十五分钟_NHR系列智能显示控制仪表RS485通信中应用...
  8. python3 dict 排序_Python 3.9 新增功能展望
  9. MySQL有什么新功能?
  10. multiplot 安装与配置
  11. NOD32和小红伞的90天免费KEY申请
  12. 免费公开课:讲解DevExpress 2016.2新版本功能
  13. wsl2 安装 Centos8
  14. win10系统开机自动修复失败的解决方法
  15. 图像形状及数量识别(matlab实现)
  16. 编译Linux 内核
  17. PaaS,BLT模型中的一部分
  18. Voluntarily Relinquishing the Processor-----《Pro_Java_8_Programming_(3rd_edition)》
  19. POE网络变压器:谈谈网络变压器POE最新标准POE bt及需要关注的三个点
  20. UEFI+GPT模式下安装win 10系统——生命不止,折腾不息

热门文章

  1. 移动端实时音视频直播技术详解(一):开篇
  2. 大数据实战之hadoop生态概况和官网文档解读
  3. 百度云企业级运维平台——NoahEE
  4. Python 正则匹配以xx开头以xx结尾的单词
  5. 今天是微信7周年 7年之痒 一切都已被改变
  6. NVIDIA/apex报错解决过程
  7. 上海电力学院计算机院校区,上海电力学院有几个校区及校区地址 哪个校区最好...
  8. fetchMetadata: sill resolveWithNewModule raw-loader@0.5.1 checking installable status
  9. HMC7043和HMC7044芯片配置使用
  10. rman 备份脚本之总结分析