初识了 nsq 三个模块(nsqd, nsqlookupd, nsqadmin)的 demo演示,本篇则从源码开始,一步一步去解析 nsqd 的执行流程和逻辑处理,学习别人优秀的项目架构,以期学以致用。 1. nsqd 执行入口 在nsq/apps/nsqd/main.go 可以找到执行入口文件,如下:
nsqd 是一个守护进程,负责接收,排队,投递消息给客户端。它可以独立运行,不过通常它是由 nsqlookupd 实例所在集群配置的(它在这能声明 topics 和 channels,以便大家能找到)。它在2 个 TCP 端口监听,一个给客户端,另一个是 HTTP API。同时,它也能在第三个端口监听 HTTPS。
nsqd.LoadMetadata() nsqd.PersistMetadata() nsqd.Main() } 一、配置初始化及解析 opts := nsqd.NewOptions() flagSet := nsqdFlagSet(opts) flagSet.Parse(os.Args[1:]) 二、NSQD初始化 NSQD的初始化主要在nsq/nsqd/nsqd.go文件的New(opts *Options)函数中 主要作用是:初始化NSQD,并检验Options的...
NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征,是一个成熟的、已在大规模生成环境下应用的产品。 NSQ 由 3 个守护进程组成: nsqd 是接收、保存和传送消息到客户端的守护进程。 nsqlookupd 是管理的拓扑信息,维护着所有nsqd的状态,并提供了最终一致...
开启goroutine 执行 tcpServer, httpServer,分别监听 nsqd, nsqadmin 的客户端请求。 处理请求 // 位于 internal/protocol/tcp_server.go:17 func TCPServer(listener net.Listener, handler TCPHandler, logf lg.AppLogFunc) error { logf(lg.INFO, "TCP: listening on %s", listener.Addr()) ...
首先看下 nsqd 的入口函数: 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 //位于 apps/nsqd/main.go:26funcmain(){prg:=&program{}iferr:=svc.Run(prg,syscall.SIGINT,syscall.SIGTERM);err!=nil{logFatal("%s",err)}}func(p*program)Init(env svc.Environment)error{ifenv.IsWindows...
NSQ系列(一):概述和架构 关于NSQNSQ是Go开发的,比较轻量的一款MQ。公司很多项目使用了NSQ作为消息队列,也借此了解下NSQ。 先说下NSQ的几个特性,分布式部署,没有单点问题 支持水平扩容消息优先存储在内存(超过限制后可以保持在磁盘) Consumer可以动态发现Producer 架构 集群两个主要角色:nsqd和nsqlookupd。nsqdnsqd...
UM2020-NSQD是动能代理品牌——广芯微的新品,UM2020 是一款三通道、超低功耗的 ASK 接收芯片,UM2020-NSQD是UM2020系列中QFN16封装,SPI 接口的芯片,可检测 30KHz~300KHz 范围的 LF(低频)载波频率数据并触发唤醒信号,唤醒之后 MCU 可通过 IO 实时采集后续接收到的数据,也可以通过 SPI 或 I2C 直接从寄存器...
nsqd 是nsq 最核心的组件,它负责负责接收、排队、投递消息给客户端,一方面它要接收生产者生产的消息,要和producer通信,一方面它要投递消息给消费者,要和consumer通信,一方面它要和nsqlookupd通信来向其报告它的信息,所以nsqd地处核心,乃兵家必争之地,本节就从源码角度来分析nsqd,通过本节后可以理清nsqd重要的数据结...
NSQD是 nsq 的主要逻辑部分,请参考官方文档。我们直接看代码。 入口函数 main 函数位于 github.com/nsqio/nsq/apps/nsqd/nsqd.go func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil { ...