nsqlookupd 是管理拓扑信息的守护进程。客户端查询 nsqlookupd 来发现特定主题的 nsqd 生产者,而 nsqd 节点会广播主题和通道信息。
它有两个接口:一个用于 nsqd 广播的 TCP 接口,以及一个用于客户端进行发现和管理操作的 HTTP 接口。
-broadcast-address string
此 lookupd 节点的地址(默认为 OS 主机名)(默认 "yourhost.local")
-config string
配置文件路径
-http-address string
监听 HTTP 客户端的 <addr>:<port>(默认 "0.0.0.0:4161")
-inactive-producer-timeout duration
自上次 ping 以来,生产者在活动列表中保持的时间持续长度(默认 5m0s)
-log-level value
设置日志详细程度:debug、info、warn、error 或 fatal(默认 INFO)
-log-prefix string
日志消息前缀(默认 "[nsqlookupd] ")
-tcp-address string
监听 TCP 客户端的 <addr>:<port>(默认 "0.0.0.0:4160")
-tombstone-lifetime duration
如果注册保持,生产者保持墓碑状态的时间持续长度(默认 45s)
-verbose
[已弃用] 无效果,请使用 --log-level
-version
打印版本字符串
GET /lookup返回一个主题的生产者列表
Params:
topic - 要列出生产者的主题
GET /topics返回所有已知主题的列表
GET /channels返回一个主题的所有已知通道列表
Params:
topic - 要列出通道的主题
GET /nodes返回所有已知的 nsqd 列表
POST /topic/create将一个主题添加到 nsqlookupd 的注册表中
Params:
topic - 主题名称
POST /topic/delete删除一个现有主题
Params:
topic - 要删除的现有主题
POST /channel/create将一个通道添加到 nsqlookupd 的注册表中
Params:
topic - 主题名称
channel - 通道名称
POST /channel/delete删除一个现有主题的现有通道
Params:
topic - 现有主题
channel - 要删除的现有通道
POST /topic/tombstone为一个现有主题的特定生产者添加墓碑。参见 删除和墓碑。
Params:
topic - 现有主题
node - 要添加墓碑的生产者(nsqd)(由 <broadcast_address>:<http_port> 标识)
GET /ping监控端点,应返回 OK
GET /info返回版本信息
当一个主题不再全局生产时,从集群中清除该信息是一个相对简单的操作。假设所有生产消息的应用程序都已关闭,只需使用您的 nsqlookupd 实例的 /delete_topic 端点即可完成操作(内部,它将识别相关的 nsqd 生产者并在这些节点上执行适当的操作)。
对于全局通道删除,过程类似,唯一的区别是您将使用 nsqlookupd 实例的 /delete_channel 端点,并且您需要确保所有订阅该通道的消费者已关闭。
然而,当一个主题不再在子集节点上生产时,情况会变得复杂一些。由于消费者查询 nsqlookupd 并连接到所有生产者的方式,您会遇到竞争条件,即尝试从集群中移除信息,而消费者发现该节点并重新连接(从而推送更新,表明该节点上仍生产该主题)。在这些情况下,解决方案是使用“墓碑”。在 nsqlookupd 上下文中,墓碑是特定于生产者的,并持续可配置的 --tombstone-lifetime 时间。在此窗口期间,该生产者不会在 /lookup 查询中列出,从而允许节点删除主题,将该信息传播到 nsqlookupd(然后移除墓碑生产者),并防止任何消费者重新发现该节点。