尚硅谷RabbitMQ教程笔记 一、消息队列_尚硅谷消息队列笔记-程序员宅基地

技术标签: rabbitmq  

1、MQ的相关概念

1.1 什么时MQ

MQ(message queue),从字面意思上看,本质上是个队列,FIFO先入先出,只不过队列中存放的内容是Messahe而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不需要依赖其他服务。

1.2 为什么要用MQ

流量削峰
举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。
在这里插入图片描述
应用解耦
以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。当转变成基于消息队列的方式后,系统间调用的问题会减少很多,比如物流系统因为发生故障,需要几分钟来修复。在这几分钟的时间里,物流系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成。当物流系统恢复后,继续处理订单信息即可,中单用户感受不到物流系统的故障,提升系统的可用性。
在这里插入图片描述

异步处理
有些服务间调用是异步的,例如 A 调用 B,B 需要花费很长时间执行,但是 A 需要知道 B 什么时候可以执行完,以前一般有两种方式,A 过一段时间去调用 B 的查询 api 查询。或者 A 提供一个 callback api,B 执行完之后调用 api 通知 A 服务。这两种方式都不是很优雅,使用消息总线,可以很方便解决这个问题,A 调用 B 服务后,只需要监听 B 处理完成的消息,当 B 处理完成后,会发送一条消息给 MQ,MQ 会将此消息转发给 A 服务。这样 A 服务既不用循环调用 B 的查询 api,也不用提供 callback api。同样 B 服务也不用做这些操作。A 服务还能及时的得到异步处理成功的消息。
在这里插入图片描述

1.3 MQ的分类

1.3.1.ActiveMQ

  • 优点:单机吞吐量万级,时效性 ms 级,可用性高,基于主从架构实现高可用性,消息可靠性较低的概率丢失数据 缺点:官方社区现在对
  • ActiveMQ 5.x 维护越来越少,高吞吐量场景较少使用。
  • 尚硅谷官网视频:http://www.gulixueyuan.com/course/322

1.3.2.Kafka

大数据的杀手锏,谈到大数据领域内的消息传输,则绕不开 Kafka,这款为大数据而生的消息中间件,以其百万级 TPS 的吞吐量名声大噪,迅速成为大数据领域的宠儿,在数据采集、传输、存储的过程中发挥着举足轻重的作用。目前已经被 LinkedIn,Uber, Twitter, Netflix 等大公司所采纳。

  • 优点: 性能卓越,单机写入 TPS 约在百万条/秒,最大的优点,就是吞吐量高。时效性 ms 级可用性非常高,kafka 是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用,消费者采用 Pull 方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次;有优秀的第三方Kafka Web 管理界面 Kafka-Manager;在日志领域比较成熟,被多家公司和多个开源项目使用;功能支持:功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用
  • 缺点:Kafka 单机超过 64 个队列/分区,Load 会发生明显的飙高现象,队列越多,load 越高,发送消息响应时间变长,使用短轮询方式,实时性取决于轮询间隔时间,消费失败不支持重试;支持消息顺序,但是一台代理宕机后,就会产生消息乱序,社区更新较慢;

1.3.3.RocketMQ

RocketMQ 出自阿里巴巴的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一些改进。被阿里巴巴广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog 分发等场景。

  • 优点:单机吞吐量十万级,可用性非常高,分布式架构,消息可以做到 0 丢失,MQ 功能较为完善,还是分布式的,扩展性好,支持 10 亿级别的消息堆积,不会因为堆积导致性能下降,源码是 java 我们可以自己阅读源码,定制自己公司的 MQ
  • 缺点:支持的客户端语言不多,目前是 java 及 c++,其中 c++不成熟;社区活跃度一般,没有在 MQ核心中去实现 JMS 等接口,有些系统要迁移需要修改大量代码

1.3.4.RabbitMQ

2007 年发布,是一个在 AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。

  • 优点:由于 erlang 语言的高并发特性,性能较好;吞吐量到万级,MQ 功能比较完备,健壮、稳定、易用、跨平台、支持多种语言 如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持 AJAX 文档齐全;开源提供的管理界面非常棒,用起来很好用,社区活跃度高;更新频率相当高
    https://www.rabbitmq.com/news.html
  • 缺点:商业版需要收费,学习成本较高

1.4 MQ的选择

1.4.1.Kafka

Kafka 主要特点是基于 Pull 的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,适合产生大量数据的互联网服务的数据收集业务。大型公司建议可以选用,如果有日志采集功能,肯定是首选 kafka 了。
尚硅谷官网 kafka 视频连接 http://www.gulixueyuan.com/course/330/tasks

1.4.2.RocketMQ

天生为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况。RoketMQ 在稳定性上可能更值得信赖,这些业务场景在阿里双 11 已经经历了多次考验,如果你的业务有上述并发场景,建议可以选择 RocketMQ。

1.4.3.RabbitMQ

结合 erlang 语言本身的并发优势,性能好时效性微秒级,社区活跃度也比较高,管理界面用起来十分方便,如果你的数据量没有那么大,中小型公司优先选择功能比较完备的 RabbitMQ。

