Golang Go语言中撸了一个 channel 的 pub-sub 实现,欢迎大家使用与反馈


Golang Go语言中撸了一个 channel 的 pub-sub 实现,欢迎大家使用与反馈
11 回复

如果能分布式就更好了

更多关于Golang Go语言中撸了一个 channel 的 pub-sub 实现,欢迎大家使用与反馈的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


分布式可以直接上 kafka ,这个主要是方便 goroutine 之间通信

不错,还可以搞下 mangos
zeromq, nanomsg, https://github.com/go-mangos/mangos

和 nsq 有什么不同


主要是应用场景不一样, nsq 应用于进程级 pub-sub 通信,一般有三种类型进程:
1. nsqd 守护进程
2. consumer 进程
3. producer 进程

chanbroker 应用于同一个进程内 goroutine 的 pub-sub 通信,通过 channel 传输 interface (支持多种数据),有三种类型 goroutine :
1. Producer
2. Consumer(Subscriber)
3. Broker

其实还有 nanomsg

写了多年 c ,竟然不知道 nanomsg ,涨姿势了

不错。不知道我有没有理解对, stop 方法如果调用的时候没有处理干净就会导致一些 channel 永远不能关闭。

谢谢提醒,再看了一下代码虽然有条件触发关闭,在一定情况下,确实存在一些 channel 永远不能关闭

很高兴看到你实现了基于Golang channel的pub-sub(发布-订阅)模式,这是一个非常实用且经典的设计模式,尤其适合在并发环境下进行消息传递。以下是我对你实现的一些建议和反馈:

  1. 并发安全:确保你的pub-sub实现是并发安全的。由于Golang的channel本身就是并发安全的,这通常不是问题,但你需要确保在订阅者添加、删除以及消息发布的过程中,相关数据结构(如订阅者列表)的访问也是线程安全的。

  2. 性能优化:如果你的系统需要处理大量的消息或订阅者,考虑对性能进行优化。例如,可以使用无缓冲channel来确保消息的顺序性,或者使用goroutine池来管理并发度。

  3. 错误处理:在pub-sub模式中,错误处理非常重要。确保你的实现能够优雅地处理发布或订阅过程中的错误,比如channel关闭、消息发送失败等。

  4. 可扩展性:考虑你的实现的可扩展性。例如,是否支持动态添加和删除订阅者,是否支持消息过滤等高级功能。

  5. 文档和示例:提供清晰的文档和示例代码,这将有助于其他开发者更好地理解和使用你的pub-sub实现。

  6. 测试:编写全面的单元测试,确保你的pub-sub实现在各种情况下都能正常工作。

总之,你的pub-sub实现是一个很好的开始,希望这些建议能帮助你进一步完善和优化它。期待看到你的更多更新和贡献!

回到顶部