当前位置: 首页 > news >正文

课程网站建设规划/百度站点

课程网站建设规划,百度站点,不知此网站枉做男人,邯郸旅游文章目录 1.前言2.解决2.1消费监听方法中关闭channel2.2 配置设置两个参数 3.总结 1.前言 由于之前写了一个好用的rabbitmq-spring-boot-start启动器,后面在生产实践之后反馈消费者连接的Channel数量过多,一个消费者的Channel数量可以达到好几百&#xf…

文章目录

  • 1.前言
  • 2.解决
    • 2.1消费监听方法中关闭channel
    • 2.2 配置设置两个参数
  • 3.总结

1.前言

    由于之前写了一个好用的rabbitmq-spring-boot-start启动器,后面在生产实践之后反馈消费者连接的Channel数量过多,一个消费者的Channel数量可以达到好几百,最多的要干到900多个了,于是乎我就去看了下之前我写的组件的源码,然后去查了下CacheMode的两种模式及相关的参数设置,最终找到了这个是由于一下参数没有设置导致的:

    RabbitProperties类中的静态内部类Channel中的size和checkoutTimeout没有设置

public static class Channel {/*** Number of channels to retain in the cache. When "check-timeout" > 0, max* channels per connection.*/private Integer size;/*** Duration to wait to obtain a channel if the cache size has been reached. If* 0, always create a new channel.*/private Duration checkoutTimeout;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
}

    size的注释中文意思:缓存中要保留的通道数。当“检查超时”>0时,每个连接的通道数最大值

    checkoutTimeout的注释的中文:如果已达到缓存大小,则等待多长时间获取通道。如果为0,始终创建新信道,如果超时未获取到信道,则消费端可能会报错。

    简单介绍一下CacheMode的两种模式,RabbitProperties类中的静态内部类Connection

public static class Connection {/*** Connection factory cache mode.*/private CacheMode mode = CacheMode.CHANNEL;/*** Number of connections to cache. Only applies when mode is CONNECTION.*/private Integer size;}

CacheMode枚举

public enum CacheMode {/*** Cache channels - single connection.*/CHANNEL,/*** Cache connections and channels within each connection.*/CONNECTION}

    spring-rabbit提供了一个默认的缓存连接工厂:CachingConnectionFactory,而它有两种连接的模式:

    CHANNEL:单例连接,不缓存Channel信道,这里使用单列的避免了连接的创建和销毁,是一种池化技术,很好的复用已经存在的连接。

    CONNECTION:多连接,会缓存对应的Channel信道,当使用这种模式可以提高吞吐量,但是需要设置好对应Connection的size,这个siz只对CONNECTION默认是下设置有用,目的是为了防止连接爆炸

    默认使用的CHANNEL模式,所以就会有这个问题,如果使用spingBoot官网那个估计也会有这个问题的,这个问题就相当于一条消息一个channel信道,回不干扰,相互隔离。

2.解决

2.1消费监听方法中关闭channel

    这种方式在消费者监听方法的try/catch/finally中释放channel资源,但是这种方式不推荐,资源反复创建之后又被关闭清理,这种处理上没有起到复用的效果,简单粗暴。

if (Objects.nonNull(channel)) {channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);try {channel.close();} catch (Exception e) {log.error("消费者监听关闭channel异常:{}", e.getStackTrace());}
}

2.2 配置设置两个参数

zlf:rabbit:rps:## 如果virtual-host不同,在配置一个即可,addresses不同也是可以在配置,eqps的下标以之对应上即可- rabbitmq:virtual-host: xxxxxaddresses: xxxxx,xxxxxxx,xxxxx,xxxx #这里可以配置多个,集群情况下可以逗号分割,配置多个ipport: 5672username: "xxx"password: "xxx"cache:channel: size: 10checkout-timeout: 10000

    需要配置cache.channel的size和checkout-timeout,size配置为10个,一个消费者最多有有10channel信道,但是checkout-timeout参数也要配置,checkout-timeout的值需要大于零,这个参数的值设置为10s是由于SpringAMQP的默认超时时间是10s,所以这个值参考了SpringAMQP的默认超时时间来设置,如果高峰期请求并发高,就有可能需要配置缩短这个超时时间的值,让其可以更快的获取到channel信道。

3.总结

    rabbitmq-spring-boot-start启动器的配置是将spirngBoot的那个启动器的配置RabbitProperties包了一层,rabbitmq-spring-boot-start启动器兼容spirngBoot的那个启动器的配置RabbitProperties的配置,可以支持操作多个rabbmitMq、多个虚拟机和多个队列的多对多的关系,只需简单的配置,就可以实现发送各种类型的消息,简化了代码量,业务上也只需要写简单的监听的代码就可以了,可以说是非常的丝滑,只用去关注处理业务即可,本次分享到此结束,希望我的分享对你有所启发和帮助,请一键三连,么么么哒!

http://www.whsansanxincailiao.cn/news/31980990.html

相关文章:

  • 淘宝做标题网站/苏州seo关键词优化方法
  • 网站建设规划案例/优化网站标题
  • wordpress启用多站点和子站独立域名绑定后设置/网络营销策划的主要特点
  • 网站设计的书/开个网站平台要多少钱
  • 动画做a视频在线观看网站/网络营销的内容主要有哪些
  • 做口腔科网站/小学生摘抄新闻2024
  • 北京旅游网站建设/上海网络推广服务公司
  • 个人网站的设计与实现/谷歌官网登录入口
  • wordpress内存缓存无插件/小红书seo排名
  • 湛江网站设计公司地址/外贸seo建站
  • 制作网站的方法有哪些/商丘seo推广
  • 建网站报价 优帮云/枫树seo
  • 网站开发建设合同模板/seo教程 seo之家
  • 寿光网站制作/西安网站关键词推广
  • 做阿里巴巴还是做网站好/百度一下官网首页百度一下
  • 域名备案网站首页url/黑帽seo技巧
  • 哪个网站专做水果批发/seo常用方法
  • 做网站的图片/建立免费个人网站
  • 左右左布局网站建设/怎么把平台推广出去
  • 营销型网站建设的五力原则包括/seo搜索引擎优化人员
  • 国外设计网站欣赏/seo教程有什么
  • 网页制作第一步/seo建站收费地震
  • 做网站做什么主题/一站式营销推广
  • 做网站有钱/2021十大网络舆情案例
  • 企业网站cms系统/武汉疫情最新情况
  • 上海市住房城乡建设管理委官方网站/个人网站
  • 做百度网站需不需要备案吗/2021小说排行榜百度风云榜
  • 哈尔滨网站制作招聘/最新提升关键词排名软件
  • wordpress全站cdn教程/搜索引擎是软件还是网站
  • 做网站用angular/seo项目分析