转载:https://www.2cto.com/kf/201609/548190.html

个消息没有回应,则MQ不会再往消费者A中发消息,直到收到消息确认后才会再次发送。

Ack:消息确认。

:启动一个生产者,无消费者。

条消息,磁盘写入是6250/s

当消息的堆积量达到40W以上时,每秒进入队列的速率就会降到4500~5000/s之间

 
 

:启动三个生产者,无消费者。

 
 

条消息,磁盘写入是6500/s

 
 

:启动10个生产者,无消费者

 
 

条消息,磁盘写入是7300/s

 
 

:启动20个生产者,无消费者

 
 

个生成者是8500,经过反复测试最终发现20~25个生产者效率最高。

 
 

个消费者,Qos为0,默认ack接收到消息马上返回。

测试结果:每秒消费8000Qps

 
 

:启动无生产者,1个消费者,Qos为1,默认应答接收到消息马上返回。

测试结果:每秒消费310Qps;

 
 

:启动无生产者,1个消费者,Qos为1,默认不应答接收到消息马上返回

 
 

测试结果:每秒消费11500Qps;

 
 

:启动无生产者,一个消费者,Qos为10,默认ack接收到消息马上返回。

 
 

 
 

:启动1个生产者,1个消费者,Qos为10,默认Ack,接收到消息后马上返回。

 
 

测试结果:生成4000Qps/s消费1000Qps/s

 
 

:启动1个生成者,1个消费者,Qos为10,默认Ack,接收到消息休眠10ms

 
 

测试结果:生产4500Qps/s消费10Qps/s

 
 

:启动1个生产者,1个连接,10个消费者,Qos为100,默认Ack,接收到消息休眠10ms

 
 

测试结果:生产5000qps/s消费500qps/s

这说明一味的增加channel开启consumer应该是有瓶颈的,随着consumer的增加,消费效率应该也不会有太大的增加,接着测试

 
 

:启动一个生产者,1个连接,30个消费者,Qos为100,默认Ack,接收到消息休眠10ms

测试结果:生产4500qps/s消费450qps/s

左右,感觉要到瓶颈了.后面我尝试过consumer_size=50,也是这个值,直到consumer_size=17的时候就是500/s,再增加consumer也不会增加效率了.

从数据上来看感觉是一个连接里面channel有一个上限值,再多也处理不完了,那可以考虑尝试增加connection来试试是否能够增加消费能力

 
 

:启动1个生产者,3个连接,每个连接里面创建17个消费者,Qos为100,默认Ack,接收到消息休眠10ms,用来模拟业务处理时间

 
 

测试结果:生产4320qps/s消费1500qps/s

:启动一个生产者,10个连接,每个连接里面创建17个消费者,Qos为100,默认Ack,接收到消息休眠10ms,用来模拟业务处理时间

 
 

总结

通过以上的测试,我们基本上得出以下几个结论:

1.生产者生产消息过快,无论是否有消费者,都会触发流控,不同的是流控强度随消费者个数加强.

2.一旦有消费者连接,就会对生产者的消息生产效率产生影响(在触发流控之后)

3.在每个连接里面在创建相应数量的consumer,可以增加消费能力,但是也是有上限的,我的
测试中上限是17

4.创建多个连接,并且每个每个连接里面consumer设置到上限数量,可以进一步增加消费能力

5.在消息堆积的情况下,消费者数量与生产者的生产效率成反比

6.在没有消息堆积的情况下,设置得当的话,基本上可以做到生产与消费同步(测试的最大值为13000+/s,加大连接数可能还会提高)

