NSQ 主要概念及架构设计
NSQ 主要概念及架构设计
NSQ 中有一些重要的组件/概念,概念有producer、consumer、topic、channel,重要的组件有nsqd、nsqlookupd、nsqadmin,这些概念和组件是NSQ的重要部分,理解了这些组件的作用才能够理解NSQ的架构设计。
NSQ 主要概念
topic
topic
是消息发布的逻辑关键词,无论是消息的发布和消费都需要和一个topic
关联,当生产者往一个topic
发布消息时如果当前topic
不存在则会自动创建该topic
。channel
这个
channel
的实现其实就是Go
里面的channel
,一个topic
下可以有多个channel
,当一个消息发送到该topic
时,所有该topic
下的channel
都会得到该消息 ,供消费者订阅消费。producer
producer
是消息的生产者、发布者,producer
可以通过HTTP API
或者TCP client
两种方式来将消息发送到nsqd
的某个topic
里面,当发送的topic
不存在时会在该nsqd
里面创建该topic
。consumer
consumer
是消息的消费者,consumer
通过TCP
订阅自己要消费的某个topic
下的某个channel
,则之后发布到该channel
的消息都会被该consumer
消费。如果有多个consumer
订阅同一个topic
的同一个channel
则该channel
的消息将会随机发送到订阅该channel
的consumer
。
NSQ 主要组件
nsqd
nsqd
是NSQ
最核心的部分,负责接收、排队、投递消息给客户端,支持HTTP API
和TCP client
,每个nsqd
节点启动时会同时监听一个TCP
端口和一个HTTP
端口来接受和处理请求,nsqd
节点会向nsqlookupd
进行注册,告知其信息(包括地址、其上所保存的topic
和channel
)。每个nsqd
节点都独立运行,不进行通讯共享状态。nsqlookupd
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
<p> <span style="font-size:14px;">本专刊是Go开源项目源码分析专栏,共 17 篇文章,挑选了Go 开源界知名的 4 个开源项目gnet(高效的网络库)、gin(知名的Go微型web框架)、fasthttp(高性能web框架)、nsq(Go消息队列)来对它们进行源码分析,分析它们的设计思想和代码实现。每个项目的讲解都是由浅入深,由设计思想的剖析到源码实现的分析,更易于读者理解。</span> </p> <p> <br /> </p> <h2> <b><span style="font-size:16px;line-height:1;">购买须知:</span></b> </h2> <span style="font-size:14px;">订阅成功后,用户即可通过牛客网 PC 端、App 端享有永久阅读的权限;</span><br /> <span style="font-size:14px;">牛客专刊为虚拟内容服务,订阅成功后概不退款;</span><br /> <span style="font-size:14px;line-height:1;">在专刊阅</span><span style="font-size:14px;line-height:1;">读过程中,如有任何问题,可在文章评论区底部留言,或添加牛客导师,加入读者交流群;</span><br /> <span style="font-size:14px;">想成为牛客作者,请邮件联系yinxiaoxiao@nowcoder.com,邮件主题【牛客作者+写作方向】,并附上个人简历一份及近期作品一份;</span><br /> <p> <span style="font-size:14px;">牛客专刊版权归本平台所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布 / 发表,违者将依法追究责任</span><span style="font-size:14px;">。</span> </p> <p> <br /> </p>