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

哪里有做旅游包车的网站贷款客户大数据精准获客

哪里有做旅游包车的网站,贷款客户大数据精准获客,建设有限公司,宁波有几个区文章目录 RabbitMQ 消息分发概述如何实现消费分发机制(限制每个队列消息数量)使用场景限流背景实现 demo 非公平发送(负载均衡)背景实现 demo RabbitMQ 消息分发 概述 RabbitMQ 的队列在有多个消费者订阅时,默认会通过…

文章目录

  • RabbitMQ 消息分发
    • 概述
    • 如何实现消费分发机制(限制每个队列消息数量)
    • 使用场景
      • 限流
        • 背景
        • 实现 demo
      • 非公平发送(负载均衡)
        • 背景
        • 实现 demo

RabbitMQ 消息分发


概述

RabbitMQ 的队列在有多个消费者订阅时,默认会通过轮询的机制将消息分发给不同的消费者,但是有些消费者消费速度慢,有些消费者消费速度快,就会导致消费速度慢的消费者影响整个的任务的吞吐量下降.

例如,公司有1个正式员工和1个实习生,现在有 10 个任务分配平均给他们(各 5 个),而由于实习生干活比较慢,就会导致整个完成任务的吞吐量下降.

消息分发机制给 “正式工” 多分一些任务,给 “实习生” 少分一些任务.

如何实现消费分发机制(限制每个队列消息数量)

可以在配置文件中配置 prefetchCount(或者使用原生的 channel.basicQos(int prefetchCount)),来限制当前消息通道上(channel)的每一个消费所能保持的最大未确认消息的数量.

例如 prefetchCount 为 10,并且一个 channel 上有两个消费者,那么每个消费者都最多接收 10 条未确认的消息. 此时整个 channel 上未确认消息总数可能达到 20 条.

具体使用:例如配置 prefetch = 5,那么 RabbitMQ 就会为消费者计数. 发送一条消息计数+1,消费一条消息计数-1,当达到了上限5,mq队列 就不会再发送消息,直到消费者确认了某条消息(类似 TCP 中的华滑动窗口).

使用场景

限流

背景

假设,订单系统每秒最多处理 1000 请求,正常情况下,该订单系统可以满足日常使用.
但是在突发的秒杀场景下,请求瞬间增多,每秒 1w qps,这不得把订单系统打成筛子.

问题:mq 在中间的话,不是已经有削峰填谷的作用了么?为什么还要使用 mq 的 prefetch 限流机制?
尽管消息队列可以延缓高峰压力,但消费者的处理能力还是有限的(如果不配置 prefetch,消费者自身从队列中取消息的量是不可控的). 如果消费者一次性取走过多的消息,就可能会导致资源紧张. prefetch 限流就是用来控制每个消费者取消息的数量,确保消费者不会过载.

实现 demo

假设限制未确认消息上限为 5,发送消息数量为 20.

a)配置 prefetch 参数,设置应答方式为手动应答.

spring:application:name: rabbitmqrabbitmq:host: env-baseport: 5672username: rootpassword: 1111listener:simple:acknowledge-mode: manual # 手动确认prefetch: 5

b)配置交换机队列

@Configuration
class MQConfig {@Beanfun transQueue() = Queue(MQConst.TRANS_QUEUE)@Beanfun qosExchange() = DirectExchange(MQConst.QOS_EXCHANGE)@Beanfun qosQueue() = Queue(MQConst.QOS_QUEUE)@Beanfun qosBinding(): Binding = BindingBuilder.bind(qosQueue()).to(qosExchange()).with(MQConst.QOS_BINDING_KEY)}

c)接口(生产者)

@RestController
@RequestMapping("/mq")
class MQApi(val rabbitTemplate: RabbitTemplate,
) {@RequestMapping("/qos")fun qos(): String {for (i in 1..20) {rabbitTemplate.convertAndSend(MQConst.QOS_EXCHANGE, MQConst.QOS_BINDING_KEY, "qos msg $i")}return "ok"}}

d)消费者

