消息中间件

  • 使用消息中间件的作用

    • 解耦
    • 削峰
    • 异步
    • 顺序保证
    • 冗余(存储)
  • RabbitMQ的特点

    • 可靠性
    • 灵活的路由
    • 扩展性
    • 高可用
    • 多语言客户端
    • 插件机制
    • 多协议(主要还是AMQP)

相关概念

  • Producer:生产者,投递消息的一方
  • Consumer:消费者,接收消息的一方
  • Broker:RabbitMQ的服务节点
  • Queue:队列,是RabbitMQ的内部对象,用于存储消息。RabbitMQ中消息只能存储在队列中,这一点和Kafka这种消息中间件相反。Kafka将消息存储在topic(主题)这个逻辑层面,而相应的队列逻辑只是topic实际存储文件中的位移标识。RabbitMQ 的生产者生产消息井最终技递到队列中,消费者可以从队列中获取消息并消费。

    多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊 CRound-Robin ,即轮询)

    给多个消费者进行处理,而不是每个消费者都收到所有的消息井处理,如图所示



    RabbitMQ 不支持队列层面的广播消费,如果需要广播消费,需要在其上进行 次开发,处理逻辑会变得异常复杂,同时也不建议这么做。
  • Exchange:交换器。上图看起来像是我们将消息丢到消息队列当中,实际上这在rabbitMQ中不会发生。实际上生产者将消息丢到交换器中,由交换器将消息路由到一个或者多个队列中。

    如果路由不到,或许返回给生产者,或许直接丢弃。交换器有四种类型。
  • RoutingKey:路由键。生产者将消息->交换器时,一般指定一个RoutingKey来决定路由规则。RoutingKey需要和交换器类型及绑定键联合使用。
  • Binding:绑定。通过绑定将队列和交换器关联起来。绑定时一般会指定绑定键(BingdingKey),当RoutingKey与BingdingKey匹配时,消息会被路由到对应的队列中。
  • 交换器类型
    • fanout:把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。
    • direct:把消息路由到那些BindingKey与RoutingKey完全匹配的队列中。
    • topic:与direct类型有些类似,不过队列的匹配规则有些不同
      • RoutingKey为"."号分隔的字符串(被分开的每一段独立字符称为一个单词),如"com.rabbitmq.client","java.util.concurrent";
      • BindingKey的形式与RoutingKey一样;
      • BindingKey可以存在两种特殊字符串"","#",用于做模糊匹配,""用于匹配1个单词,"#"用于匹配多个单词(可以是0个)。
    • headers:不依赖于路由键的规则,而是根据消息内容中的headers属性进行匹配。绑定队列和交换器时指定键值对,发送消息到交换器时,RabbitMQ会拿headers属性里的键值对进行对比,完全匹配则会路由到对应队列。headers类型交换器性能很差,很少使用。
  • Connection:生产者与消费者和Broker之间建立的TCP连接。
  • Channel:信道。建立在Connection之上的虚拟连接。RabbitMQ处理的每条AMQP指令都是通过信道完成的。



    RabbitMQ通过采用类似NIO的做法,选择TCP连接复用,减少性能开销,便于管理。

参考资料:RabbitMQ实战指南

RabbitMQ:一、入门的更多相关文章

  1. [转][RabbitMQ+Python入门经典] 兔子和兔子窝

    [转][RabbitMQ+Python入门经典] 兔子和兔子窝 http://blog.csdn.net/linvo/article/details/5750987 RabbitMQ作为一个工业级的消 ...

  2. RabbitMQ基础入门篇

    下载安装 Erlang RabbitMQ 启动RabbitMQ管理平台插件 DOS下进入到安装目录\sbin,执行以下命令 rabbitmq-plugins enable rabbitmq_manag ...

  3. RabbitMQ从入门到精通

    RabbitMQ从入门到精通 学习了:http://blog.csdn.net/column/details/rabbitmq.html RabbitMQ是AMQP(advanced message ...

  4. 中小研发团队架构实践之RabbitMQ快速入门及应用

    原文:中小研发团队架构实践之RabbitMQ快速入门及应用 使用过分布式中间件的人都知道,程序员使用起来并不复杂,常用的客户端API就那么几个,比我们日常编写程序时用到的API要少得多.但是分布式中间 ...

  5. RabbitMQ(一):RabbitMQ快速入门

    RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.作为一名合格的开发者,有必要对RabbitMQ有所了解,本文是RabbitMQ快速入门文章. RabbitMQ ...

  6. ASP.NET Core消息队列RabbitMQ基础入门实战演练

    一.课程介绍 人生苦短,我用.NET Core!消息队列RabbitMQ大家相比都不陌生,本次分享课程阿笨将给大家分享一下在一般项目中99%都会用到的消息队列MQ的一个实战业务运用场景.本次分享课程不 ...

  7. RabbitMQ由浅入深入门全总结(二)

    写在最前面 距离上一次发文章已经很久了,其实这段时间一直也没有停笔,只不过在忙着找工作还有学校结课的事情,重新弄了一下博客,后面也会陆陆续续会把文章最近更新出来~ 这篇文章有点长,就分了两篇 PS:那 ...

  8. RabbitMQ由浅入深入门全总结(一)

    写在最前面 距离上一次发文章已经很久了,其实这段时间一直也没有停笔,只不过在忙着找工作还有学校结课的事情,重新弄了一下博客,后面也会陆陆续续会把文章最近更新出来~ 这篇文章有点长,就分了两篇Q PS: ...

  9. [RabbitMQ+Python入门经典] 兔子和兔子窝

    原文联接: http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/ RabbitMQ作为一个工业级的消息队列服务器,在其客户端手册列表的P ...

  10. rabbitmq(1)-入门

    参考: documentation: https://www.rabbitmq.com/documentation.htmldemo: https://www.rabbitmq.com/getstar ...

随机推荐

  1. java1.8时间处理

    object TimeUtil { var DEFAULT_FORMAT = DateTimeFormatter.ofPattern("yyyyMMddHHmmss") var H ...

  2. Windows平台搭建Git服务教程详解

    引言 软件企业的核心就是代码,如何确保代码的安全?如何在团队开发中协同工作?为解决这些问题,我们需要采用相应的管理工具来满足管理的需求.探长从最初的VSS.SVN.TFS到现在的Git存储一路走来,感 ...

  3. Rocket - tilelink - fastProperty

    https://mp.weixin.qq.com/s/9nikweQUGG5FO3Z8t6feaw 介绍Parameters中定义的fastProperty的实现.(使用最近的新版本,差别不大)   ...

  4. Java实现 LeetCode 700 二叉搜索树中的搜索(遍历树)

    700. 二叉搜索树中的搜索 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 例如, 给定二叉搜 ...

  5. Java实现 LeetCode 677 键值映射(字典树)

    677. 键值映射 实现一个 MapSum 类里的两个方法,insert 和 sum. 对于方法 insert,你将得到一对(字符串,整数)的键值对.字符串表示键,整数表示值.如果键已经存在,那么原来 ...

  6. Java实现 蓝桥杯VIP 算法提高 身份证排序

    算法提高 身份证排序 时间限制:1.0s 内存限制:256.0MB 问题描述 安全局搜索到了一批(n个)身份证号码,希望按出生日期对它们进行从大到小排序,如果有相同日期,则按身份证号码大小进行排序.身 ...

  7. Java实现复数运算

    1 问题描述 编程实现两个复数的运算.设有两个复数 和 ,则他们的运算公式为: 要求:(1)定义一个结构体类型来描述复数. (2)复数之间的加法.减法.乘法和除法分别用不用的函数来实现. (3)必须使 ...

  8. Linux 权限管理-ACL权限

    ACL权限是为了在现有的所有者.所属组.其他人不够使用的情况下使用的,使用它必须保证文件所在的分区支持ACL df -h:查看系统所有分区信息 dumpe2fs -h /dev/vda1,可以查看分区 ...

  9. Linux目录结构与功能

    在Linux中,一切皆文件.所以,Linux和Windows目录有很大的不同,它没有明确的盘符,它的目录就像一棵大树一样,顶层目录就是根目录:/ ,然后下面又有很多个分支,分支可以再分,从而形成一个庞 ...

  10. CICD | Jenkins & Gitlab集成:WebHook触发构建

    在上一篇博客中,我们学习了Jenkins的搭建和插件+流水线的基本使用方法,Jenkins极大地提升了部署效率. 最近想学习一下如何集成GitLab webhook,实现进一步解放双手,目标: 推送( ...