一.主流消息中间件的选型

        1 .ActiveMQ(最"老"老牌,但维护比较慢)

1.1有Apache出品,java开发,支持JMS1.1协议和J2EE1.4的规范

1.2支持广泛的连接协议:OpenWire/STOMP/REST/XMPP/AMQP

1.3支持多种语音客户端,支持插件,管理方便,便于配置集群代理

优点: 基于JAVA,跨平台运行,可以用JDBC连接多种数据库,有完善的界面、监控、安                          全机制,自动重连和错误重重试

缺点: 社区活跃度不及RabbitMQ,目前重心放到6.0产品Apollo,对5的Bug维护少,不适合用于上千个对列的应用场景

        2.RabbitMQ(最"火",适合大小公司,各种场景通杀)

                2.RabbitMQ(最"火",适合大小公司,各种场景通杀)

2.2高可靠性,支持发送确认,投递确认等特性

2.3高可用,支持镜像对列

2.4支持插件

优点: 基于Erlang,支持高并发,支持多种平台,多种客户端,文档齐全,可靠性,在互联网公司有较大规模的应用,社区活跃度搞

缺点:Erlang语言较为小众,不利于二次开发, 代理架构下,中央节点增加了延迟,影响性能,使用了AMQP协议,使用起来有学习成本

3.RocketMQ(最"猛",功能强,但考验公司的运维能力)

                3.1阿里巴巴团队开发,经受双十一考验

3.2能够保证严格的消息顺序

3.3亿级消息堆积能力

3.4丰富的消息拉取模式

优点:基于java开发,方便二次开发,单机支持1万以上的持久化对列,内存和磁盘都有一份数据,保证性能+高可用,开发度较活跃,版本更新很快

缺点:客户端种类不多,较成熟的是java,没有Web界面,提供一个CLI(命令行界面),社区关注度及成熟不如RabbitMQ

        4.Kafka(最"强",支持超大量数据,但消息可靠性弱)

                4.1Linkedln开发的分布式的日子提交系统

4.2独特的分区特性,适用于大数据系统

4.3性能高效、可扩展良好

4.4可复制、可容错

优点:原生的分布式系统,零拷贝技术,减少IO的操作步骤,提高系统的吞吐量,快速持久化,可以在O(1)的系统开销小进行消息持久化,支持数据批量发送和拉取

缺点:单机超过64个对列/分区时,性能明显劣化, 使用短轮询方式,实时性取决于轮询间隔时间,消费失败不支持重试,可靠性比较差

二.RabbitMQ高性能的原因

        1.RabbitMQ底层使用Erlang实现,天生具有高性能基因

1.1Erlang的特点:

1.1.1通用的面向并发的编程语言,适用于分布式系统

1.1.2基于虚拟机解释运行,跨平台部署

1.1.3进程上下文切换效率远高于C语言

1.1.4有这和原生Socket一样的延迟

三.AMQP协议介绍

      1.Broker:接收和分发消息的应用,RabbitMQ就是Message Broker

2.Virtual Host:虚拟Broker,将多个单元隔离开

3.Connection:publisher/consumer和broker之前的TCP连接

4.Channel:connection内部建立的逻辑连接,通常每个线程创建单独的channel

5.Routing Key:路由键,用来指示消息的路由转发,相当于快递的地址

6.Exchange:交换机,相当于快递的分拨中心

7.Queue:消息对列,消息最终被送到这里等待consumer取走

8.Binding:exchange和queue之间的虚拟连接,用于message的分发依据

四.RabbitMQ的心脏(Exchange)

        1.Exchange是AMQP协议和RabbitMQ的核心组件

2.Exchange的功能是根据绑定关系和路由键为消息提供路由,将消息转发至相应的对列

3.Exchange的类型:Direct/Topic/Fanout/Headers,其中Headers使用很少,以前三种为主

五.Exchange常用类型简绍

        1.Direct Exchange模式(直接交换模式),Message中的Routing Key如果和Binding key一致,Direct Exchange则将message发到对应的queue中

2.Fanout Exchange模式(广播模式),只要和交换机绑定了的queue,都会接收到消息

3.Topic Exchange模式(通配符模式),根据Routing Key及通配规则,将消息发送到Queue中,#:匹配任意个数的word, *:匹配任意1个word

六.RabbitMQ安装

1.先安装erlang

2.在安装RabbitMQ

七.RabbitMQ可视化界面 

        1.访问 http://localhost:15672/#/

2.默认账号密码:guest , guest

 八.RabbitMQ命令行管理

        1.使用场景

1.1生产环境、端口限制等不便打开网页端工具的场景

1.2使用脚本自动化配置RabbitMQ

2.使用口诀

2.1想看什么就List什么

2.2想清空什么就purge什么

2.3想删除什么就Delete什么

2.4一切问题记得使用 --help

九.RabbitMQ消息交换的关键是什么? 

        1.深刻理解AMQP协议

2.消息流转流程

2.1由生产者发送到Exchange,再由路由规则将消息转发到指定的queue,消费者从对列中将消息取走

3.合理的交换机和对列设置

3.1交换机数量不能过多,一般来说同一个业务,或者同一类业务使用同一个交换机

3.2合理设置对列数量,一般来说一个微服务监听一个对列,或者一个微服务的一个业务监听一个队列