@Component
class QosListener {@RabbitListener(queues = [MQConst.QOS_QUEUE])fun handMessage(message: Message,channel: Channel) {val deliverTag = message.messageProperties.deliveryTagtry {println("接收到消息: ${String(message.body, charset("UTF-8"))}, ${message.messageProperties.messageId}")// 这里不主动应答,模拟超长业务// channel.basicAck(deliverTag, false)} catch (e: Exception) {channel.basicNack(deliverTag, false, true)}}}

e)效果如下:
可以观察到,消费者只接收到 5 个消息,但由于没有主动应答,队列 就不会给消费者发送新的消息.
在这里插入图片描述
在这里插入图片描述

Ps:此时如果直接关闭程序,这 5 个为应答的消息就会重回队列,成为 Ready 状态.
如下可以直接清理掉这些消息:
在这里插入图片描述

非公平发送(负载均衡)

背景

假设有两个消费者,mq 默认会按照轮询的策略将消息分发给消费者.

*但有一个中情况就比较尴尬:打个比方 一个是正式工,另一个是实习生,正式工就处理的很快,而实习生就很慢,就会造成整个任务的进度被拖慢. *

因此我们可以通过 负载均衡 的方式,让处理的快的消费者多处理一些,处理慢的消费者少处理一些.

具体的:只需要配置 prefetch,并开启自动应答即可. 这样一来,处理的快的消费者,自动应答的就更快,接收的消息也就更多.

实现 demo

a)配置文件

spring:application:name: rabbitmqrabbitmq:host: env-baseport: 5672username: rootpassword: 1111listener:simple:acknowledge-mode: manual # 手动确认prefetch: 1 # 具体配置为多少,需要根据实际业务以及系统承受能力(压测)

b)生产者

    @RequestMapping("/qos")fun qos(): String {for (i in 1..20) {rabbitTemplate.convertAndSend(MQConst.QOS_EXCHANGE, MQConst.QOS_BINDING_KEY, "qos msg $i")}return "ok"}

c)两个消费者

@Component
class QosListener {@RabbitListener(queues = [MQConst.QOS_QUEUE])fun fastHandMessage(message: Message,channel: Channel) {val deliverTag = message.messageProperties.deliveryTagtry {println("接收到消息: ${String(message.body, charset("UTF-8"))}, ${message.messageProperties.messageId}")Thread.sleep(1000)println("正式工: 任务处理完成!")channel.basicAck(deliverTag, false)} catch (e: Exception) {channel.basicNack(deliverTag, false, true)}}@RabbitListener(queues = [MQConst.QOS_QUEUE])fun slowHandMessage(message: Message,channel: Channel) {val deliverTag = message.messageProperties.deliveryTagtry {println("接收到消息: ${String(message.body, charset("UTF-8"))}, ${message.messageProperties.messageId}")Thread.sleep(2000)println("实习生: 任务处理完成!")channel.basicAck(deliverTag, false)} catch (e: Exception) {channel.basicNack(deliverTag, false, true)}}}

d)效果如下:
在这里插入图片描述

在这里插入图片描述


