nsq
遥不可及梦
这个作者很懒,什么都没留下…
展开
-
nsq TCPServer(一)
TCPServerfunc TCPServer(listener net.Listener, handler TCPHandler, logf lg.AppLogFunc) error { //listener是在nsqd New的时候创建的 logf(lg.INFO, "TCP: listening on %s", listener.Addr()) var wg sync.WaitGroup for { clientConn, err := listener.Accept() if原创 2020-07-22 12:06:16 · 204 阅读 · 0 评论 -
nsqd New函数
func New(opts *Options) (*NSQD, error) { var err error dataPath := opts.DataPath //从datapath读路径 if opts.DataPath == "" { cwd, _ := os.Getwd()//没有配置默认在当前目录 dataPath = cwd } if opts.Logger == nil { opts.Logger = log.New(os.Stderr, opts.LogPrefix,原创 2020-07-21 21:40:44 · 132 阅读 · 0 评论 -
nsqd Main函数
源码func (n *NSQD) Main() error { ctx := &context{n} exitCh := make(chan error)//退出chan 无缓存的 var once sync.Once exitFunc := func(err error) {//定义退出函数 once.Do(func() {//once 保证只执行一次 if err != nil { n.logf(LOG_FATAL, "%s", err) } exitC原创 2020-07-21 20:48:51 · 147 阅读 · 0 评论 -
nsq Message定义
源码const ( MsgIDLength = 16 minValidMsgLength = MsgIDLength + 8 + 2 // Timestamp + Attempts)type MessageID [MsgIDLength]bytetype Message struct { ID MessageID//长度为16的byte数组 Body []byte //消息体 Timestamp int64 //msg生成的时间戳 Attempt原创 2020-07-21 17:25:52 · 323 阅读 · 0 评论 -
nsqd启动加载历史数据LoadMetadata
func (n *NSQD) LoadMetadata() error { atomic.StoreInt32(&n.isLoading, 1)//函数开始 原子写入n.isLoading为1 defer atomic.StoreInt32(&n.isLoading, 0)//函数退出时 原子写入 n.isLoading为0 fn := newMetadataFile(n.getOpts())//从n的opt里面拿出data-path 历史数据的文件目录地址 data, err原创 2020-07-16 21:34:25 · 392 阅读 · 0 评论 -
NSQ简介(一)
NSQ组件nsqd是一个守护进程,负责接收,排队,投递消息给客户端。它可以独立运行,不过通常它是由 nsqlookupd 实例所在集群配置的(它在这能声明 topics 和 channels,以便大家能找到)。它在 2 个 TCP 端口监听,一个给客户端,另一个是 HTTP API。同时,它也能在第三个端口监听 HTTPS。nsqlookupd 是守护进程负责管理拓扑信息。客户端通过查询 nsqlookupd 来发现指定话题(topic)的生产者,并且 nsqd 节点广播话题(topic)和通道(原创 2020-07-16 21:14:03 · 2174 阅读 · 0 评论 -
nsq初始化读取config函数
var cfg config configFile := flagSet.Lookup("config").Value.String()//config的值是toml文件的地址。 if configFile != "" { _, err := toml.DecodeFile(configFile, &cfg)//将toml文件中配置decode成元数据 if err != nil { logFatal("failed to load config file %s - %s", co原创 2020-07-14 21:01:36 · 250 阅读 · 0 评论 -
nsq命令行参数解析
源码PS:这篇的目的是熟悉nsq的配置参数顺带说一下命令行解析func nsqdFlagSet(opts *nsqd.Options) *flag.FlagSet { flagSet := flag.NewFlagSet("nsqd", flag.ExitOnError)//返回一个带有错误处理的 空的flag set。 // basic options flagSet.Bool("version", false, "print version string")//以下类似的函数都是 nam原创 2020-07-14 10:01:31 · 759 阅读 · 0 评论 -
nsqd ID基于MD5的实现
nsqd 源码部分hostname, err := os.Hostname()h := md5.New()io.WriteString(h, hostname) defaultID := int64(crc32.ChecksumIEEE(h.Sum(nil)) % 1024)将hostname进行md5 hash后 通过循环冗余校验后对1024取余,表名id在1024以内唯一。ChecksumIEEE(data []byte) uint32go md5的实现md5是属于hash算法,g原创 2020-07-13 21:24:41 · 205 阅读 · 0 评论