golang:监视工作者goroutine的Web服务

时间:2014-09-18 09:33:04

标签: rest go

假设我正在golang中编写REST Web服务。在内部,我有几个工作goroutine做事情。这样的goroutine是由HTTP API按需触发的。当然,我想以某种方式监控这些goroutines的进展。通常会有goroutine发送更新,错误等的通道。主程序会在这些通道上执行select

但是,因为主程序的偶数循环忙于http.ListenAndServe(),所以我看不到实现此目的的方法。鉴于这似乎是一个非常普遍的问题,我想知道是否存在我缺少的设计模式。

[编辑] 更多技术细节。所以我有一个Resource类来管理资源池。 Resource.DoSomething()是一个很长的操作,所以它会在背后踢出一个goroutine。将打开一个频道以允许轮询状态。

当某个HTTP请求进入时,会触发此DoSomething()。但我没有上下文来调查状态。目前我的愚蠢计划是在下一个 HTTP请求进入时轮询通道输入。这应该足够但不理想 - 我想知道该goroutine正在发生什么。< / p>

1 个答案:

答案 0 :(得分:3)

启动Go例程以专门运行包含监控的选择,将select放入其自己的for循环中:

func main() {

    go func() {
        for {
            select {
            //TODO: Insert Code Here?
            }
        }
    }()

    err := http.ListenAndServe()

    if err != nil {
        //TODO:
    }
}