避免 pynsq 中的消息超时
Posted
技术标签:
【中文标题】避免 pynsq 中的消息超时【英文标题】:Avoiding message timeout in pynsq 【发布时间】:2018-06-30 07:08:33 【问题描述】:例如,我通过以下方式向 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】:您应该在处理消息之前致电message.touch()
,以便告诉 NSQD 您需要更多时间来处理消息。
NSQD 中有两个参数控制消息超时:max-msg-timeout and msg-timeout。
Matt Reiferson 解释了他们的工作原理here。
【讨论】:
以上是关于避免 pynsq 中的消息超时的主要内容,如果未能解决你的问题,请参考以下文章