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

系统设计 --- 多节点中按顺序处理消息

系统设计 --- 多节点按顺序处理消息

  • 背景
  • 解决方案1 --- 手动设置routing key
  • 解决方案2 --- Consistent Hashing Exchange
  • 方案对比

背景

  • 有两个service A 和 B, 各有20个实例同时运行.
  • A会接收外部Object发来的消息,经过处理之后发给B.
  • A 和 B 之间使用消息队列进行通信,并满足以下条件
  • 同一个Object发的消息需要被顺序(串行)处理.
  • 反例:假设A处理了Object 1 的两条消息 Msg 1 和 Msg 2,并发给消息队列. 此时假设 service B有两个节点处于空闲状态,则Msg1 和 Msg 2 会被B的两个节点同时处理.

在这里插入图片描述

解决方案1 — 手动设置routing key

同一个Object的消息永远被同一个节点处理

  • 对 service A和B的20个实例从0到19进行标注 (使用K8s中的stateful set可以实现对每个实例进行编号)
  • 根据节点的标注号码构建消息队列的bindign key 和 routing key
  • service A的三号节点发送消息的routing key: Task.3
  • service B的三号节点的binding key: Task.3
  • 根据Object Id做hash,结果映射到 0 - 19,并根据hash作为routing key发送消息
  • 假设A处理了Object 1 的两条消息 Msg 1 和 Msg 2,根据hash结果创建routing key并发给消息队列. 此时假设 service B有多个节点处于空闲状态,Msg 1 和 Msg 2都会被同一个service B的实例顺序处理.

在这里插入图片描述

解决方案2 — Consistent Hashing Exchange

  • Consistent Hashing Exchange是RabbitMQ中一种特殊的交换器类型,通过一致性哈希算法实现消息的负载均衡,可显著降低节点增减时的数据迁移量

方案对比

在这里插入图片描述

http://www.dtcms.com/a/589186.html

相关文章:

  • 深圳高端企业官方网站建设海创网站建设
  • 【C#】何时用ref?
  • STM32中ADC + DMA自动采集系统
  • 读书之《架构师的自我修炼》_个人笔记
  • 什么网站可以快速做3d效果图php网站维护
  • 迅速提高网站排名帮别人做网站收多少钱合适
  • 怎么做网站上的模拟动画做网站四百全包
  • 利用短整数类型和部分字符串优化DuckDB利用数组求解数独SQL
  • 营销型网站四大功能模版网站有源代码吗
  • 力扣81. 搜索旋转排序数组 II
  • WampServer安装教程(图文步骤)+ 下载+配置+解决图标红橙绿问题【附安装包】
  • 使用 dash 构建 mvvm 整洁架构应用
  • 跨时钟域处理
  • 2025制品管理工具选型,jfrog vs nexus vs hadess哪一款更好用?
  • 北京校园网站建设wordpress新建页面是
  • 【1.7】基于FPGA的costas环开发1——发射端信号产生模块
  • Postman 工具实现签名校验:完整操作指南与代码解析
  • AQS介绍
  • reshape的共享内存
  • 数据结构之,栈与队列
  • 【数据结构】基于哈夫曼树的数据压缩算法
  • SQLAlchemy2.0使用
  • 利用binlog2sql数据闪回实战
  • 东莞网站建设曼哈顿信科网站建设的总体设计概图
  • 算法:矩形区域不超过k的数值和
  • 算法30.0
  • 算法基础篇:(四)基础算法之前缀和
  • Nginx优化与防盗链
  • Vue-vuex 核心概念和 API
  • 分治归并算法第一弹