我正在设计一个应用程序来根据某些规则管理 RabbitMQ 工作人员。例如:维持最少数量的工人如果队列增长超过 M 个任务,则产生最多 N 个工作线程杀死超过 X 分钟的工人我最初想用 Go 编写它,因为它是编译的,我可以简单地将应用程序编译到目标操作系统并对其进行守护程序。但是,我的概念设计涉及一个循环,每 Y 秒收集一次数据并将其传递给决策引擎。然后引擎将引发其他 goroutine 监听的事件,以生成或杀死 worker。我找到了可以解决这个问题的Emission库,但是我在某处读到了一条评论,说它可能不是线程安全的。老实说,我对 Go 和线程编程的了解不足以正确评估这个库是否能满足我的需求,或者这在 Go 中是否可行。我可以在 NodeJS 中非常快速地编写它,甚至可以使用nexe编译它。但是,我想学习一门新语言,我喜欢 Go 中的定向编译,并且它可以在 goroutine 本身之外进行多线程处理。这是可能的,还是我试图在 Go 中硬塞一些它不是设计的东西?以不同的方式完成相同的目标还是只是一起使用不同的语言会更好?
2 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
Go 是一种非常适合 I/O 密集型应用程序的语言,尤其是当它们涉及消息传递时。但是,您的用例似乎涉及管理RabbitMQ 而不是消息传递。出于这个目的,Go 很少有使其脱颖而出的优势。
您可能想退后一步,将整个系统视为一个整体。多少需要用到RabbitMQ?如果这是一个悬而未决的问题,您可能会发现轻量级 goroutine 和通道是一个有用的工具。也许,您可以在 Go 程序中实现直接使用 MQ 的系统部分。但是,如果您尝试这样做,请记住基本的 CSP 模型是同步/阻塞消息传递,与 MQ 模型完全不同。缓冲、排队、异步操作等分层在这种原始行为之上。
如果你的意图真的只是管理 RabbitMQ,也许可以看看rabbitmq-http项目来帮助你下定决心。
- 2 回答
- 0 关注
- 113 浏览
添加回答
举报
0/150
提交
取消