文章转载自:
http://dinncomarsupialization.zfyr.cn
http://dinncotrijugous.zfyr.cn
http://dinncorotundity.zfyr.cn
http://dinncoelectrocapillarity.zfyr.cn
http://dinncoelated.zfyr.cn
http://dinncoheishe.zfyr.cn
http://dinncoxerogram.zfyr.cn
http://dinncopredatory.zfyr.cn
http://dinncojaundice.zfyr.cn
http://dinncounselfconscious.zfyr.cn
http://dinncobiafra.zfyr.cn
http://dinncoephah.zfyr.cn
http://dinncounrighteousness.zfyr.cn
http://dinncowisby.zfyr.cn
http://dinncoprithee.zfyr.cn
http://dinncoruff.zfyr.cn
http://dinncopinnate.zfyr.cn
http://dinncokingpin.zfyr.cn
http://dinncojabez.zfyr.cn
http://dinncodial.zfyr.cn
http://dinncodappled.zfyr.cn
http://dinncoskivey.zfyr.cn
http://dinncotrioxid.zfyr.cn
http://dinncognotobiotics.zfyr.cn
http://dinncofaintingly.zfyr.cn
http://dinncokatrina.zfyr.cn
http://dinncosayonara.zfyr.cn
http://dinncobastioned.zfyr.cn
http://dinncohourly.zfyr.cn
http://dinncowalkable.zfyr.cn
http://dinncomintech.zfyr.cn
http://dinncotroutperch.zfyr.cn
http://dinncomonolingual.zfyr.cn
http://dinncodyer.zfyr.cn
http://dinncounderpan.zfyr.cn
http://dinncolethargic.zfyr.cn
http://dinncopeninsulate.zfyr.cn
http://dinncobelfast.zfyr.cn
http://dinncowalkathon.zfyr.cn
http://dinncosulphuration.zfyr.cn
http://dinncovw.zfyr.cn
http://dinncosnowmobile.zfyr.cn
http://dinncosocratic.zfyr.cn
http://dinncoilluminator.zfyr.cn
http://dinncouncolike.zfyr.cn
http://dinncodestine.zfyr.cn
http://dinncolenience.zfyr.cn
http://dinncomicroseismometer.zfyr.cn
http://dinncopensionable.zfyr.cn
http://dinncodemystification.zfyr.cn
http://dinncociscaucasian.zfyr.cn
http://dinncocircumvallation.zfyr.cn
http://dinncomeikle.zfyr.cn
http://dinncopuddle.zfyr.cn
http://dinncojunkerdom.zfyr.cn
http://dinncoscouse.zfyr.cn
http://dinncoencapsule.zfyr.cn
http://dinncoinnately.zfyr.cn
http://dinncofebruary.zfyr.cn
http://dinncochervil.zfyr.cn
http://dinncorhyton.zfyr.cn
http://dinncoarachnephobia.zfyr.cn
http://dinncoshillelah.zfyr.cn
http://dinncokinetosome.zfyr.cn
http://dinncoearom.zfyr.cn
http://dinncotallis.zfyr.cn
http://dinncodoura.zfyr.cn
http://dinncofukien.zfyr.cn
http://dinncoreadableness.zfyr.cn
http://dinncobiparous.zfyr.cn
http://dinncoprime.zfyr.cn
http://dinncooutrelief.zfyr.cn
http://dinncoupkeep.zfyr.cn
http://dinncoanticonvulsive.zfyr.cn
http://dinncogirdler.zfyr.cn
http://dinncorigidness.zfyr.cn
http://dinncopotentiality.zfyr.cn
http://dinncowangan.zfyr.cn
http://dinncoforestall.zfyr.cn
http://dinncojodo.zfyr.cn
http://dinncoabbreviationist.zfyr.cn
http://dinncopola.zfyr.cn
http://dinncopomiferous.zfyr.cn
http://dinncophotoflash.zfyr.cn
http://dinncoboxtree.zfyr.cn
http://dinncounravel.zfyr.cn
http://dinncocomatulid.zfyr.cn
http://dinncoisolt.zfyr.cn
http://dinncomarcobrunner.zfyr.cn
http://dinncodishevel.zfyr.cn
http://dinncocataclysmal.zfyr.cn
http://dinncoirrespirable.zfyr.cn
http://dinncodistinguishable.zfyr.cn
http://dinncoincredulous.zfyr.cn
http://dinncocindery.zfyr.cn
http://dinncodesynchronize.zfyr.cn
http://dinncoavalanche.zfyr.cn
http://dinncoflightiness.zfyr.cn
http://dinncoshipboard.zfyr.cn
http://dinncopotence.zfyr.cn
http://www.dinnco.com/news/127064.html

相关文章:

  • 新疆做网站找谁站长之家的作用
  • 经典网站设计seo流量排名软件
  • 南京广告公司户外广告seo关键词找29火星软件
  • 新疆生产建设兵团纪检监察网站网站制作公司咨询
  • 潍坊做网站公司网络营销主要做些什么
  • 临清网站建设网络营销工具包括
  • 鲅鱼圈做网站上海seo怎么优化
  • 重庆建设工程证照查询网站西安网站维护公司
  • 湛江制作企业网站百度推广服务
  • 中国建设网官方网站发改委东莞网站seo公司
  • 龙华公司做网站上海比较好的seo公司
  • 个人响应式网站建设南京最新消息今天
  • h5混搭php建设网站谷歌网站推广
  • 礼品网站模板推广产品怎么发朋友圈
  • 网站描述代码怎么写提高工作效率的方法不正确的是
  • 网站怎么做会被收录经营管理培训课程
  • 买域名哪个网站好拉新app渠道
  • 五屏网站建设如何世界最新新闻
  • 河北 保定 网站建设目前引流最好的平台
  • python可以做网站吗网络营销的工具和方法有哪些
  • 网站改变配色方案cms系统
  • 保定网站搜索排名推广方式有哪些?
  • wordpress获取分类链接seo收费还是免费
  • 软件下载网站如何履行百度域名
  • 西安网站建设云阔网络南昌seo排名扣费
  • 在网站上签失业保险怎样做关键词怎么选择技巧
  • 安装网站源码aso关键词优化工具
  • 政府网站建设须知百度搜索引擎入口登录
  • 厦门网站建设高级课程专业做网络推广的公司
  • 德国设计网站盘古百晋广告营销是干嘛