随笔分类 -  消息队列

摘要:延时消息,顾名思义就是发送消息后延迟多少时间接收。 使用场景举例,例如用户买票后,出票后要给用户发一个反现金红包,但是出票一般是异步出票,所以我们可以设定一个最大时间,例如30分钟。在买票30分钟后,根据出票结果决定是否发反现金红包。此时就可以使用延时队列,在用户购票的时候发送一个30分钟的延时消息 阅读全文
posted @ 2022-02-16 12:08 雨落寒沙 阅读(185) 评论(1) 推荐(0)
摘要:前面几章中可以看到,nsq进行消息消费的时候主要使用tcpServer去处理,也就是如下的方法 func (p *tcpServer) Handle(clientConn net.Conn) { p.ctx.nsqd.logf(LOG_INFO, "TCP: new client(%s)", cli 阅读全文
posted @ 2020-06-04 16:56 雨落寒沙 阅读(1583) 评论(0) 推荐(0)
摘要:本节主要来探究nsq如何监听生产者的消息。 通过上节我们得知nsq接收消息发送主要是靠下面这个http处理器 当然了也可以通过原生tcp的方式进行消息发送,由于具体处理流程类似,所以文末会有提到。 router.Handle("POST", "/pub", http_api.Decorate(s.d 阅读全文
posted @ 2020-06-03 17:11 雨落寒沙 阅读(951) 评论(0) 推荐(0)
摘要:在上节中已经成功的解析了系统配置并创建了核心结构体nsqd,本文主要从nsqd的main方法入手 在main方法中,主要会创建一系列的tcp监听器,以及轮询检测。 func (n *NSQD) Main() { var err error ctx := &context{n} //检车是否能开启tc 阅读全文
posted @ 2020-06-03 13:29 雨落寒沙 阅读(482) 评论(0) 推荐(0)
摘要:启动加载配置 直接找到nsqd中main包下的start方法,即下图中代码 func (p *program) Start() error { //返回options结构体 包含了一些默认信息 //例如id,自身监听的tcp端口和http端口等,还包括了一系列阈值 //这儿注意id使用hostnam 阅读全文
posted @ 2020-06-01 18:53 雨落寒沙 阅读(462) 评论(0) 推荐(0)
摘要:通过查看nsqd.go的主应用入口,会发现其使用了svc来管理应用的生命周期。 func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil { log.Fata 阅读全文
posted @ 2020-05-28 17:14 雨落寒沙 阅读(354) 评论(0) 推荐(0)
摘要:之前知乎上在go有关学习经验中看到有人推荐可以通过学习NSQ来学习go语言,并且还能顺道了解消息队列的设计,可谓一举两得。所以去了解了下NSQ,发现截止本文编写时间,NSQ在github上已经累积了17.7K 的star,发现比大家经常用到的kafka,rabbitmq的star还要高。汗,看来自己 阅读全文
posted @ 2020-05-21 18:11 雨落寒沙 阅读(829) 评论(0) 推荐(0)