NSQ-zhaowei
一、常见组件和概念
组件/概念
|
说明
|
---|---|
nsqd | 消息接收、队列、分发,可以配置在有nsqlookupd的nsq集群中,更多详见 |
nsqlookupd | 用于发现nsq集群中指定topic的nsqd们,更多详见 |
nsqadmin | 网页界面,用于管理nsq,可以看到nsq的统计数据,包括队列积压数据,也可以新增/删除/暂停/清空topic和channel,更多详见 |
nsq_to_http | 用于将指定topic下指定channel的消息,使用发送http请求的方式分发到指定url,更多详见 |
nsq_to_nsq | 用于将指定topic下指定channel的消息分发到指定nsqd的指定topic,更多详见 |
topic | 一个topic相当于一个消息队列 |
channel | 一个topic可以有多个channel,每个channel都会消费每一条发给topic的消息 |
二、常见端口说明:
端口
|
组件
|
说明
|
---|---|---|
4150 | nsqd | 一般用于发送消息到nsq队列(tcp连接),更多详见,如果使用的nsq是多台机器集群,不推荐在消费nsq消息时使用此配置,一是因为需要将所有nsqd地址都列出来,二是集群nsqd有调整时也需要变更此配置 |
4151 | nsqd | 一般用于发送消息到nsq队列(http协议),更多详见,请求示例:curl -X POST 'http://nsqd_ip:4151/pub?topic=your_topic' -d 'your_message' |
4160 | nsqlookupd | 一般用不到 |
4161 | nsqlookupd | 一般用于发现nsq集群中指定topic的生产nsqd列表,更多详见,如果使用的nsq是多台机器集群,推荐在消费nsq消息时使用此配置,一般代码会自动与集群中的所有nsqd建立连接,当然也可以使用多个nsqd配置(不推荐) |
4171 | nsqadmin | nsq管理界面,更多详见 |
三、常见参数说明:
参数
|
说明
|
---|---|
topic | 相当于消息队列名 |
channel | 相当于消息队列子队列名,一个topic可以有多个channel,每个channel都会消费每一条发给topic的消息 |
max_in_flight | 消费消息时,最大并发消费数配置,一般对于nsq集群而言,建议配置成nsqd数量的倍数,比如nsqd数量为3,而此参数配置为2,则有可能其中一个nsqd的消息永远都不被消费 |
四、nsqadmin界面常见参数说明:
参数
|
说明
|
---|---|
参数
|
说明
|
Depth | 消息积压数,在一个topic下新建一个channel后,新推送给该topic的所有消息都会发送到该channel,如果没有消费或消费速度小于生产速度,会产生积压 |
Memory + Disk | 内存+磁盘消息积压数,nsq消息会优先放入内存中,当消息数超过mem-queue-size值(nsqd配置,一般建议此值不要设太大,以防内存使用超标)后,消息会写入磁盘 |
In-Flight | 当前分发(消费)中的消息数 |
Deferred | 重新入队或明确要延迟分发而未分发的消息数 |
Ready Count | 当前连接最大并发消费数据,值为0时不会消费新的数据,最大值由消费配置的max_in_flight决定,一般对于nsq集群而言,消费使用nsqlookupd地址,max_in_flight数会被均匀地分到每个与nsqd建立的连接上,例如nsq集群有2个nsqd,与每个nsqd都建立一个连接,max_in_flight为20,则每个连接的最大Ready Count为10 |
五、使用经验
1、消息处理失败或超时(可配置超时时间)时会重新入队(由配置的消息最大重试次数决定),所以要保证代码的幂等性,且消费处理时间不宜太久,如果消费处理时间超过设置的超时时间且没有办法缩短,建议采用异步处理的方式,避免消息因处理超时而再次入队