NSQ
huang_0_3
这个作者很懒,什么都没留下…
展开
-
NSQ 源码分析之Lookupd--HttpServer
NSQ中 HttpServer实现比较简单,通过内部 http.Server实现,并通过github.com/julienschmidt/httprouter实现路由机制。在 HttpServer中,包含NSQ 的相关的元数据的操作,比如Topic和 Channel的增删查。同时提供了 NSQD整体运行状态的查询以及一些数据分析。在这个过程中,大家可以简单认为其实就是 D...原创 2020-04-18 09:29:54 · 163 阅读 · 0 评论 -
NSQ 源码分析之Lookupd--TCPServer
今天主要讲的是 Lookupd 中 TCP 服务的实现,TCP服务主要用于响应 NSQD 的心跳检查,NSQD注册等信息。Lookupd的 TCP服务与 NSQD中的 TCP服务在代码结构及实现方面非常相似。都是通过IOLoop循环读取客户端请求、解析命令、调用命令函数、执行命令、返回响应。主要代码文件:1.nsqlookupd/lookup_protocol_v1.go...原创 2020-04-18 08:57:50 · 235 阅读 · 0 评论 -
NSQ 源码分析之Lookupd--DB
今天主要讲的是 Lookupd数据存储方式(DB)。Lookupd主要保存三种信息,一是 NSQD身份信息,二是 NSQD Topic 信息,三是 NSQD Topic中 Channel信息。主要代码文件:1.nsqlookupd/registration_db.go结构体:type PeerInfo struct { //伙伴信息(nsqd) lastUpdate ...原创 2020-04-11 10:59:01 · 240 阅读 · 0 评论 -
NSQ 源码分析之Lookupd--lookup启动
今天主要讲的是 NSQD中 Lookupd, NSQD通过Lookupd实现分布式集群。从前几篇的源码分析中可知 NSQD 与 Lookupd 的协作方式有以下几点:1.NSQD启动时,会通过 TCP上报它自己的身份信息给所有的Lookupd服务。2.在 NSQD 创建新的Topic的时候,回去拉取 Lookupd 服务中,有关这个 Topic 的信息并初始化当前 Topic。3....原创 2020-04-11 09:30:58 · 400 阅读 · 0 评论 -
NSQ 源码分析之NSQD--lookup
今天主要讲的是 NSQD中 lookup,其主要作用是告知 Lookupd,当前 NSQD实例的情况,包括心跳检测,Topic和 Channel的变化。主要代码文件:1.nsqd/lookup_peer.go 主要定义了一些集群的消息的结构体和相关的实例化type lookupPeer struct { logf lg.AppLogFunc //日...原创 2020-04-03 09:29:22 · 314 阅读 · 0 评论 -
NSQ 源码分析之NSQD--消息协议 Message
今天主要讲的是 NSQD中消息协议 Message,Message主要作用是对客户端发送过来的消息进行Message封装,然后等待消费者消费或者将 Message转换为字节流发送客户端。主要代码文件:1.nsqd/message.goMessage结构体type MessageID [MsgIDLength]byte // 定义消息 ID 类型type Mess...原创 2020-04-03 08:38:25 · 399 阅读 · 0 评论 -
NSQ 源码分析之NSQD--queueScanLoop
今天主要讲的是 NSQD中 queueScanLoop代码实现,这个函数的作用是用来维护 channel 中的延时队列和等待消费确认队列。将超时的消息重新加入消费队列中。主要代码文件:1.nsqd/nsqd.goqueueScanLoop 函数在 Main函数中启动 n.waitGroup.Wrap(n.queueScanLoop)func (n *NSQD) queue...原创 2020-03-28 10:35:30 · 376 阅读 · 0 评论 -
NSQ 源码分析之NSQD--Channel
今天主要讲的是NSQ Channel 的代码实现,Channel作为Topic的重要组成部分,主要的作用是通过队列的形式传递消息,并等待订阅者消费。主要代码文件:1.nsqd/channel.gochannel结构体type Channel struct { requeueCount uint64 //重入队列累计 messageCount uint64 //消息累计...原创 2020-03-28 09:24:44 · 1683 阅读 · 0 评论 -
NSQ 源码分析之NSQD--Topic
今天主要讲的是NSQ topic的代码实现,topic作为MQ的重要概念,了解它的实现,对我们理解其他MQ的topic,有很多的益处。主要代码文件:1.nsqd/topic.gotopic结构体type Topic struct { // 64bit atomic vars need to be first for proper alignment on 32bit plat...原创 2020-03-21 10:46:47 · 484 阅读 · 0 评论 -
NSQ 源码分析之NSQD--Exec相关函数
在NSQD的TCPServer,当客户端与服务连接成功之后,会有一个goroutine专门处理这个连接的请求,在上篇中的IOLoop中,可看出服务以\n 为分隔符作为一条命令的结束(协议)读取客户请求,然后在将命令分解成 “命令参数参数1惨2...”,最后交给Exec函数执行,并返回响应。详细流程参考https://blog.csdn.net/H_L_S/article/detail...原创 2020-03-21 09:48:49 · 310 阅读 · 0 评论 -
NSQ 源码分析之NSQD--ProtocolV2
今天来说说NSQD.TCPServer中的核心函数IOLoop的具体实现,IOLoop主要的工作是接收和响应客户的命令。同时开启messagePump goroutine进行心跳检查,给订阅者发生消息等操作。详细流程参考https://blog.csdn.net/H_L_S/article/details/104709619中的逻辑流程图。主要代码文件:1.nsqd/protoc...原创 2020-03-14 10:31:02 · 283 阅读 · 0 评论 -
NSQ 源码分析之NSQD--TCPServer
今天来说说NSQD中的TCP服务,TCP服务的任务包括接收/处理/响应发布、消费、延时、消费确认等命令。详细流程参考https://blog.csdn.net/H_L_S/article/details/104709619中的逻辑流程图。主要代码文件:1.internal/protocol/tcp_server.go,该文件主要是启动一个服务监听,循环接收客户端连接,并且将con...原创 2020-03-14 08:52:29 · 234 阅读 · 0 评论 -
NSQ 源码分析之NSQD 的启动
1.NSQD的配置(nsqd/options.go)包括如下参数:type Options struct { /*******************基本信息配置*********************/ //节点ID ID int64 `flag:"node-id" cfg:"id"` //日志等级(可参考nsqd/logger.go) LogLeve...原创 2020-03-08 10:30:43 · 503 阅读 · 0 评论 -
NSQ 全视图
前段时间,基于对go语言的兴趣,又苦于没有机会实践,于是想研究一些开源框架的源码。而选择NSQ主要是因为在工作中经常需要使用的MQ,比如RabbitMQ或 RocketMQ,因此也萌发了对MQ实现原理的兴趣。NSQ的一些介绍大家可以在百度或者官网中查看,我这就不赘述了。下面的逻辑图是基于我对NSQ源码的研究而画,主要是NSQD和Lookupd。如果有不对的地方,欢迎大家留言指出。后期将会...原创 2020-03-07 09:52:55 · 316 阅读 · 0 评论