[eggjs/egg]多进程研发模式增强问题的一些请教

2024-07-22 609 views
1

请问如果我希望代码只运行在一个进程,当收到数据后,再通知其他的进程,例如:监听数据库的通知等等,这种情况我该什么地方来写只运行在一个进程上的代码呢?现在是写在了schedule定时器的目录下,但我觉得这并不是最好的选择,请问大家有什么好的办法吗?谢谢。

回答

1

使用 Agent 进程

4

@JasinYip 非常感谢您的回复 嗯嗯 我最开始也是用的Agent进程,但是因为我需要只在一个进程中运行的代码还挺多的 不知道这样污染和占用Agent进程是否合适,

5

Agent 本身就是被设计为可以执行少量业务代码的,如果你确实有大量需要进行的计算,应该通过 IPC 转交给 Worker 来进行。Agent 应该就是做一些像你提到的监听数据库通知等操作。

1

嗯嗯 如果不通过IPC 而是通过pub\sub 通知给worker进程可以的吗?另外pub\sub可以只通知一个工作进程吗?

7

看你自己的业务场景判断吧

1

我理解是不可以,硬要做就得自己实现封装一个,在订阅和发布的 info JSON 上动手脚。以保证发广播时只有一个进程响应

8

好的 那还是先用IPC吧 我也觉得在JSON上做手脚不太好。