这是我参与「第五届青训营 」笔记创作活动的第9天,今天我学习了如何使用Kitex框架注册一个Nacos服务。
Nacos的端口占用
Nacos默认http端口是8848,在2.0版本中增加了grpc端口9848(+1000)和9849(+1001)端口,如果这三个端口被占用任意一个都会导致服务无法启动,这个时候可以尝试以下指令,第一行指令可以确认端口是否被占用,如果被占用关闭那个服务就行,如果没有被占用但是Nacos还剩无法启动可以尝试输入命令2调整动态端口号并重新启动电脑。
netstat -ano | findstr 9849
netsh int ipv4 set dynamicport tcp start=10000 num=11000
Nacos默认选择第一个网卡的ip地址
今天发现kitex服务注册上Nacos的ip地址不对,是一张我并不使用的网卡,查询了一些资料显示,nacos会默认选择网卡的第一张,所以如果发现ip不对的话,可以在建立服务时,将ip地址配置一下,如果服务和nacos在同一台机器,可以使用127.0.0.1。
svr := UserRelationPb.NewServer(
new(UserRelationImpl),
server.WithServiceAddr(&net.TCPAddr{Port: 50052, IP: net.IPv4(127, 0, 0, 1)}),
server.WithServerBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: "userRelation"}),
server.WithRegistry(registry.NewNacosRegistry(nacos.Cli)),
)
docker或者wsl中的服务连接Nacos
还在摸索,之前的尝试都失败了,应该是挺容易的,但是连接一直出问题
Kitex在Windows下的奇奇怪怪报错
奇奇怪怪的Error,至今还没有解决,实在过于玄学
[Error] KITEX: processing request error, remoteService=, remoteAddr=127.0.0.1:19195, error=invalid payload (first4Bytes=0x50524920, second4Bytes
=0x2a204854)
这里我使用postman的grpc调用了kitex服务,这个错误是代表http1.1的头,与kitex提供的grpc服务有一些不兼容,这些不兼容在linux中似乎不会发生,为什么这样依然不太清楚。
[Error] KITEX: processing request error, remoteService=, remoteAddr=127.0.0.1:17661, error=default codec read failed: read tcp 127.0.0.1:50051->
127.0.0.1:17661: i/o timeout
这里是调用的结束时候,报错但是不影响函数的运行,非常的奇怪,也只在windows上有遇到这种情况,linux中并不会这样。