nsq.reader错误connection closed

2021年4月02日 11:13

描述
 
学习官网例子时,会碰到的一个小错误. 过程描述:
 
1. 按照nsq官网,搭建一个nsq小集群
 
2.使用python客户端pynsq编写测试客户端
 
3. 如果上面过程在一台机子上完成,不会有问题
 
4. 如果客户端与nsq不在一台机子上,会出现下面错误
 

错误内容

 
WARNING:nsq.reader:[localhost.localdomain:4150:test:abc] connection closed
 
 

python消费客户端

 
import nsq

def handler(message):
    print(message, message.body)
    return True


r = nsq.Reader(message_handler=handler,
               lookupd_http_addresses=['http://192.168.120.101:4161'],
               topic='test', channel='abc', lookupd_poll_interval=15)

nsq.run()
 

python生产客户端

import nsq
import tornado.ioloop
import time

def pub_message():
    writer.pub('test', str(time.strftime('%H:%M:%S')).encode("utf-8"), finish_pub)

def finish_pub(conn, data):
    print(data)

writer = nsq.Writer(['127.0.0.1:4150'])

tornado.ioloop.PeriodicCallback(pub_message, 1000).start()
nsq.run()
 

正确方法

 
启动nsqd时,指定nsqd的广播ip,也就是其它机子可以访问的ip,而非默认的localhost。例如:"-broadcast-address 192.168.120.101"
 
 

Tags: nsq
评论(0) 阅读(734)

golang的import原理

2021年3月28日 12:20

描述

 
import是个很重要的东西,golang是怎么import的
 
1. import查找包的顺序?
 
2. import的是什么,包还是路径?
 
3. 自己项目中怎么import
 

golang的包管理历史

 
第一阶段 早期golang,import是直接查找$GOPATH/scr,$GOROOT/scr目录
 
第二阶段 v1.5开始采用vendor模式,每个项目有一个vendor目录,存放依赖包
 
第三阶段 v1.12开始增加了go mod用于管理依赖包
 
部分学习资料比较早,介绍的还是第一、二阶段,从我们直接学习go mod就可以
 

go mod的import顺序

 
1. 在当前项目目录查找module。找到module后,用module_name加相对路径导入。import "module_name/路径xxx..."
 
2. 未找到,则逐级查找上级目录的go.mod
 
3. 未找到,则再找$GOPATH,$GOROOT
 

module和package是怎么回事?

 
go只有package,并没有module的概念, go mod才引入,
 
module可以理解为python的包或者java的jar包。package的集合.
 

import的是什么?

 
import的是目录, 由于一个目录只能有一个package, 实际也是import包
 
例如 import "gin-template/db/api"
 
1. 如果目录名与package名一致。 api.xxx方式使用包
 
2.如果目录名与pakcage名不一致(目录名api,包名abc)。 abc.xxx方式使用
 
3.总结:import的是目录下的package。引用方式是, 包名.xxx
 
 

自己项目中怎么引用

 
import module_name/包的目录路径
 
 

与其它语言比较

 
python中import的是py文件/py文件中的属性
 
java中import的是java文件中的class
 
golang中import的是目录下的package
 
 

评论(8) 阅读(925)