2、RabbitMQ

2.1 RabbitMQ的概念

RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑 RabbitMQ 是一个快递站,一个快递员帮你传递快件。RabbitMQ 与快递站的主要区别在于,它不处理快件而是接收,存储和转发消息数据。

2.2 四大核心概念

生产者
产生数据发送消息的程序是生产者
交换机
交换机是 RabbitMQ 非常重要的一个部件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢弃,这个得有交换机类型决定
队列
队列是 RabbitMQ 内部使用的一种数据结构,尽管消息流经 RabbitMQ 和应用程序,但它们只能存储在队列中。队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据。这就是我们使用队列的方式
消费者
消费与接收具有相似的含义。消费者大多时候是一个等待接收消息的程序。请注意生产者,消费者和消息中间件很多时候并不在同一机器上。同一个应用程序既可以是生产者又是可以是消费者。
在这里插入图片描述

2.3 RabbitMQ的核心部分

在这里插入图片描述

2.4. 各个名词介绍

在这里插入图片描述

  • Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker
  • Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似 于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出 多个
    vhost,每个用户在自己的 vhost 创建 exchange/queue 等
  • Connection:publisher/consumer 和 broker 之间的 TCP 连接
  • Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP
  • Connection 的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程 序支持多线程,通常每个 thread 创建单独的 channel 进行通讯,AMQP method 包含了 channel id 帮助客
    户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的
    Connection 极大减少了操作系统建立 TCP connection 的开销
  • Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发 消息到 queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe)
    and fanout (multicast)
  • Queue:消息最终被送到这里等待 consumer 取走
  • Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保 存到 exchange 中的查询表中,用于 message 的分发依据

2.5. 安装

1.官网地址

https://www.rabbitmq.com/download.html

2.文件上传

上传到/usr/local/software 目录下(如果没有 software 需要自己创建)
在这里插入图片描述

3.安装文件(分别按照以下顺序安装)

rpm -ivh erlang-21.3-1.el7.x86_64.rpm
yum install socat -y
rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm

3.常用命令(按照以下顺序执行)

添加开机启动 RabbitMQ 服务
chkconfig rabbitmq-server on
启动服务
/sbin/service rabbitmq-server start
查看服务状态
/sbin/service rabbitmq-server status
在这里插入图片描述

停止服务(选择执行)
/sbin/service rabbitmq-server stop
开启 web 管理插件
rabbitmq-plugins enable rabbitmq_management
用默认账号密码(guest)访问地址 http://47.115.185.244:15672/出现权限问题

4.添加一个新的用户

创建账号
rabbitmqctl add_user admin 123
设置用户角色
rabbitmqctl set_user_tags admin administrator
设置用户权限
set_permissions [-p ]
rabbitmqctl set_permissions -p “/” admin “." ".” “.*”
用户 user_admin 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限
当前用户和角色
rabbitmqctl list_users
在这里插入图片描述

5.再次利用 admin 用户登录

在这里插入图片描述

6. 重置命令

关闭应用的命令为
rabbitmqctl stop_app
清除的命令为
rabbitmqctl reset
重新启动命令为
rabbitmqctl start_app

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42601001/article/details/123931221

智能推荐

怎样把计算机放到手机桌面壁纸,怎么把待办事项生成电脑桌面壁纸?-程序员宅基地

文章浏览阅读221次。原标题:怎么把待办事项生成电脑桌面壁纸?我的同事张晨喜欢在工作前把每天的工作待办事项一一添加到手机便签中,这样在办公的时候就能随时查看自己的工作内容了,按照待办事项清单去一一完成,这样不仅会让她更有紧迫感和任务感,还能在无形中提高工作效率。但是张晨说了在手机便签中添加工作待办事项不方便的地方,这就是她使用的办公设备是电脑,一般需要在办公的时候,时不时的打开手机查看待办事项,这样也会分散自己的注意力..._待办事项手机壁纸

Unity VR Pico apk安装失败:INSTALL_FAILED_UPDATE_INCOMPATIBLE_pico apk 安装失败-程序员宅基地

文章浏览阅读1.4k次,点赞10次,收藏8次。PICO4企业版。安装apk,报错“安装失败。(所属的Unity项目打包的apk,被我在同一台pico4安装了20次+)_pico apk 安装失败

机器学习实战(七)_loadsimpdata-程序员宅基地

文章浏览阅读265次。title: 机器学习实战(七)date: 2020-04-07 09:20:50tags: [AdaBoost, bagging, boosting, ROC]categories: 机器学习实战更多内容请关注我的博客利用AdaBoost元算法提高分类性能在做决定时,大家可能会吸取多个专家而不是一个人的意见,机器学习也有类似的算法,这就是元算法(meta-algorithm)。元算法是对其他算法进行组合的一种方式。基于数据集多重抽样的分类器前面已经学习了五种不同的分类算法,它们各有优._loadsimpdata

python内置数据结构---字符串_python 中列表 choice.lower()-程序员宅基地

