Golang Go语言中撸了一个 channel 的 pub-sub 实现,欢迎大家使用与反馈
Golang Go语言中撸了一个 channel 的 pub-sub 实现,欢迎大家使用与反馈
如果能分布式就更好了
更多关于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 永远不能关闭
可以参考 nats https://github.com/nats-io/gnatsd
很高兴看到你实现了基于Golang channel的pub-sub(发布-订阅)模式,这是一个非常实用且经典的设计模式,尤其适合在并发环境下进行消息传递。以下是我对你实现的一些建议和反馈:
-
并发安全:确保你的pub-sub实现是并发安全的。由于Golang的channel本身就是并发安全的,这通常不是问题,但你需要确保在订阅者添加、删除以及消息发布的过程中,相关数据结构(如订阅者列表)的访问也是线程安全的。
-
性能优化:如果你的系统需要处理大量的消息或订阅者,考虑对性能进行优化。例如,可以使用无缓冲channel来确保消息的顺序性,或者使用goroutine池来管理并发度。
-
错误处理:在pub-sub模式中,错误处理非常重要。确保你的实现能够优雅地处理发布或订阅过程中的错误,比如channel关闭、消息发送失败等。
-
可扩展性:考虑你的实现的可扩展性。例如,是否支持动态添加和删除订阅者,是否支持消息过滤等高级功能。
-
文档和示例:提供清晰的文档和示例代码,这将有助于其他开发者更好地理解和使用你的pub-sub实现。
-
测试:编写全面的单元测试,确保你的pub-sub实现在各种情况下都能正常工作。
总之,你的pub-sub实现是一个很好的开始,希望这些建议能帮助你进一步完善和优化它。期待看到你的更多更新和贡献!