精华内容
下载资源
问答
  • RabbitMQ优化

    2015-01-29 10:53:25
    提升RabbitMQ单队列QPS的简单方案,文档分别去不同的集群进行了测试与优化
  • rabbitmq优化结论

    千次阅读 2016-08-24 06:16:53
    1、 消费者线程数为两个时接收速度最快(此处建议一般的业务逻辑设置两个消费者线程),如果处理比较复杂的逻辑或数据,建议多开启消费者线程数 ...10、开发者可根据上述测试结果结合实际业务来优化使用。
    • 1、 消费者线程数为两个时接收速度最快(此处建议一般的业务逻辑设置两个消费者线程),如果处理比较复杂的逻辑或数据,建议多开启消费者线程数
    • 2、 生产者线程数为二到三个时,发送速度最快,超过这个数后也不能提高发送速度
    • 3、 因生产者发送的速度比消费者块,因此建议可增加消费者线程数提高效率,个人建议为:消费者=生产者*1.5
    • 4、 消息大小对发/收速度影响较大,开启ACK和持久化后1K以上的消息单对单QPS不大与3000
    • 5、 ACK和持久化会大幅降低QPS
    • 6、 服务器可靠性:大量消息收发测试下(百万级别以上),无消息丢失情况发生
    • 7、 生产者和消费者刚开始工作时速度最快,且速度不稳定,工作一段时间后速度趋近与平稳
    • 8、 整个测试过程中服务器系统资源占用稳定,目前暂无服务器瓶颈
    • 9、 对于较大的数据(0.5K以上的),不建议使用一个消费者线程接收(速度比较慢),目前测试下来的结果来看,任何消息,设置两个生产者和三个消费者时性能最佳。
    • 10、开发者可根据上述测试结果结合实际业务来优化使用。
    展开全文
  • 最开始的RabbitMQ架构是主备模式,支持的并发和数据量不高。现决定部署一套采用镜像模式的集群架构,提升并发性能,但怎么从旧架构平滑切换到新架构成了首要问题。 2. 平滑切换方案 2.1 额外加载新增MQ配置 服务A...

    架构调整

    1. 背景

    最开始的RabbitMQ架构是主备模式,支持的并发和数据量不高。现决定部署一套采用镜像模式的集群架构,提升并发性能,但怎么从旧架构平滑切换到新架构成了首要问题。

    2. 平滑切换方案

    在这里插入图片描述

    2.1 额外加载新增MQ配置

    服务A原本加载的是mq主备配置,为了平滑过渡,额外加载mq镜像配置,这两份配置的区别就只是ip、端口、vhost、账号、密码不同,其他譬如交换器、队列的配置都相同。

    2.2 分批次平滑切换队列

    按队列的重要级别梳理出若干批队列,第一次先切换优先级低的队列到MQ镜像集群,观察数据流入情况。待稳定后,再切换下一批,直至所有队列都切换到MQ镜像集群。

    2.3 遇到的坑

    之前MQ主备上有些队列未开启持久化,但MQ镜像这边是需要为所有队列配置持久化的,当开启自动生成队列信息且项目启动的时候,MQ镜像这边会生成与MQ主备相同的队列,也就是未开启持久化的队列。

    <!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成 -->
    <rabbit:admin connection-factory="connectionFactory"/>
    

    原因推测该管理类是单例,共用同一份数据。所以当加载多份MQ配置文件时,记得配置去掉自动生成的标签,手动到RabbitMQ的配置中心创建交换器、队列信息。

    展开全文
  • 参数调优 1. 调优生产者客户端参数 默认消息就是持久化的,如果对应的队列和交换机都没有配置持久化,一旦mq重启,没有配置持久化的队列和交换机将会消失,里面的消息也会消失 durable参数 ...

    参数调优

    1. 调优生产者客户端参数

    默认消息就是持久化的,如果对应的队列和交换机都没有配置持久化,一旦mq重启,没有配置持久化的队列和交换机将会消失,里面的消息也会消失

    1. durable参数

      在rabbit:queue中,durable=“true” 开启持久化。

      在rabbit:direct-exchange中,durable=“true” 开启持久化。

    2. 调优消费者客户端参数

    1. prefetch参数

      在rabbit:listener-container中,一次性预取xx条消息到内存进行消费,能有效减小网络开销,官方推荐100 — 300,这将使消费者在大多数常见场景中保持忙碌,从而提高吞吐量。

      并发流量高的队列建议设置为:100 - 300

      并发流量低的队列建议设置为:1

    2. concurrency和max-concurrency参数

      在rabbit:listener-container中,消费端的监听个数,即@RabbitListener开启几个线程去处理数据。其中需要注意的是,该项目所有concurrency值的和,不能大于2048,不然会报channel异常,max-concurrency同理。

      并发流量高的队列建议设置为:30 -200

      并发流量低的队列建议设置为:2 - 4

    3. acknowledge参数

      在rabbit:listener-container中,消息确认机制,有自动确认、手动确认、不确认3种,不同模式的选择会影响消息性能

      可承受少量消息丢失,可以设为自动确认

      如果为了防止数据丢失,可以设置为手动确认

    4. 消息确认机制中basicAck的multiple参数

      在消费者代码中,是否进行批量确认。通过批量Ack的方式,可以减少了很多Ack传输的时间。注意与prefetch搭配使用

    5. task-executor线程池

      使用concurrency参数,但没配置task-executor,则由Spring按需自动new线程了,但是线程的创建和销毁会耗时和耗资源,这时我们可以引入线程池避免这部分损耗。

      • concurrency的线程,是包含在task-executor内部的.而且是会一直使用的,并不会释放的

      • pool-size >= concurrency(所有配置了concurrency的总和 <= 使用同一个executor线程池大小),这只是最低限度

      • 使用concurrency,要计算一下,所有使用该executor的配置估计下至少要使用多少条线程。最好使用弹性的线程池(pool-size=“3-5”)这种配置,不过这样子的话,就一定要配置execuotr的queue-capacity

        <task:executor id="myExecutor" pool-size="30-210" queue-capacity="100" rejection-policy="CALLER_RUNS"/>
        

        其中queue-capacity是线程池队列,超过core-size会放到队列里,队列满后会继续创建线程直至max-size,最后走拒绝策略

        拒绝策略为CALLER_RUNS,将由调用者来执行.(即listener监听的那条线程来执行)。可以保证所有数据都会被正确消费

    展开全文
  • 消息阻塞解决方案 1. 问题分析 1.1 不合理配置参数 max-concurrency配置过多,超过了2048默认最大channel限制 高流量队列设置prefetch=1 MQ本身没有设置更大的channel限制 多个队列共用一个connection ...

    消息阻塞解决方案

    1. 问题分析

    1.1 不合理配置参数

    1. max-concurrency配置过多,超过了2048默认最大channel限制
    2. 高流量队列设置prefetch=1
    3. MQ本身没有设置更大的channel限制
    4. 多个队列共用一个connection

    1.2 消费者中嵌入太多业务

    很多业务的处理都冗余在该消费者中

    1.3 业务中存在太多数据库、缓存操作

    消费者中存在很多数据库操作和缓存操作,毫秒级的网络开销越积越多,影响消费能力

    1.4 消费者数量太少

    高流量队列应配置对应多的消费者

    1.5 MQ主从架构没法支撑更大并发

    2. 解决思路

    2.1 参数调优

    1. 调优生产者客户端参数
    2. 调优消费者客户端参数
    3. 调优MQ Server参数

    2.2 业务调整

    1. 精简消费业务
    2. 拆分消费业务到细分队列
    3. 业务逐步从MQ主从切换到MQ集群

    2.3 架构调整

    1. 增加消费者
    2. MQ Server主从架构转为MQ server集群架构
    3. 搭建多套MQ集群,不同业务使用对应集群

    3. 第一阶段

    1. 调优生产者客户端参数

    2. 调优消费者客户端参数

    3. 增加消费者

    4. 第二阶段

    1. 精简消费业务

    2. 拆分消费业务到细分队列

    5. 第三阶段

    1. MQ Server主从架构转为MQ server集群架构
    2. 调优MQ Server参数
    3. 业务逐步切换到MQ集群
    4. 搭建多套MQ集群,不同业务使用对应集群
    展开全文
  • 秒杀步骤: ... 2、在秒杀商品表里判断库存是否足够 @Select("select g.*,sg.stock_count,sg.start_date,sg.end_date,sg.seckill_price from seckill_goods sg left join goods g on sg.goods_id=g.id where g.id=#{...
  • 文章目录引言RabbitMQSpring AMQP1 项目改造思路分析2 优化商品微服务——生产者2.1 引入依赖2.2 配置文件2.3 改造GoodsService3 优化搜索微服务——消费者3.1 引入依赖3.2 添加配置3.3 编写监听器——处理消息3.4 ...
  • RabbitMQ性能优化

    2019-07-15 17:25:38
    修改rabbitmq.config文件 rabbitmq.config文件时rabbitmq的配置文件,他遵守Erlang配置文件定义。 rabbitmq.config文件位置: Unix $RABBITMQ_HOME/etc/rabbitmq Windows %APPDATA%\RabbitMQ 例子如下: [ {mnesia, ...
  • RabbitMQ使用以及优化

    千次阅读 2018-04-01 16:13:00
    RabbitMQ使用以及优化 背景说明 项目中需要异步回调客户(具体实现参考rabbitmq死信),客户端收到回调需返回字符串success,否则,会采用梯度回调:分别于0,5,10,30,60分钟后进行回调,5次回调未返回...
  • RabbitMq性能优化的几项方案

    千次阅读 2018-10-08 17:56:18
    一般情况下,RabbitMq服务器能够接受的每秒写入量为20K-50K(8G内存),因此在带宽在不足200M的时候,加大带宽会产生很明显的提升作用,再往上效果就可能不那么明显了。   2、加大内存  RabbitMq的机制是先...
  • 前言 邮件模块的功能:当 hr 向系统中录入一个员工时,录入成功后,系统会自动向消息中间件 RabbitMQ 发送一条消息,这条消息包含了新...rabbitmq优化(简说) (1)数据库建立邮件发送日志表 public class MailSendL
  • 最近项目上线,一直在压测,由于项目中使用了rabbitmq中间件,所以在压测的时候需要额外关注tps的变化,所以,这里就讲讲关于mq的并发优化问题 1 首先是链接模式的区分,这里的链接模式我们默认选用的是channel,...
  • (Rabbitmq webstomp优化过程) [{rabbitmq_web_stomp, [ {tcp_config,[ {backlog,2000}, {max_connections,2000} ]} ]]

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,482
精华内容 10,192
关键字:

rabbitmq优化