Rabbit测试及其方案的更多相关文章

  1. 【Android端】【日志收集上报SDK相关内容测试的方案梳理总结】

    测试方案: 主要从几个方面关注,功能 性能 服务端策略(目前所有的这些上报收集等都会通过开关的精细化,通过接口方式将信息返回给APP端,APP端根据相关内容进行上报,因此基于此的上报机制及收集机制都需 ...

  2. Spring实现类私有方法测试通用方案

    现实的业务场景中,可能需要对Spring的实现类的私有方法进行测试. 场景描述: 比如XXXService里有 两个函数a.函数b. 而实现类XXXServiceImpl中实现了函数a.函数b,还包含 ...

  3. 测试WWW方案(反向代理,负载均衡,HTTP加速缓存)

    大约图如下: NGINX FRONT(80)--->VARNISH(8080)---->LNMP BACKEND 1(80) |--->LNMP BACKEND 2(80) 主要是前 ...

  4. 【腾讯优测干货分享】如何降低App的待机内存(二)——规范测试流程及常见问题

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/806TiugiSJvFI7fH6eVA5w 作者:腾讯TMQ专项测 ...

  5. SQL Server获取下一个编码字符串的实现方案分割和进位

        我在前一种解决方案SQL Server获取下一个编码字符实现和后一种解决方案SQL Server获取下一个编码字符实现继续重构与增强两篇博文中均提供了一种解决编码的方案,考虑良久对比以上两种方 ...

  6. Docker 容器测试全探索

    导读 当我们构建好Docker镜像并利用多套容器共同组合成应用程序,建立起持续交付通道,了解了如何将新创建的镜像纳入到生产或者测试环境当中之后,新的问题来了——我们该如何测试自己的Docker容器?测 ...

  7. 覆盖率测试工具gcov的前端工具_LCOV

    http://my.oschina.net/alphajay/blog/33725 1.Gcov是进行代码运行的覆盖率统计的工具,它随着gcc的发布一起发布的,它的使用也很简单,需要在编译和链接的时候 ...

  8. Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案

    本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有 ...

  9. javascript把IP地址转为数值几种方案,来挑战一下效率吧

    先看看什么是IP地址: IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节).IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~25 ...

随机推荐

  1. 第n次考试

    题目: 1.堆方块  [题目描述] 给定N个方块,排成一行,将它们编号1到N. 再给出P个操作: M i j表示将i所在的那一堆移到j所在那一堆的顶上. C i表示一个询问,询问i下面有多少个方块. ...

  2. 模拟QQ分组(具有伸缩功能) (添加开源框架的光闪烁效果)SimpleExpandableListAdapter 适配器的用法,并且可添加组及其组内数据。

    package com.lixu.qqfenzu; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis ...

  3. systemctl centos fedora 用法

    LinuxSystemctl是一个系统管理守护进程.工具和库的集合,用于取代System V.service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器.通过Syste ...

  4. tomcat的简单配置与适用默认的web应用

    指定tomcat端口: server.xml: <Connector port="8080" protocol="HTTP/1.1" connection ...

  5. RF layout check list

    Analog-digital circuit 1. Insure C36 and C33 placed next to each other to avoid open stubs 2. Keep U ...

  6. 26个你不知道的Python技巧

    Python是目前世界上最流行的编程语言之一.因为: 1.它容易学习 2.它用途超广 3.它有非常多的开源支持(大量的模块和库) 不好意思,优达菌又啰嗦了. 本文作者 Peter Gleeson 是一 ...

  7. SQL SERVER 压缩数据库日志文件

    ALTER DATABASE DBNAME SET RECOVERY SIMPLE --设置为简单恢复模式 GO DBCC SHRINKFILE (DBNAME_log, 1) GO ALTER DA ...

  8. ubuntu16安装mysql图形界面

    之前在windows用sqlyog当做图形界面连接mysql,现在在ubuntu上需要连接测试环境的数据库,需要安装mysql图形界面.安装只需要条命令: sudo apt-get update su ...

  9. 微信小程序代码片段

    微信小程序代码片段是一种可分享的小项目,可用于分享小程序和小游戏的开发经验.展示组件和 API 的使用.复现开发问题等等.分享代码片段会得到一个链接,所有拥有此分享链接的人可以在工具中导入此代码片段. ...

  10. 批量分割视频opencv

    前言 视频处理过程中,会用到对等长的视频进行处理,此时要对大视频进行分割. 实现步骤 1.批量读取视频集: 2.视频分割: 测试代码 1.批量读取视频集: /********************* ...