【独家数据报告】CSDN AI营销续费最优决策点:第37天启动续费流程,节省成本达¥1,890+
2026/6/7 16:46:20
如果需要在后端启动一个独立服务,在 VonaJS 中该如何实现呢?
由于 VonaJS 是分布式架构,后端可以启动多个 Workers。那么,应该在哪个 Worker 中启动独立服务呢?
VonaJS 针对此场景提供了Election,工作原理如下:
比如,在模块 demo-student 中创建meta.election。在选中的 Worker 中启动一个定时器,每隔 2 秒输出Hello World
$ vona :create:bean meta election --module=demo-student右键菜单 -[模块路径]:`Vona Meta/Election`exporttypeTypeElectionObtainResource='echo';@Meta()exportclassMetaElectionextendsBeanElectionBase<TypeElectionObtainResource>{}TypeElectionObtainResource: 定义 Election 资源的类型接下来创建Module Monkey,响应appStarted和appClose钩子
exportclassMonkeyextendsBeanSimpleimplementsIMonkeyAppStarted{asyncappStarted(){constscope=this.app.scope(__ThisModule__);scope.election.obtain('echo',()=>{// custom logic},async()=>{// cleanup});}}appStarted: 调用election.obtain获取指定资源的所有权。当取得所有权就会调用回调函数在调用election.obtain时,可以指定允许多个 Workers 取得所有权:
async appStarted() { const scope = this.app.scope(__ThisModule__); scope.election.obtain('echo', () => { // custom logic }, async () => { // cleanup + }, { tickets: 2 }); }| 名称 | 说明 |
|---|---|
| tickets | 允许指定数量的Workers取得所有权,默认为1 |