nsq 消息队列-01基础介绍

345 阅读2分钟

介绍

nsq 是一个高可用,水平伸缩,易拓展的消息队列
特点如下:

  • 支持可实现高可用性并消除 SPOF(单点故障) 的拓扑
  • 解决对更强大的消息传递保证的需求
  • 限制单个进程的内存占用(通过将一些消息持久化到磁盘)
  • 提供直接的升级路径(下载二进制或者编译源码)
  • 提高效率(易用的api)

组件

nsqd是接收消息、排队消息并将消息传递给客户端的守护进程。
nsqlookupd是管理拓扑信息的守护进程。客户端查询nsqlookupd以发现 nsqd特定主题的生产者,nsqd节点广播主题和频道信息。
nsqadmin是一个 Web UI,用于实时查看聚合的集群统计信息并执行各种管理任务。

算了那些抄文档的东西就不写了,直接看数据是如何在整个框架中流动吧 我们以 pub/sub 模型为例

1 启动nsqlookupd, 这玩意会监听 nsqd的状态,以及管理topic channels这些。
2 启动 nsqd 节点信息会注册到nsqlookupd.
3 nsqadmin 可启动可不启动 4 生产者 连接到 nsqd, publish 消息 消息经过特定格式编码成二进制,发通过TCP发送到nsqd 5 在 nsqd内部,对于每个tcp连接,启动一个协程处理客户端消息 ,消息解码后根据不同的命令,调用不同的处理方法,pub的处理方法是将消息写到该topic下的 disk-queue,然后返回消息给客户端
6 disk-queue 的 ioLoop方法会一直做读写操作

7 consumer 连接到nsqlookupd,向其订阅相应的 topic channel, nsqlookupd 收到 sub命令,调用SUB方法,把对应的client添加到channel结构下,每个连接会起一个messagePump协程,拿到subchannel,再从disk-queue收到消息,发送给client.

疑问: 1 subChannel 怎么确定就是client订阅的那个呢?
2 messagePump方法做了什么?
3 nsqlookupd 如何管理nsq节点?
4 disk-queue 的 ioLoop方法做了什么

刚看代码没多就,还是有挺多疑问的地方,后面再研究研究更新吧。