大家好,之前在简书发表文章来这,最近发了一次文章发现知乎平台可以让技术人获得想要的成就感,可以让写文章的动力更足,所以陆续将文章都转移过来,入住知乎。

Go语言是一个看起来平淡无奇,但真正用起来是让人爱不释手的一门语言。

一直也想用Go来写点什么项目,但github上趴了很久最终也没下决心去实际行动,也是碰巧有一天看到一篇文章介绍NSQ实时消息队列的源码分析,让我有了也要去深入学习的冲动。。。学习大神的代码思想和整体架构

话说我一直用着世界上最好的语言PHP,总想深入做个源码分析,每次都是刚开始就止步于此。。。也想去看看kafka的源码,但是,但可是它使用Scala语言编写,想看它还得重头来过。

当当当。。。重点来了

当Go出现让一切变得特别不一样哈,咱也可以做点高大上的事情了 嚯嚯,难道我这是跪久了,是Golang让我也能站起来,翻身农奴把歌唱赶脚。。。

下面讲解完全是开发角度,如果想试一下NSQ产品,可以到这里 按照教程一步一步走,亲测有效: https://blog.csdn.net/sd653159/article/details/83624661

废话不说了开篇先走一遍流程 NSQ基本介绍

基本介绍

NSQ是由知名短连接服务商bitly用Go语言开发的实时消息处理系统,具有高性能、高可靠、无视单点故障等优点,是一个非常不错的新兴的消息队列解决方案。NSQ现在发展很快,已有多种语言的客户端,GO和Python版本的客户端是官方出的,比较给力。

目前NSQ是一个成熟的方案,已在大规模生产环境下应用的产品。

开始进入状态

注意事项

1. 概述

NSQ提供了三大组件以及一些工具,三大组件为:

2. 准备工作

3. 源码目录结构

后面会对相关目录逐一展开讲解,主要分析目录:apps、nsqadmin、nsqd、nsqlookupd

  • apps目录:应用程序入口相关文件
  • 后续重点先展开介绍app/nsqd目录来带动其他包
  • nsqd是一个守护进程,负责接收、排队、投递消息给客户端,并不保证消息的严格顺序,nsqd默认监听一个tcp端口(4150),一个http端口(4151)以及一个可选端口https。。。(这章先带动一下即将要展开分析的nsqd介绍)

有兴趣的各位现在就可以手动利用源码文件来编译一下nsqd,下面我逐一跑跑一次.按照我步骤来绝对能跑起来,我也会把遇到的坑贴出来(其实不是坑,是我学艺不精,对go还是半知半解)。

编译为二进制文件在运行main

直接使用go run运行

或者使用go run ./,这样就不用使用 go run main.go options.go

晓亮 - 期待您的关注

嚯嚯,终于迈出了第一步,开遍和准备工作搞定了,相信跟着我的脚步您现在可以把nsqd编译出来并已运行。

后续文章将正式开始nsqd源码分析(其实网上有很多源码分析,我这个系列重点是分析每行代码并添加上注释,来看看大牛的代码思想和整体架构)由于本人技术有限,我基本上是手动测试源码,看牛人文章,分析、摘录、集合已分析出来的思路,采用大白话方式书写。。。望各位看官见谅