随笔分类 - go
摘要:前面几章中可以看到,nsq进行消息消费的时候主要使用tcpServer去处理,也就是如下的方法 func (p *tcpServer) Handle(clientConn net.Conn) { p.ctx.nsqd.logf(LOG_INFO, "TCP: new client(%s)", cli
阅读全文
摘要:本节主要来探究nsq如何监听生产者的消息。 通过上节我们得知nsq接收消息发送主要是靠下面这个http处理器 当然了也可以通过原生tcp的方式进行消息发送,由于具体处理流程类似,所以文末会有提到。 router.Handle("POST", "/pub", http_api.Decorate(s.d
阅读全文
摘要:在上节中已经成功的解析了系统配置并创建了核心结构体nsqd,本文主要从nsqd的main方法入手 在main方法中,主要会创建一系列的tcp监听器,以及轮询检测。 func (n *NSQD) Main() { var err error ctx := &context{n} //检车是否能开启tc
阅读全文
摘要:启动加载配置 直接找到nsqd中main包下的start方法,即下图中代码 func (p *program) Start() error { //返回options结构体 包含了一些默认信息 //例如id,自身监听的tcp端口和http端口等,还包括了一系列阈值 //这儿注意id使用hostnam
阅读全文
摘要:通过查看nsqd.go的主应用入口,会发现其使用了svc来管理应用的生命周期。 func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil { log.Fata
阅读全文
摘要:之前知乎上在go有关学习经验中看到有人推荐可以通过学习NSQ来学习go语言,并且还能顺道了解消息队列的设计,可谓一举两得。所以去了解了下NSQ,发现截止本文编写时间,NSQ在github上已经累积了17.7K 的star,发现比大家经常用到的kafka,rabbitmq的star还要高。汗,看来自己
阅读全文
摘要:记得之前有看到过说学习一门新语言比较好的方式是用新语言重写一遍用现有语言写出的功能,既然web项目做的比较多所以就先写下web api 先创建项目, 并添加部分框架依赖,即go.mod内容 。 gin主要用来做路由分发控制,gorm主要做orm映射 module web_application go
阅读全文
摘要:一般可以用异或的方式不借助第三方值来交换数字,类似如下 func main() { swaps := func(k int, b int) (x, y int) { k ^= b b ^= k k ^= b return k, b } x,y :=swaps(5,6) fmt.Printf("结果为
阅读全文
摘要:最近接触go语言 发现和java的方法调用有些类似但又有自己的注意点 go的包我理解为则是隔离的最小模块 先在src目录下创建main.go文件 package为main,然后在src下创建module1目录 ,在module1目录下创建两个文件packageStrut.go,packageStru
阅读全文

浙公网安备 33010602011771号