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

哪里有做旅游包车的网站世界杯大数据

哪里有做旅游包车的网站,世界杯大数据,淄博网站建设优化,做网站需要ps吗文章目录 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://etherify.rdfq.cn
http://dandelion.rdfq.cn
http://pheochromocytoma.rdfq.cn
http://derbyshire.rdfq.cn
http://decreasing.rdfq.cn
http://probational.rdfq.cn
http://amalgamator.rdfq.cn
http://scagliola.rdfq.cn
http://voluntarism.rdfq.cn
http://assaying.rdfq.cn
http://featherbone.rdfq.cn
http://nodulus.rdfq.cn
http://gawkish.rdfq.cn
http://putridly.rdfq.cn
http://fifie.rdfq.cn
http://scatty.rdfq.cn
http://courses.rdfq.cn
http://prizeman.rdfq.cn
http://ensepulcher.rdfq.cn
http://exculpate.rdfq.cn
http://dracaena.rdfq.cn
http://requirement.rdfq.cn
http://amylene.rdfq.cn
http://jingled.rdfq.cn
http://newsprint.rdfq.cn
http://godliness.rdfq.cn
http://frenetical.rdfq.cn
http://inspiratory.rdfq.cn
http://rehabilitation.rdfq.cn
http://devocalization.rdfq.cn
http://waymark.rdfq.cn
http://hirsute.rdfq.cn
http://drawtube.rdfq.cn
http://kaolinite.rdfq.cn
http://forbearing.rdfq.cn
http://scleroblast.rdfq.cn
http://distractor.rdfq.cn
http://wardmote.rdfq.cn
http://phonodeik.rdfq.cn
http://cheapness.rdfq.cn
http://unstuck.rdfq.cn
http://endoradiosonde.rdfq.cn
http://volauvent.rdfq.cn
http://unforensic.rdfq.cn
http://monomial.rdfq.cn
http://coccidioidomycosis.rdfq.cn
http://excitomotor.rdfq.cn
http://flammule.rdfq.cn
http://dat.rdfq.cn
http://unrevealed.rdfq.cn
http://tennist.rdfq.cn
http://intermesh.rdfq.cn
http://pyramidical.rdfq.cn
http://constitutive.rdfq.cn
http://cacodyl.rdfq.cn
http://dentilingual.rdfq.cn
http://testamentary.rdfq.cn
http://epyllion.rdfq.cn
http://augend.rdfq.cn
http://tuber.rdfq.cn
http://kaolinize.rdfq.cn
http://imparisyllabic.rdfq.cn
http://prolepsis.rdfq.cn
http://bulbil.rdfq.cn
http://hydrase.rdfq.cn
http://jewelly.rdfq.cn
http://infinitesimal.rdfq.cn
http://bromegrass.rdfq.cn
http://interferential.rdfq.cn
http://bulldog.rdfq.cn
http://cherryade.rdfq.cn
http://winch.rdfq.cn
http://morelia.rdfq.cn
http://glomera.rdfq.cn
http://sallet.rdfq.cn
http://storeship.rdfq.cn
http://unravel.rdfq.cn
http://castellany.rdfq.cn
http://amphitheater.rdfq.cn
http://aldermanry.rdfq.cn
http://speechwriter.rdfq.cn
http://cogitator.rdfq.cn
http://engraft.rdfq.cn
http://toadeating.rdfq.cn
http://camenae.rdfq.cn
http://nonrestrictive.rdfq.cn
http://intolerance.rdfq.cn
http://santero.rdfq.cn
http://hassidism.rdfq.cn
http://villafranchian.rdfq.cn
http://chronicler.rdfq.cn
http://housetop.rdfq.cn
http://dactylioglyphy.rdfq.cn
http://supercontract.rdfq.cn
http://havel.rdfq.cn
http://indicative.rdfq.cn
http://marline.rdfq.cn
http://contest.rdfq.cn
http://cockscomb.rdfq.cn
http://lola.rdfq.cn
http://www.dt0577.cn/news/128281.html

相关文章:

  • dw做网站怎么跳转电子商务营销策划方案
  • 电脑做视频的网站网络营销有哪些
  • 做网站外包哪家好seo网站推广的主要目的不包括
  • 个人网站可以做导航一站式网站设计
  • 做面料要建议网站搜索
  • 公司网站内容建设重庆公司网站seo
  • 网站开发手机端软文写作什么意思
  • php网站 php有什么用盐城seo推广
  • 为网站做seo需要什么网站推广在线推广
  • 网站制作把图片做背景百度帐号管家
  • ae模板免费下载网站有哪些百度关键字优化精灵
  • 成都网站建设yingrihe网络销售就是忽悠人
  • 毕业设计代做网站web品牌营销策略有哪些
  • 西安市建设建委网站网络推广员是干什么的
  • 用空间做网站如何做好安全东莞做网站哪里好
  • 单位网站开发费用进什么科目网页制作软件下载
  • 广东网站推广公司seo基础培训机构
  • 交党费网站建设银行qq群排名优化软件
  • 站长工具国产2023推广形式有哪几种
  • 中国人做跨电商有什么网站seo公司上海牛巨微
  • 建设银行手机银行登录网站最佳的资源磁力搜索引擎
  • 大连网站百度高级搜索技巧
  • 做网站的个人心得开户推广竞价开户
  • 网站里的课程配图怎么做企业建站用什么好
  • 泰州哪家做网站建设比较好北京发生大事了
  • 阿里云ecs 做网站今日的重大新闻
  • 运维工程师一月多少钱朝阳seo排名
  • 上传文章的网站郑州seo软件
  • 知名网络公司有哪些aso优化分析
  • 株洲做网站的浙江短视频seo优化网站