3.3合理配置交换机类型,使用Topic模式时仔细设置绑定键

4.尽量使用自动化配置

4.1将创建交换机/对列的操作固话在应用代码中,免去复杂的运维操作,高效且不易出错

4.2一般来说,交换机由双方同时声明,对列由接收方声明并配置绑定关

4.3交换机/对列的参数一定要由双方开发团队确认,否则重复声明试,若参数不一致,会导致声明失败

嘿嘿本章就到这啦,希望可以帮到大家了解RabbitMQ!下一章会带着大家去使用MQ,以及后面会有进阶,集群啊等等(来自本人学习的笔记)

RabbitMQ基础篇 (一)相关推荐

  1. RabbitMQ基础篇

    目录 1.初识MQ1.1.同步和异步通讯 1.1.1.同步通讯 1.1.2.异步通讯 1.2.技术对比 2.快速入门 2.1.安装RabbitMQ 2.2.RabbitMQ消息模型 2.3.入门案例 ...

  2. 分布式系统消息中间件——RabbitMQ的使用基础篇

    分布式系统消息中间件--RabbitMQ的使用基础篇 转载于:https://www.cnblogs.com/zhehan54/p/9679101.html

  3. 黑马SpringBoot --基础篇

    目录 导读 1.快速上手 1.1SpringBoot入门程序开发 1.1.1基础创建方式--常规 1.1.2手动创建方式--补充 1.1.3基础创建方式--下载 1.1.4基础创建方式--阿里云 1. ...

  4. SpringBoot2基础篇

    目录 前言 从今天开始进入微服务阶段 一. HelloWorld 1.1.什么是SpringBoot 1.3.微服务架构 二.第一个SpringBoot程序 2.1.环境配置 2.2.创建基础项目说明 ...

  5. 谷粒商城分布式基础篇1-个人版

    基础篇 1 项目简介 1.1 项目背景 1.2 电商模式 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O 1.2.1 B2B 模式 B2B(Business to Business ...

  6. spring Boot 2 基础篇 。内含 整合一个spring boot 的 小案例

    目录 springBoot2基础篇 前言与开发环境 一.快速创建Boot项目 1.使用spring提供的快速构建 2.基于maven的手动构建 3.在Idea中隐藏指定文件/文件夹 二.SpringB ...

  7. 安排,谷粒商城java分布式开发基础篇高级篇与高可用集群架构篇2020

    来源: 来自网络,如侵权请告知博主删除????. 仅学习使用,请勿用于其他- 最近有小伙伴管我要分布式这类的项目,还有一些要商城的,还有要springboot,springcloud,k8s等,几乎涵 ...

  8. 谷粒商城基础篇(保姆级总结)

    谷粒商城基础篇 文章目录 谷粒商城基础篇 项目相关基础 知识介绍 微服务架构图和项目描述 **微服务划分图** Vrgrant systemctl命令 配置环境 Docker自启动命令 下载mysql ...

  9. 分布式基础篇--介绍

    一.分布式基础篇 1 项目简介 1.1 项目背景 1.2 电商模式 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O 1.2.1 B2B 模式 B2B(Business to Bus ...

最新文章

  1. 【转载】Hyperledger学习小结
  2. BUUCTF-----actf_2019_babyheap (UAF)
  3. mysql eager mode_MySQL Connector Net 6.6.5 Entity Framework 显式预加载 Eager Load Bug
  4. 为不同的屏幕尺寸提供不同的图片(为那些没有必要下载全尺寸大图的设备节省带宽)...
  5. Python 项目实践三(Web应用程序)第四篇
  6. 高德JS依赖分析工程及关键原理
  7. 作者:钱卫宁(1976-),男,华东师范大学计算机科学与软件工程学院教授、博士生导师。...
  8. RocketMQ有哪些消息类型?springboot如何整合rocketMQ
  9. postgreSQL源码分析——索引的建立与使用——GIN索引(2)
  10. 当前可用的喜马拉雅专辑下载器
  11. Tomcat-日志格式配置
  12. Dreamweaver CS6的基本使用教程
  13. SpringBoot+POI方式导出excel【加水印】
  14. c++经典小游戏,源码奉上(免费复制)
  15. lodop 条码类型说明
  16. Vue的diff算法原理是什么?
  17. VMware临时文件清理
  18. HTMl账号密码登录跳转下一个页面问题/网页输入正确的账号面膜登录下一个界面/PHP网页禁止某个链接直链访问
  19. 各主流编程语言适用领域——软件工程
  20. 丹尼尔·平克:未来属于“高感性族群”

热门文章

  1. VUE+Nodejs 商城项目练习项目(前台购物)
  2. 系统应用修改包名,导致OTA升级后用户数据丢失
  3. 微信小程序--行星轨迹
  4. 多核CPU,单核CPU,超线程技术,与多线程程序深入浅出
  5. 1,vue播放视频之—引入.m3u8后缀的hsl视频流
  6. 微信转发软件后缀_微信发送不了100M的视频?其实只需要改个后缀,长知识了...
  7. 8.1 linux基础,创建用户
  8. GB28181系列笔记-语音对讲功能
  9. Ubuntu17.0版本 安装firefox浏览器flash插件
  10. ubuntu 14.04.5 firefox 浏览器flash插件安装