news 2026/5/25 20:25:33

VonaJS: Election

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VonaJS: Election

如果需要在后端启动一个独立服务,在 VonaJS 中该如何实现呢?

由于 VonaJS 是分布式架构,后端可以启动多个 Workers。那么,应该在哪个 Worker 中启动独立服务呢?

VonaJS 针对此场景提供了Election,工作原理如下:

  1. 所有 Workers 都会参与竞争,获取所有权
  2. 可以指定同时获取所有权的 Workers 数量
  3. 取得所有权的 Workers 可以启动服务
  4. 如果某个拥有所有权的 Worker 正常退出或者异常终止,那么其他 Workers 就会继续参与竞争

创建meta.election

比如,在模块 demo-student 中创建meta.election。在选中的 Worker 中启动一个定时器,每隔 2 秒输出Hello World

1. Cli命令

$ vona :create:bean meta election --module=demo-student

2. 菜单命令

右键菜单 -[模块路径]:`Vona Meta/Election`

meta.election定义

exporttypeTypeElectionObtainResource='echo';@Meta()exportclassMetaElectionextendsBeanElectionBase<TypeElectionObtainResource>{}
  • TypeElectionObtainResource: 定义 Election 资源的类型

创建 Module Monkey

接下来创建Module Monkey,响应appStartedappClose钩子

exportclassMonkeyextendsBeanSimpleimplementsIMonkeyAppStarted{asyncappStarted(){constscope=this.app.scope(__ThisModule__);scope.election.obtain('echo',()=>{// custom logic},async()=>{// cleanup});}}
  • appStarted: 调用election.obtain获取指定资源的所有权。当取得所有权就会调用回调函数

Tickets

在调用election.obtain时,可以指定允许多个 Workers 取得所有权:

async appStarted() { const scope = this.app.scope(__ThisModule__); scope.election.obtain('echo', () => { // custom logic }, async () => { // cleanup + }, { tickets: 2 }); }
名称说明
tickets允许指定数量的Workers取得所有权,默认为1

资源

  • Github:https://github.com/vonajs/vona
  • 文档:https://vona.js.org
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 5:40:16

LobeChat能否实现AI香道师?气味搭配与情绪调节芳香疗法推荐

LobeChat能否实现AI香道师&#xff1f;气味搭配与情绪调节芳香疗法推荐 在快节奏的都市生活中&#xff0c;越来越多的人开始寻求非药物方式来缓解压力、调节情绪。冥想、音乐疗愈、自然接触……而其中&#xff0c;“香气”作为一种古老却始终鲜活的感官媒介&#xff0c;正悄然回…

作者头像 李华
网站建设 2026/5/26 5:40:36

HunyuanVideo-Foley:高保真拟音生成扩散模型

HunyuanVideo-Foley&#xff1a;高保真拟音生成扩散模型 你有没有遇到过这样的情况&#xff1a;一段精心制作的AI生成视频&#xff0c;画面流畅、细节丰富&#xff0c;可一旦播放&#xff0c;却像“默片”一样缺乏声音支撑&#xff1f;再逼真的奔跑镜头配上静音&#xff0c;观…

作者头像 李华
网站建设 2026/5/26 5:39:41

API测试完整流程解析与最佳实践

在微服务架构和敏捷开发模式为主流的现代软件工程中&#xff0c;API&#xff08;应用程序编程接口&#xff09;作为系统间通信的核心纽带&#xff0c;其质量直接决定产品稳定性与用户体验。完整的API测试流程不仅是保障软件质量的关键环节&#xff0c;更是测试工程师核心能力的…

作者头像 李华
网站建设 2026/5/26 5:54:26

LobeChat能否转换代码格式?编程语言互译实验

LobeChat能否转换代码格式&#xff1f;编程语言互译实验 在现代软件开发中&#xff0c;团队常常面临技术栈割裂的困境&#xff1a;前端用TypeScript&#xff0c;后端跑Python&#xff0c;边缘设备上却要写C。当一个算法原型需要跨平台部署时&#xff0c;手动重写不仅耗时&#…

作者头像 李华
网站建设 2026/5/26 7:20:05

ERP能解决什么问题?企业管理难题如何轻松破解?

引言&#xff1a;在数字化转型加速的当下&#xff0c;中小型企业正面临着 “规模扩张难、管理成本高、决策效率低” 的三重困境。传统管理模式中&#xff0c;各部门数据孤立、流程繁琐、决策滞后等问题&#xff0c;成为制约企业发展的关键瓶颈。而 ERP&#xff08;企业资源计划…

作者头像 李华