前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >不单独部署注册中心,又要具备注册中心的功能,我能上天!

不单独部署注册中心,又要具备注册中心的功能,我能上天!

作者头像
青石路
发布于 2024-07-09 00:13:51
发布于 2024-07-09 00:13:51
9800
代码可运行
举报
文章被收录于专栏:开发技术开发技术
运行总次数:0
代码可运行

说道 任务分发中心 既集成了 Eureka Server,还集成了 Eureka Client,实现了对 任务执行器 的负责均衡,已经很完美的实现了需求

有两个服务:任务分发中心、任务执行器 分发中心负责任务拆分,然后将拆分后的任务下发给执行器,执行器执行任务 任务分发中心和任务执行器都要支持水平扩节点

当我向领导反馈我的实现时,得到了我想要的肯定

但又给我引申了需求,他说

  1. 任务分发中心只调用一个服务:任务执行器,引入 open-feign 感觉没什么必要
  2. Eureka Server 肯定是存储了 任务执行器 的实例,是不是可以不开启 @EnableEurekaClient(言外之意就是任务分发中心不要做 Eureka Client

虽然我心中一万只草泥马奔腾而过,十分不愿意去修改,但理性告诉我他是对的,是可以继续简化(人家能当领导确实是有两把刷子的!)

我们分析下,如果我们拿到了 任务执行器 列表,那么我们就可以根据负载均衡策略选择其中某个实例进行任务分发,所以重点是如何获取 任务执行器 列表

获取服务实例列表

如何获取 任务执行器 列表,大家就不要想着 @EnableEurekaClient 了,因为引申需求的第 2 点就限制了不能用 EurekaClient,那怎么办?

我就不绕圈子了,我们需要用到一个 holderEurekaServerContextHolder,借此我们就能拿到 任务执行器 实例列表,例如:

EurekaServerContextHolder
EurekaServerContextHolder

拿到实例列表后,该做什么了?

是不是负载均衡选择其中某个实例?

负载均衡

拿到实例列表后,我们可以自实现负载均衡策略,但是不推荐,这就跟我为什么不自实现 注册中心 是一个道理,选择现成的、成熟的负载均衡器更具性价比

不是自实现不起,而是现成更具性价比!

这次就不选择 Ribbon 了,因为我们选择的 Spring Cloud 2021.0.8 默认包含的负载均衡器是 spring-cloud-balancer

spring-cloud-loadbalancer
spring-cloud-loadbalancer

服务实例列表已经获取到了,负载均衡器也有了,接下来做什么?

那就是将实例列表注册给负载均衡器,如下所示

ServiceInstanceListSupplier
ServiceInstanceListSupplier

接下来是不是就只差任务分发了?

任务分发

我们要明确,我们的 task-executor 提供的是一个 HTTP 接口,所以我们接下来要考虑的是如何去请求这个接口

至于是请求哪个 task-executor 实例,就交给负载均衡器了

发送 HTTP 请求的方式不要太多,而 SpringRestTemplate 就是其中之一,为了不额外引用第三方 HTTP 工具,也为了适配负载均衡器,推荐就是用 RestTemplate

RestTemplate
RestTemplate

至此,就只差临门一脚了,那就是通过 RestTemplate 进行任务分发

任务分发
任务分发

启动 task-dispatchertask-executor,然后调用接口

http://192.168.2.10:8080/dispatcher/job/dispatch?jobId=689

结果 success,日志输出如下

task-dispatcher

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2024-07-05 22:53:52.606|INFO|http-nio-8080-exec-9|30|com.qsl.task.web.JobController          :收到作业[jobId=689]执行请求
2024-07-05 22:53:52.606|INFO|http-nio-8080-exec-9|31|com.qsl.task.web.JobController          :作业[jobId=689]拆分任务中...
2024-07-05 22:53:52.606|INFO|http-nio-8080-exec-9|33|com.qsl.task.web.JobController          :作业[jobId=689]拆分完成,得到作业列表[[123, 666, 888, 999]]
2024-07-05 22:53:52.611|INFO|http-nio-8080-exec-9|39|com.qsl.task.web.JobController          :任务[123]执行结果:success
2024-07-05 22:53:52.614|INFO|http-nio-8080-exec-9|39|com.qsl.task.web.JobController          :任务[666]执行结果:success
2024-07-05 22:53:52.617|INFO|http-nio-8080-exec-9|39|com.qsl.task.web.JobController          :任务[888]执行结果:success
2024-07-05 22:53:52.619|INFO|http-nio-8080-exec-9|39|com.qsl.task.web.JobController          :任务[999]执行结果:success

task-executor

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2024-07-05 22:53:52.609|INFO|http-nio-8081-exec-3|17|com.qsl.task.web.TaskController         :收到任务[taskId=123]执行请求
2024-07-05 22:53:52.609|INFO|http-nio-8081-exec-3|18|com.qsl.task.web.TaskController         :任务[taskId=123]执行中...
2024-07-05 22:53:52.610|INFO|http-nio-8081-exec-3|19|com.qsl.task.web.TaskController         :任务[taskId=123]执行完成
2024-07-05 22:53:52.612|INFO|http-nio-8081-exec-2|17|com.qsl.task.web.TaskController         :收到任务[taskId=666]执行请求
2024-07-05 22:53:52.613|INFO|http-nio-8081-exec-2|18|com.qsl.task.web.TaskController         :任务[taskId=666]执行中...
2024-07-05 22:53:52.613|INFO|http-nio-8081-exec-2|19|com.qsl.task.web.TaskController         :任务[taskId=666]执行完成
2024-07-05 22:53:52.615|INFO|http-nio-8081-exec-4|17|com.qsl.task.web.TaskController         :收到任务[taskId=888]执行请求
2024-07-05 22:53:52.616|INFO|http-nio-8081-exec-4|18|com.qsl.task.web.TaskController         :任务[taskId=888]执行中...
2024-07-05 22:53:52.616|INFO|http-nio-8081-exec-4|19|com.qsl.task.web.TaskController         :任务[taskId=888]执行完成
2024-07-05 22:53:52.618|INFO|http-nio-8081-exec-1|17|com.qsl.task.web.TaskController         :收到任务[taskId=999]执行请求
2024-07-05 22:53:52.618|INFO|http-nio-8081-exec-1|18|com.qsl.task.web.TaskController         :任务[taskId=999]执行中...
2024-07-05 22:53:52.618|INFO|http-nio-8081-exec-1|19|com.qsl.task.web.TaskController         :任务[taskId=999]执行完成

目前 task-executor 是单实例,我们再启动一个实例,来看看负载均衡效果

task-executor 8081

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2024-07-05 22:59:01.311|INFO|http-nio-8081-exec-6|17|com.qsl.task.web.TaskController         :收到任务[taskId=123]执行请求
2024-07-05 22:59:01.312|INFO|http-nio-8081-exec-6|18|com.qsl.task.web.TaskController         :任务[taskId=123]执行中...
2024-07-05 22:59:01.312|INFO|http-nio-8081-exec-6|19|com.qsl.task.web.TaskController         :任务[taskId=123]执行完成
2024-07-05 22:59:01.391|INFO|http-nio-8081-exec-7|17|com.qsl.task.web.TaskController         :收到任务[taskId=888]执行请求
2024-07-05 22:59:01.391|INFO|http-nio-8081-exec-7|18|com.qsl.task.web.TaskController         :任务[taskId=888]执行中...
2024-07-05 22:59:01.391|INFO|http-nio-8081-exec-7|19|com.qsl.task.web.TaskController         :任务[taskId=888]执行完成

task-executor 8090

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2024-07-05 22:59:01.379|INFO|http-nio-8090-exec-2|17|com.qsl.task.web.TaskController         :收到任务[taskId=666]执行请求
2024-07-05 22:59:01.380|INFO|http-nio-8090-exec-2|18|com.qsl.task.web.TaskController         :任务[taskId=666]执行中...
2024-07-05 22:59:01.380|INFO|http-nio-8090-exec-2|19|com.qsl.task.web.TaskController         :任务[taskId=666]执行完成
2024-07-05 22:59:01.394|INFO|http-nio-8090-exec-1|17|com.qsl.task.web.TaskController         :收到任务[taskId=999]执行请求
2024-07-05 22:59:01.394|INFO|http-nio-8090-exec-1|18|com.qsl.task.web.TaskController         :任务[taskId=999]执行中...
2024-07-05 22:59:01.394|INFO|http-nio-8090-exec-1|19|com.qsl.task.web.TaskController         :任务[taskId=999]执行完成

但有一点需要注意,既然 task-dispatcher 不再作为 Eureka Client, 有个配置最好关闭

fetch-registry
fetch-registry

完整代码:integrate-eureka2

https://gitee.com/youzhibing/qsl-project/tree/master/integrate-eureka2

总结

  1. 有存储功能的容器(如 Eureka ServerSpring)一般都会提供 holder(钩子)来获取容器中的实例
  2. 尽量选同体系内的组件(比如都用 Spring 自带的组件),不会存在兼容性问题
  3. spring-cloud-balancer 目前支持两种负载均衡策略
spring-cloud-balancer 负载均衡策略
spring-cloud-balancer 负载均衡策略

轮询和随机,默认是轮询;如果需要其他的复杂均衡策略,则需要自定义

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
干货丨带你快速认识云通信
产业智变,云启未来 什么是云通信?对于很多普通消费者来说,这个名词或许会有些“云里雾里”。但事实上,随着智能手机的普及以及大数据时代的到来,云通信已经成为了人们日常生活不可分割的一部分,扮演着越来越重要的角色。本期就为大家全面解析云通信,看看你的生活中到底与云通信产生了怎样的交集。 1 什么是云通信 云通信的含义 云通信包含广义和狭义两种概念理解。广义上所有基于互联网云服务的语音与数据通信功能服务都可被称作“云通信”;狭义上则仅指供开发者调用的封装了通信功能的API或SDK,属于PaaS层的服务。
腾讯即时通信IM
2020/06/19
3.3K0
腾讯云2023年新春大促丨CDN&音视频通信优惠购买攻略
会场设有:首购专区、限时组合购专区、企业专区、特惠专区四大亮点模块,多种优惠购买方案满足多样需求,CDN/短信/直播/点播等热销爆品0.01元起,腾讯云呼叫中心89元/月/座席起,基于 QQ 底层 IM 能力开发,IM基础功能包89.9元/月起,IM云端审核体验套餐仅需1元,快速体验文本/图片/音视频审核能力。
腾讯云音视频
2023/03/10
44.4K0
产品双月刊 | 腾讯云音视频TRTC&IM&TPNS(2021年5月-7月)
近期,腾讯云TRTC、IM和TPNS有哪些 重大发布? 他又带给我们了哪些 惊喜 ? 请跟随我们的脚步一起来回顾! 「 即时通信 IM 」 功能1:消息合并转发 适用对象:IM全量用户 主要优势:可基于业务场景,按需求将会话中的聊天记录进行合并转发,为消息的传递提供了便利。 功能2:IM Unity SDK、 IM Flutter SDK上线 适用对象:有跨平台开发需求的客户 主要优势: 对于用户来说,Flutter 可以使应用界面变得美丽生动。 对于开发者来说,Flutter 降低了开发移动
腾讯云音视频
2021/09/06
1.7K0
聚焦教育、电商、泛娱乐等场景解决方案,腾讯视频云4.0正式发布
9月11日,2020腾讯全球数字生态大会音视频通信专场上,腾讯云升级发布了视频云4.0,以及视频云、通信云两大产品线的多个新品,通过PaaS平台强大的基础功能以及丰富的应用能力为教育、电商、泛娱乐等场景提供特色的解决方案。 伴随着音视频在线上会议、教学、商业、娱乐等场景的广泛应用,腾讯云一直在加强自身音视频领域产品矩阵建设,从最底层的IaaS层全球基础设施的布局,到音视频PaaS层多样化产品,再到SaaS层丰富的业务应用,为多行业发展助力。 在视频云产品线,腾讯云在会上宣布将视频云升级为4.0版本
腾讯云音视频
2020/09/11
1.6K0
2022年腾讯云「11.11」CDN/短信/视频云/通信产品优惠活动价格汇总
2022年「11.11」大促热卖中,腾讯云CDN/短信/视频云/通信产品的优惠力度真香!
腾讯云音视频
2022/11/10
155.8K1
解析腾讯云音视频通信三大核心网络技术实战与创新
随着互联网的发展越来越成熟,移动终端成为我们人手必备的生活用品,云计算的普及与高速发展,4G、5G网络的瓜熟蒂落,我们真正的进入了全真互联网时代。2020年,一场突如其来的疫情,很多传统行业不得不将线下业务转移到线上,疫情催生了更多的线上沟通需求,因此,我们也面临着一个巨大的挑战,线下全真的体验如何在线上得到很好的解决。 得益于云计算、音视频、通信技术的发展,企业和开发者可以快速地将线下业务搬到线上,4月16日 | 上海,LiveVideoStack联合腾讯云共邀5位技术大咖,解析腾讯云构成全真
腾讯云音视频
2021/03/22
1.3K0
实时音视频开发学习1 - 音视频初体验
随着移动互联网速度越来越快的发展,实时音视频的发展也越来越收到重视。腾讯实时音视频(Tencent Real-Time Communication,TRTC)经过了10多年在网络音视频技术的发展与积累,并以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,使得开发者能快速实现低成本、低延时、高品质的音频互动解决方案。
金林学音视频
2020/08/20
4K0
实时音视频开发学习1 - 音视频初体验
实时音视频 TRTC 常见问题汇总---咨询问题篇
支持的平台包括 iOS、Android、Windows(C++)、Windows(C#)、Mac、Web、Electron、微信小程序、Flutter,更多详情请参见 平台支持。
腾讯视频云-Zachary
2019/11/01
13.3K0
实时音视频 TRTC 常见问题汇总---咨询问题篇
产品动态 | 小程序TUIKit:原生开发,1天集成在线客服、实时通话、互动直播...
2021年9月10日,腾讯云即时通信IM正式上线拥有三大应用场景的小程序 TUIKit ,我们旨在为企业提供方便快捷的接入方式,三大应用场景,只需要简单的接入,即可获得所想要的场景。 - 效果展示 - - TUIkit 的优势 - 极速集成:低代码方案助您快速集成,一天即可完成; 原生 js 开发:大大削减了开发者熟悉第三方框架文档的时间,100%支持原生特性; 场景化开发:覆盖常用场景,组件化UI助您低代码快速实现所需场景(在线客服、实时通话、互动直播); 开发成本低:节省大量资金、时间、人力、
腾讯云音视频
2021/10/12
1.8K0
腾讯云通信产品怎么选?绝不会出错的选购指南!
随着目前云市场的生态角色越来越细分,云产品种类也是越来越多。 (看到这么多云产品,是不是一个头两个大呢?) 很多用户对市面上云产品的认知也是处在一个摸棱两可的阶段。特别是疫情期间,直播行业的需求越来越大,在线课堂,在线金融,直播带货等如雨后春笋般频频冒出,越来越多的行业都趁着这个热潮纷纷加入。 云通信产品种类说多也不多,可是很多用户在选择通信云产品的时候不知道哪些是适合自己的,如何根据自身业务场景选择合适的通信云产品呢? 云通信选购攻略大集合 四大热门场景产品搭配推荐: 社交场景、教育场景、电商场景
腾讯即时通信IM
2020/08/31
7.5K0
即时通信IM核心能力及应用场景
新知系列课程第二季来啦!我们将为大家带来全真互联时代下新的行业趋势、新的技术方向以及新的应用场景分享。本期我们邀请了腾讯云音视频产品经理——郑聪兴,为大家分享腾讯云即时通信IM产品的能力及应用场景。 本次分享的内容分为三块,一是腾讯云即时通信IM的产品概述,二是IM的核心功能特点,三是IM的应用场景介绍。 即时通信IM是什么 即时通信IM是一款PaaS产品,以提供SDK的形式,集成至用户的APP或业务系统中,帮助用户快速实现类似QQ、微信那样的聊天能力。利用IM,用户可以实现APP内的单聊、群聊等稳定的消
腾讯云音视频
2023/01/09
3.1K0
即时通信IM核心能力及应用场景
​稳健、可靠全真即时通信网的架构与应用
导 语 支撑全真互联网的基础网络包括实时音视频通信网络、即时通信网络和流媒体分发网络。随着社会的进步,人们对低延时即时通信的需求越来越高。本次LiveVideoStackCon 2021上海站大会邀请到了负责腾讯云千亿级底层通信网络的刘然,他为我们分享了稳健、可靠的全真即时通信网的架构与应用实践。 文 / 刘然 整理 / LiveVideoStack 大家下午好,我是来自腾讯云通信的后台研发刘然。刚刚提到全真互联网及“三合一”基础网络RT-ONE™,它具体包括了实时音视频通信网络、即时通信网络和流媒体分发
腾讯云音视频
2021/05/28
8020
实时音视频 TRTC 常见问题汇总---咨询问题篇
TRTC 是腾讯云基于 QQ 十多年来在音视频通话技术上积累,结合腾讯浏览服务 TBS WebRTC 能力与腾讯实时音视频 SDK ,为客户提供多平台互通高品质可定制化的 实时音视频互通服务 解决方案。 (1)您可以通过“crtl+F”(win)、“command+F”(mac)搜索关键字。 (2)若没有您想要的问答,欢迎在评论区提问、留言和交流,笔者会定期解答疑惑。 (3)最新产品动态与变更以官网文档为准。
TRTC小百科
2021/09/16
8.9K2
TUIKit 产品全景图
TUIkit 是腾讯云音视频团队在5000+客户的服务积累中,结合业内主流的音视频场景,提炼出的开源解决方案,包含视频通话组件、直播组件、视频房间组件等多个客户端音视频组件,可以帮助开发者快速搭建诸如通话、客服、直播、语聊、教育等场景解决方案。更多介绍详见:
MinTate
2022/06/20
2.5K0
TUIKit 产品全景图
新知 | 低延时、高可靠、高稳定、高安全的即时通信IM技术
今天的新知系列课,我们邀请到了来自腾讯云即时通信IM团队的技术导师 —— 陈锐龙,为大家介绍腾讯云即时通信IM是如何构建低延时高可靠高稳定以及高安全方面的通信能力,以及底层的核心技术支撑跟技术特性。本次分享分为4个部分,包括产品介绍 ,产品通信底座RT-ONE™ for IM 核心技术特性介绍,IM的应用场景以及如何快速集成我们的通信服务。 接下来的几周,每周四晚上7:30,我们都会在腾讯云音视频视频号、开源中国、InfoQ、51CTO、云+社区等多个平台进行课程直播,大家千万不要错过哦~ - 什
腾讯云音视频
2021/12/06
2.4K0
活动丨腾讯云通信多款产品优惠大来袭!
福利到! 腾讯云通信针对首次购买实时音视频的客户 即可获赠 10000分钟免费通话时长! 腾讯云通信产品优惠“享不停” 腾讯云通信致力于搭建专业、实时、安全和易用的通信服务平台,拥有短信、即时通信、实时音视频等核心产品,助您快速搭建专属您的云通信应用! 腾讯云通信推出超值套餐包! 实时音视频 01 购买实时音视频语音套餐包 最高立减3300元! 购买实时音视频视频通话套餐包 最高立减15499.98元! 低时延、低卡顿,支持全平台互通 最快30分钟快速搭建实时音视频通平台 国内短信 0
腾讯即时通信IM
2020/06/19
4.6K0
走进未来——全真互联未来会场,今年的亮点都在这里!
未来的会展会是什么样的?在很多影视作品中,我们都能够窥见作者对于未来的一些期待。突破时空的实时互动、高度拟真的数字场景、多种维度的沉浸互动……之前,这些愿景可能只停留在我们的想象之中,但今天,在腾讯数字生态大会全真互联未来会场,你可以真正走进未来,化身虚拟形象进入腾讯描绘的未来中,体验真实的未来会展。 这个未来会场由腾讯云音视频团队与万翼擎天柱联合打造,整合了腾讯云应用云渲染、虚拟直播、快直播、TRTC、IM、Avatar、数智人等产品和前沿技术,是业内首个集虚拟形象、多人互动、直播、AI问答等多种玩法为
腾讯云音视频
2022/12/02
1.6K0
走进未来——全真互联未来会场,今年的亮点都在这里!
TRTC Flutter 支持四大场景快速接入!
导语 Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台应用,支持Android、IOS、Web、Linux app。Flutter 支持毫秒级的热重载,并提供了富有表现力和灵活的 UI,可达到原生一样的性能。 众所周知,Flutter 自从上市以来,就受到广大开发者的强烈追捧。当然,我们腾讯实时音视频也不落后,给常见的应用场景提供了快速集成实时音视频 SDK,运行 TRTC 场景化 Flutter Demo,即可实现双人音视频通话、语音沙龙、互动直播等
腾讯云音视频
2021/07/05
2.3K0
腾讯云视立方,1个SDK,功能全覆盖,解决音视频终端应用烦恼!
疫情这几年,有两件事渐渐融入了中国打工人的生活,一件是“核酸检测”,另一件是“线上办公”。带上核酸证明上班,背着办公电脑回家已经成了打工人的新常态。在时不时就得居家办公几天的大环境下,企业纷纷搞起了自己的线上办公协同系统。不止是线上办公协同,电商带货、在线教育、娱乐直播等音视频场景的需求这两年都在井喷式爆发,老板们纷纷加码音视频。 “要求也不高,像微信、QQ那样能发发消息,传个文件,打个语音,再稍微创新创新,学一下腾讯会议,增加个开会的功能就差不多了。现在音视频是风口,时间宝贵,给你两个月,没问题吧?”领导
腾讯云音视频
2022/06/02
2.4K0
腾讯云视立方,1个SDK,功能全覆盖,解决音视频终端应用烦恼!
揭秘腾讯云最新音视频及融合通信技术实践
社交到视频会议,从金融到医疗,云端通信能力正在与传统的电话/IM、呼叫中心、企业通信融合,打通各个端与渠道的数据,实现实时互联与掌控。而音视频技术在其中扮演着重要的角色,如何为用户提供更低延迟、更佳体验的实时视频?如何保障海外业务的稳定性和高可用?AI技术如何为音视频赋能?
LiveVideoStack
2019/07/01
2.7K0
揭秘腾讯云最新音视频及融合通信技术实践
推荐阅读
相关推荐
干货丨带你快速认识云通信
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档