pynsq使用

514次阅读
没有评论

最近在研究 nsqd 分布式消息队列,我想使用 pynsq 对 nsqd 进行消息插入和获取,使用过程中遇到了一些小坑,所以把这篇文章写出来避免大家入坑。

首先你要确保你已经在服务器上面运行了 nsqd 和 nsqlookupd

安装 pynsq

pip install pynsq

消费者

import nsq

def handler(message):

print(message.body)

returnTrue

r = nsq.Reader(message_handler=handler,

#nsqd_tcp_addresses=['192.168.100.192:4151'],

lookupd_http_addresses=['http://192.168.100.192:4161'],

topic='duduniao', channel='duduniao', lookupd_poll_interval=15)

nsq.run()
使用过程中你可能会遇到如下错误
WARNING:tornado.general:Connect error on fd 712: [Errno 11001] getaddrinfo failed
WARNING:tornado.general:Connect error on fd 712: [Errno 11001] getaddrinfo failed
WARNING:nsq.reader:[node2:4150:duduniao:duduniao] connection closed
WARNING:nsq.reader:[node2:4180:duduniao:duduniao] connection closed
出现这个错误的原因是因为无法找到 nsqd 的主机解析,你可以使用 DNS 或添加 Hosts 记录解决这个问题。
pynsq 源码中获取 nsqd 主机连接地址使用的是 broadcast_address, 而 broadcast_address 默认是主机名。
pynsq 使用
请求 nsqlookupd api 接口可以发现 node 节点 broadcast_address 是主机名。

pynsq 使用

nsqd 启动选项中也有说明

pynsq 使用

--broadcast-address  这个地址是注册到 lookupd 的地址默认是主机名 

另一种解决方法就是启动 nsqd 时指定这个参数

更改启动脚本

pynsq 使用

nsqd --broadcast-address=192.168.100.192

这个时候在 nsqlookupd 上面看 node 节点的注册地址就是 ip 了

pynsq 使用

这样即使我们不写 hosts 记录或 dns 解析也能成功与 nsqd 服务器通信了~。

 

正文完
 
ddn
版权声明:本站原创文章,由 ddn 2019-05-16发表,共计1049字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。