V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
laolaowang
V2EX  ›  Go 编程语言

有没有用 echo 的兄弟,怎么判断 echo 服务启动成功,然后执行一些其他逻辑的

  •  
  •   laolaowang · 2022-08-15 14:49:44 +08:00 · 1601 次点击
    这是一个创建于 835 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想在服务启动成功之后执行一个定时任务,如果启动失败就不执行了

    但是 echo 服务启动之后,就会”卡住“,后续逻辑无法继续执行了,这个其实和 echo 关系不大,其他的 web 服务也是这样的。

    目前是用了一个笨办法,另启一个携程,然后不断的去 ping 服务,如果返回 200 则表示成功

    感觉太 low 了,不知道有没有更好的解决办法

    11 条回复    2022-08-15 19:50:59 +08:00
    SorcererXW
        1
    SorcererXW  
       2022-08-15 15:27:19 +08:00   ❤️ 1
    echo 内部用的就是原生的 http server ,可以看看这个 https://stackoverflow.com/questions/53332667/how-to-notify-when-http-server-starts-successfully

    > 然后不断的去 ping 服务

    这也不算笨吧,k8s 的健康检查判断服务是否启动也是这么做的
    FrankAdler
        2
    FrankAdler  
       2022-08-15 16:15:35 +08:00 via iPhone
    上代码
    liaohongxing
        3
    liaohongxing  
       2022-08-15 17:31:50 +08:00
    我也用 echo , 也有定时任务 ,没遇到你说的情况,我的定时任务自己造的轮子。
    原理就是时间轮+协程, 不会阻塞 echo ,echo 也不会阻塞任务 。实在不会,github 整合一个 cron 库就行
    liaohongxing
        4
    liaohongxing  
       2022-08-15 17:32:31 +08:00
    你的服务要在 echo 之前运行
    laolaowang
        5
    laolaowang  
    OP
       2022-08-15 17:36:35 +08:00
    @liaohongxing 我现在用的是 go-cron ,就是好奇怎么让定时任务不放在 echo 之前之后
    liaohongxing
        6
    liaohongxing  
       2022-08-15 17:43:46 +08:00
    你把任务放在 echo 之后,任务肯定会卡住,因为标准库基本原理就是 select chan , chan 没有数据自然卡住,后面的代码不会执行 ,无限循环在 Start 那里,go-cron 启动在 echo 前面, go-cron 本省不会阻塞,原理就是到了时间,启动一个协程运行 func 里面的代码,不会阻塞主线程
    dzdh
        7
    dzdh  
       2022-08-15 17:45:41 +08:00
    自己 net.Listen 或者 tls.Listen 。listen 成功,就一定能启动成功。listen 成功后启动你的定时任务 go func(){} 用协程。

    然后再把 listen 传给 echo 再启动 echo 。
    kidlj
        8
    kidlj  
       2022-08-15 17:59:11 +08:00
    先在 goroutine 里启动任务,然后 Echo 启动不成功直接 panic.
    lxz6597863
        9
    lxz6597863  
       2022-08-15 18:04:01 +08:00
    @dzdh +1
    laolaowang
        10
    laolaowang  
    OP
       2022-08-15 19:50:12 +08:00
    @dzdh 学习了
    laolaowang
        11
    laolaowang  
    OP
       2022-08-15 19:50:59 +08:00
    @kidlj 这个也可以,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5485 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 08:34 · PVG 16:34 · LAX 00:34 · JFK 03:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.