随笔分类 -  消息队列

摘要:延时消息:原理、使用场景与实现方式解析 一、什么是延时消息? 延时消息,顾名思义,是指发送消息后延迟指定时间才被接收方消费的消息类型。它打破了 “消息发送后立即消费” 的常规逻辑,通过时间调度机制,满足业务中 “延迟触发操作” 的需求。 二、延时消息的典型使用场景 以实际业务场景为例,帮助理解延时消 阅读全文
posted @ 2022-02-16 12:08 雨落寒沙 阅读(244) 评论(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 雨落寒沙 阅读(1608) 评论(0) 推荐(0)
摘要:本节主要来探究nsq如何监听生产者的消息。 通过上节我们得知nsq接收消息发送主要是靠下面这个http处理器 当然了也可以通过原生tcp的方式进行消息发送,由于具体处理流程类似,所以文末会有提到。 router.Handle("POST", "/pub", http_api.Decorate(s.d 阅读全文
posted @ 2020-06-03 17:11 雨落寒沙 阅读(982) 评论(0) 推荐(0)
摘要:在上节中已经成功的解析了系统配置并创建了核心结构体nsqd,本文主要从nsqd的main方法入手 在main方法中,主要会创建一系列的tcp监听器,以及轮询检测。 func (n *NSQD) Main() { var err error ctx := &context{n} //检车是否能开启tc 阅读全文
posted @ 2020-06-03 13:29 雨落寒沙 阅读(511) 评论(0) 推荐(0)
摘要:启动加载配置 直接找到nsqd中main包下的start方法,即下图中代码 func (p *program) Start() error { //返回options结构体 包含了一些默认信息 //例如id,自身监听的tcp端口和http端口等,还包括了一系列阈值 //这儿注意id使用hostnam 阅读全文
posted @ 2020-06-01 18:53 雨落寒沙 阅读(491) 评论(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 雨落寒沙 阅读(371) 评论(0) 推荐(0)
摘要:之前知乎上在go有关学习经验中看到有人推荐可以通过学习NSQ来学习go语言,并且还能顺道了解消息队列的设计,可谓一举两得。所以去了解了下NSQ,发现截止本文编写时间,NSQ在github上已经累积了17.7K 的star,发现比大家经常用到的kafka,rabbitmq的star还要高。汗,看来自己 阅读全文
posted @ 2020-05-21 18:11 雨落寒沙 阅读(851) 评论(0) 推荐(0)