避免pynsq中的消息超时

时间:2018-01-21 15:11:50

标签: python nsq pynsq

例如,我通过发出以下命令向NSQ发送消息:

curl -d "test2" http://127.0.0.1:4151/pub?topic=hello

我发现如果消息处理程序执行时间超过100秒,它将抛出,此消息将超时。

ERROR:nsq.client:[127.0.0.1:4150:hello:channel]      
ERROR: ConnectionClosedError('Stream is closed',)
WARNING:nsq.reader:[127.0.0.1:4150:hello:channel] connection closed

如何避免此超时?

这是我的代码:

def process_message(message):
    print(message)
    time.sleep(100)
    message.touch()
    return True

r_check = nsq.Reader(
     message_handler=process_message,
    nsqd_tcp_addresses=['127.0.0.1:4150'],
    topic='hello', channel='channel',
    lookupd_poll_interval=15,
    lookupd_connect_timeout=100000,
    lookupd_request_timeout=100000,
    max_tries=10
)

nsq.run()

感谢。

1 个答案:

答案 0 :(得分:0)

在处理消息之前,您应该致电message.touch(),以告知NSQD您需要更多时间来处理消息。

NSQD中有两个参数可控制消息超时:max-msg-timeout and msg-timeout

马特·里弗森(Matt Reiferson)解释了here的工作原理。