gookit / event

📢 Lightweight event manager and dispatcher implements by Go. Go实现的轻量级的事件管理、调度程序库, 支持设置监听器的优先级, 支持使用通配符来进行一组事件的监听
https://pgk.go.dev/github.com/gookit/event
MIT License
508 stars 59 forks source link

event库不方便支持热重启 #10

Closed xiaofeige closed 1 year ago

xiaofeige commented 3 years ago

对于异步逻辑,希望能暴漏出一个合理的接口,方便支持热重启。

inhere commented 3 years ago

具体点呢?要api更新那些东西

xiaofeige commented 3 years ago

比如使用AsyncFire的实现是直接起一个go-routine去异步执行,但是这种方式导致服务热重启的时候感知不到这里有没有未执行完的任务。建议event对外提供一个WatiGroup可以允许外部热重启的地方执行wait操作。

zhangsean commented 2 years ago

就是要实现一个服务计数器对吧?请求来的时候+1,请求完成-1,请求计数0的时候才允许热重启。

xiaofeige commented 2 years ago

你可以用 waitgroup去实现。

a67793581 commented 1 year ago

可以参考 这个实现 https://github.com/asaskevich/EventBus
这个库非常精简,但是作者已经停止了维护。

inhere commented 1 year ago

@xiaofeige @a67793581 v1.1.0+ 版本已经添加了简单的实现。 可以使用 Async/FireC/FireAsync 方法触发事件,事件将会写入 chan 异步消费。可以使用 CloseWait() 关闭chan并等待事件全部消费完成。