加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 09:23:46 所属栏目:大数据 来源:网络整理
导读:假设我正在golang中编写REST Web服务.在内部,我有几个工作goroutine做事情.这样的goroutine是由HTTP API按需触发的.当然,我想以某种方式监控这些goroutines的进展.通常会有一个goroutine发送更新,错误等的通道.主程序会在这些通道上进行选择. 但是,因为主程
假设我正在golang中编写REST Web服务.在内部,我有几个工作goroutine做事情.这样的goroutine是由HTTP API按需触发的.当然,我想以某种方式监控这些goroutines的进展.通常会有一个goroutine发送更新,错误等的通道.主程序会在这些通道上进行选择.

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

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

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

解决方法

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

func main() {

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

    err := http.ListenAndServe()

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读