You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go项目API与RabbitMQ Worker共存异常,端口无法访问求助

问题分析与解决:Go API与RabbitMQ Worker无法协同工作

问题现象

基于Go的API项目同时运行RabbitMQ Worker进程时,Worker启动后API的3006端口无法访问,二者无法协同工作。

根本原因

查看main.go的执行流程:

func main() {
    start := app.App{}
    start.StartApp()
    start.StartWorker() // 同步调用,会永久阻塞主线程
    start.Run(":3006")  // 该行代码从未被执行
}

StartWorker方法内部调用了consumer.Listen(),而Listen方法最后通过<-forever语句永久阻塞当前goroutine,导致主线程卡在start.StartWorker(),后续启动HTTP服务器的start.Run(":3006")完全没有执行机会,因此API端口无法被访问。

解决方案

将StartWorker的调用放到goroutine中,让Worker在后台异步运行,主线程即可继续执行启动HTTP服务器的逻辑:

修改后的main.go

func main() {
    start := app.App{}
    start.StartApp()
    
    // 启动Worker到后台goroutine
    go func() {
        start.StartWorker()
    }()
    
    start.Run(":3006")
}

额外注意事项

  • StartWorker中的defer connection.Close():由于Worker的goroutine会一直阻塞在Listen方法,这个defer语句不会被触发,RabbitMQ连接会保持正常,无需额外修改。
  • 优雅关闭:后续可在收到终止信号时,同时关闭Worker的RabbitMQ连接和HTTP服务器,保证资源正常释放。

内容的提问来源于stack exchange,提问作者King

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 15:35:14