
nsq
文章平均质量分 84
图图tt2
这个作者很懒,什么都没留下…
展开
-
消息订阅与推送
写在前面:消息订阅与推送都通过nsq的tcp服务实现。关于消息的推送最重要的是两个文件:nsqd/protocol_v2.go和nsqd/client_v2.go。当一个客户端与nsqd进程建立了一个tcp连接时,会调用protocolV2.IOLoop方法,并新建一个clientV2结构体对象。IOLoop方法会启动一个协程执行messagePump方法。并且对于每一个tcp连接,都会有两个协程:运行IOLoop的协程用于接收客户端的请求;运行messagePump的负责处理数据,把数据给客户端cli原创 2020-06-02 15:12:18 · 1535 阅读 · 0 评论 -
新建channel
url path: /channel/create入口函数:doCreateChannel1、getExistingTopicFromQuery:解析出请求参数中的topicName和channelName,然后检查topicName对应的topic对象是否存在,不存在则报错并返回,存在则返回请求参数、topic对象指针、channelName、error2、GetChannel:主要逻辑在getOrCreateChannel中2.1、getOrCreateChannel:如果channelName原创 2020-05-18 16:51:50 · 401 阅读 · 0 评论 -
清空、暂停topic
清空、暂停topicurl path: /topic/empty入口函数:doEmptyTopic清空topic1、先校验topicName是否合法(这一步有点多余,因为创建topic的时候已经检查过了,不合法topicName没法创建成功),然后根据topicName获取topic对象2、Empty(): 删除从已读文件到已写文件序号之间的所有文件(每次读取完成的文件会被删除,所以不能从0开始删除),然后初始化标记,不赘述了,然后删除metadata fileurl path: /topic/pause入原创 2020-05-18 16:49:42 · 650 阅读 · 0 评论 -
nsq删除topic
url path: /topic/delete入口函数:doDeleteTopic->DeleteExistingTopic一、根据topicName获取Topic对象指针,注意这里只需要用读锁控制并发,对应topic不存在直接报错并返回二、topic.Delete(),需要注意的是在关闭topic之前先删除channel和topic,这样做的目的是不会有任何消息未被处理,同时所有写入操作都将出错,并且不会创建新的topic来强制排序内部调用了exit(deleted bool)函数,入参为t原创 2020-05-14 15:49:09 · 1276 阅读 · 0 评论 -
nsq详解
nsq详解写在前面新建Topicurl path: /topic/create实现入口函数:doCreateTopic->getTopicFromQuery一、解析请求参数,获取topic名称二、通过IsValidTopicName判断topicName是否有效(匹配0~9、英文字母大小写、下划线,且ephemeral只能出现一次)三、然后就是执行GetTopic,开始具体创建topic操作写在前面NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。NSQ原创 2020-05-11 17:20:29 · 1143 阅读 · 0 评论