文章浏览阅读217次。字符串str:单引号,双引号,三引号引起来的字符信息。数组array:存储同种数据类型的数据结构。[1, 2, 3], [1.1, 2.2, 3.3]列表list:打了激素的数组, 可以存储不同数据类型的数据结构. [1, 1.1, 2.1, 'hello']元组tuple:带了紧箍咒的列表, 和列表的唯一区别是不能增删改。集合set:不重复且无序的。 (交集和并集)字典dict:{“name”:"westos", "age":10# 1. 字符串str字符串或串(String)是由数字、字母_python 中列表 choice.lower()

超实用可执行程序-PDF文字复制后的回车符去除和谷歌百度英汉翻译-python GUI_文献翻译复制的时候都是回车-程序员宅基地

文章浏览阅读4.1k次,点赞4次,收藏3次。超实用python程序-PDF文字复制后的回车符去除和谷歌百度英汉翻译超实用python程序-PDF文字复制后的回车符去除和谷歌百度英汉翻译痛点界面与功能功能详细说明:过程记录代码和组件分析exe程序生成记录结语痛点PDF文档文字复制会包括回车符,使得文字粘贴和翻译都不方便,尤其是对于双栏的PDF。界面与功能以下为详细说明和..._文献翻译复制的时候都是回车

求正整数N以内的所有勾股数。 所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。_编写程序,计算0到输入的整数n范围内的勾股数。假设3个正整数x、y和z是勾股数,-程序员宅基地

文章浏览阅读291次。#include"stdio.h"void main(){int n;int i,j,k;int count=0;while(scanf("%d",&n)){for(i=1;i<=n;++i)for(j=i+1;j<=n;++j)for(k=j+1;k<=n;++k)if(ii+jj==k*k){printf("[%d,%d,%d], ",i,j,k);count++;}printf(“total number: %d\n”,count);}}_编写程序,计算0到输入的整数n范围内的勾股数。假设3个正整数x、y和z是勾股数,

随便推点

python 设计模式-2_python的饿汉模式-程序员宅基地

文章浏览阅读458次。常用设计模式的介绍一:单例设计模式1,单例设计模式理解2,利用python实现经典的单例模式3, 懒汉式实例化一:单例设计模式1,单例设计模式理解模式提供了一个机制,确保类有且只有一个特定的类型的对象,并提供全局的访问点。用途:通常用于日志记录、数据库操作、打印后后台处理2,利用python实现经典的单例模式class SingleTon(object): def __new__(cls): if not hasattr(cls,'instance'): _python的饿汉模式

常见职位的英文简称_职场中常见的英文缩写是什么意思?4P是哪4P?各个岗位和部门的英文缩写是什么?...-程序员宅基地

文章浏览阅读1.9k次。在大一点的企业或者外企中,你一定要知道的英文缩写,了解各个岗位和部门的英文缩写!【4P是哪4P】Product:产品Price:价格Place:渠道Promotion:促销【职位缩写】首席品牌官【CBO】——chief brand officer首席文化官【CCO】——Chief Cultural Officer开发总监【CDO】——chief Development officer人事总监 【C..._销售顾问中pc,pg,nc都是什么意思

ActiveMQ-cpp客户端程序应用异常退出问题_activemq-cpp客户端stop会奔溃-程序员宅基地

文章浏览阅读1.9k次。笔者使用ActiveMQ作为系统中消息分发的服务器,由Java Web程序读取数据库实时记录作为Producer,接收端为C++Builder开发的客户端程序,常驻客户端右下角,弹窗显示实时消息。测试时发现,当客户端断网(网线拔掉)或者服务器重启等连接中断时,客户端会直接退出,windows也没有报程序崩溃的问题,很是费解。 Debug调试代码发现问题出在自定义的Concumer_activemq-cpp客户端stop会奔溃

php中对类中静态方法和静态属性的学习和理解_静态属性和静态方法的特点-程序员宅基地

文章浏览阅读1.7k次。什么是静态方法或静态属性 static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法静态方法的特点 1.static方法是类中的一个成员方法,属于整个类,即使不用创建任何对象也可以直接调用! 2.静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。 3.静态方法和..._静态属性和静态方法的特点

遇到问题---thrift--python---ImportError: No module named thrift_importerror:no module named thrift.thrift-程序员宅基地

文章浏览阅读9.1k次。情况我们在启动hbase的thrift服务后使用python来进行测试连接hbase时报错ImportError: No module named thrift。完整报错如下:[root@host252 thrift]# python test.pyTraceback (most recent call last): File "test.py", line 3, in &l..._importerror:no module named thrift.thrift

华科电气专业转计算机专业,华中科技大学转专业-程序员宅基地

文章浏览阅读1k次。关于转专业,华科有两次机会,大一下是可以跨大类转,当然也可以在大类内部转;大二下是只能在学科大类内部转。华科有以下几个大类 信息大类、机械大类、土建环大类、电气大类、文科大类。跨大类转时信息大类与临床医学是不能转入的,但可以通过考光电中法班,通信中英班的方式转入,但是学费要高些,而且毕业是出国的(当然也可以选择不出)。很多同学对船舶与海洋工程不了解,其实这个专业就业非常不错,比信息大类内的不少专业..._华中科技大学转专业机会

推荐文章

热门文章

相关标签