golang
文章平均质量分 82
hurray123
这个作者很懒,什么都没留下…
展开
-
nsq源码阅读笔记之nsqd(一)——nsqd的配置解析和初始化
nsqd的配置解析和初始化配置解析nsqd的主函数位于apps/nsqd.go中的main函数flagSet := nsqFlagset()flagSet.Parse(os.Args[1:])首先main函数调用nsqFlagset和Parse进行命令行参数集初始化原创 2015-11-25 16:03:39 · 5381 阅读 · 0 评论 -
nsq源码阅读笔记之nsqd(四)——Channel
Topic/Channel是发布/订阅模型的一种实现。Topic对应于发布,Channel对应于订阅。消费者通过在Topic下生成不同的Channel来接收来自该Topic的消息。通过生成相同的Channel来实现消费者负载均衡。Channel本身在投递消息给消费者时维护两个队列,一个是inFlight队列,该队列存储正在投递,但还没被标记为投递成功的消息。另一个是deferred队列,用来存储需要被延时投原创 2016-02-29 14:14:46 · 8612 阅读 · 6 评论 -
nsq源码阅读笔记之nsqd(三)——diskQueue
diskQueue是backendQueue接口的一个实现。backendQueue的作用是在实现在内存go channel缓冲区满的情况下对消息的处理的对象。 除了diskQueue外还有dummyBackendQueue实现了backendQueue接口。对于临时(#ephemeral结尾)Topic/Channel,在创建时会使用dummyBackendQueue初始化backend原创 2015-12-09 20:33:56 · 2497 阅读 · 8 评论 -
nsq源码阅读笔记之nsqd(二)——Topic
GetTopic函数用于获取topic对象,首先先尝试从topicMap表中获取,如果指定的topic存在,则直接返回topic对象。当topic不存在时需要新建一个topic,加入到topicMap中,如果启用了nsqlookupd则需要从lookupd中获取该topic的所有channel,在去除#ephemeral结尾的临时channel后加入到topic中。其中锁的使用值得学习:原创 2015-11-26 13:20:26 · 3690 阅读 · 2 评论 -
Golang实现带优先级的channel
在go语言中,如果select/case中没有default子句,则程序会阻塞在select中,直到其中一个case语句接收到了数据。如果有default语句,则不会阻塞,如果case接收到数据,就执行case中的语句,如果case未收到信号,则会执行defalut中的语句,随后跳出select块。使用这个特性可以实现带优先级的channel队列。原创 2015-11-25 15:56:57 · 4469 阅读 · 8 评论