为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
心有法竹 2021-10-18 16:52:48
我正在设计一个应用程序来根据某些规则管理 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项目来帮助你下定决心。


查看完整回答
反对 回复 2021-10-18
  • 2 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信