Nacos兼容gRPC出现问题
本文由ChatGPT生成文章摘要
文章讨论了Nacos在作为注册中心和配置中心时的使用情况。作者指出在gPRC服务发现方面,无论是Nacos的2.x版本还是1.x版本都不支持。但在配置中心方面,获取配置和更新配置都没有问题。作者列出了自己的环境包括java17、springboot2.6.x、springcloud2021.0.x、grpc-spring-boot-starter3.0。在测试过程中,作者遇到了一个问题,即在调用gRPC客户端的xxxBlockingStub时出现空指针异常。作者测试了Nacos注册中心,发现Nacos2.0新增了用于gRPC通信的端口,并通过调整配置成功解决了问题。此外,在Nacos控制台中观察到serviceB中并没有gRPC服务的元数据。作者还提到了关于gRPC整合springboot的依赖版本问题,并通过调整依赖版本成功解决了问题。通过测试发现,调整依赖版本后,serviceB的gRPC服务已经成功注册。

问题描述

Nacos作为注册中心:gPRC服务发现是不支持的,不管是2.x还是1.x 都没用。

Nacos作为配置中心:获取配置和更新配置都没有问题。

我的环境

  • java17
  • springboot2.6.x
  • springcloud2021.0.x
  • grpc-spring-boot-starter3.0

测试过程

场景:在用serviceA通过gRPC组件调用serviceB,一直出现的是serviceA中调用gRPC客户端的xxxBlockingStub 空指针。

测试Nacos注册中心

这里通过反复查看官方文档找到一些可用的信息:
Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。

端口 与主端口的偏移量 描述
9848 1000 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
9849 1001 服务端gRPC请求服务端端口,用于服务间同步等
Nacos2.0增加了9848,9849端口来进行GRPC通信,这两个端口在Nacos2.0内部是通过8848+1000以及8848+1001这种偏移量方式计算出来的,不需要用户额外在配置文件中配置。

我的Nacos是开启了这两个端口的,但从官网给出的图,我好像大致能感受到两个服务间是如何使用Nacos进行gRPC通信的了。以下是个人看法:在我的场景中,serviceA在nacos中查找gPRC服务的时候会去注册中心监听gRPC客户端请求的端口查找已经注册的gRPC服务(可能是个表,也可能是个集合),如果找到,就通过对应gRPC服务注册的地址去指定服务(serviceB)调用gRPC服务,这些gRPC服务从哪来,那应该就是在注册服务的使用,在监听gRPC注册的端口对这些服务进行记录了。

测试服务端gPRC是否注册

在Nacos控制台serviceB中并没有gPRC服务的元数据。

测试依赖兼容性

关于gRPC整合springboot的依赖并不是官方给的,这里我从grpc-spring这里找到了关于gRPC整合spring系列各个版本之间依赖的对应关系,通过调整依赖版本,将grpc-spring-boot-starter3.0换为grpc-spring-boot-starter2.14成功解决问题。

在控制台查看到serviceB的gRPC服务

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