golang:监视工作程序goroutine的Web服务

lan*_*ng2 5 rest go

假设我正在用golang编写REST Web服务。在内部,我有几个执行程序的工作者goroutine。此类goroutine由HTTP API按需触发。当然,我想以某种方式监视这些goroutine的进度。通常,goroutine将有一个通道发送更新,错误等。主程序将select在这些通道上运行。

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

[编辑]一些技术细节。因此,我有一Resource堂课来管理资源池。Resource.DoSomething()这是一个很长的操作,所以它会在后台启动一个goroutine。将打开一个通道以允许轮询状态。

当某个HTTP请求进入时,DoSomething()将触发该请求。但是我没有上下文可以从中查询状态。目前,我的愚蠢计划是在下一个 HTTP请求进入时轮询通道以进行输入。这应该足够但不理想-我想立即知道该goroutine中发生了什么。

Dan*_*anG 3

启动一个 Go 例程来专门运行包含监控的 select,将 select 放入它自己的for循环中:

func main() {

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

    err := http.ListenAndServe()

    if err != nil {
        //TODO:
    }
}
Run Code Online (Sandbox Code Playgroud)