可能/推荐在 Go 中编写事件驱动的应用程序吗?

我正在设计一个应用程序来根据某些规则管理 RabbitMQ 工作人员。例如:

  • 维持最少数量的工人

  • 如果队列增长超过 M 个任务,则产生最多 N 个工作线程

  • 杀死超过 X 分钟的工人

我最初想用 Go 编写它,因为它是编译的,我可以简单地将应用程序编译到目标操作系统并对其进行守护程序。但是,我的概念设计涉及一个循环,每 Y 秒收集一次数据并将其传递给决策引擎。然后引擎将引发其他 goroutine 监听的事件,以生成或杀死 worker。

我找到了可以解决这个问题的Emission库,但是我在某处读到了一条评论,说它可能不是线程安全的。老实说,我对 Go 和线程编程的了解不足以正确评估这个库是否能满足我的需求,或者这在 Go 中是否可行。

我可以在 NodeJS 中非常快速地编写它,甚至可以使用nexe编译它。但是,我想学习一门新语言,我喜欢 Go 中的定向编译,并且它可以在 goroutine 本身之外进行多线程处理。

这是可能的,还是我试图在 Go 中硬塞一些它不是设计的东西?以不同的方式完成相同的目标还是只是一起使用不同的语言会更好?


心有法竹
浏览 114回答 2
2回答

繁花不似锦

Go 是一种非常适合 I/O 密集型应用程序的语言,尤其是当它们涉及消息传递时。但是,您的用例似乎涉及管理RabbitMQ 而不是消息传递。出于这个目的,Go 很少有使其脱颖而出的优势。您可能想退后一步,将整个系统视为一个整体。多少需要用到RabbitMQ?如果这是一个悬而未决的问题,您可能会发现轻量级 goroutine 和通道是一个有用的工具。也许,您可以在 Go 程序中实现直接使用 MQ 的系统部分。但是,如果您尝试这样做,请记住基本的 CSP 模型是同步/阻塞消息传递,与 MQ 模型完全不同。缓冲、排队、异步操作等分层在这种原始行为之上。如果你的意图真的只是管理 RabbitMQ,也许可以看看rabbitmq-http项目来帮助你下定决心。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go