聊一聊声明式接口调用与Nacos的结合使用
对于公司内部的 API 接口,在引入注册中心之后,免不了会用上服务发现这个东西。
现在比较流行的接口调用方式应该是基于声明式接口的调用,它使得开发变得更加简化和快捷。
.NET 在声明式接口调用这一块,有 WebApiClient 和 Refit 可以选择。
前段时间有个群友问老黄,有没有 WebApiClient 和 Nacos 集成的例子。
找了一圈,也确实没有发现,所以只好自己动手了。
本文就以 WebApiClient 为例,简单介绍一下它和 Nacos 的服务发现结合使用。
基于 .NET 6 创建一个 minimal api。
这个应用是 provider,在启动的时候,会向 Nacos 进行注册,可以被其他应用发现并调用。
这里同样是创建一个 .NET 6 的 WEB API 项目来演示,这里需要引入一个 nuget 包。
首先来声明一下这个接口。
这里其实要注意的就是 <code>HttpHost</code> 这个特性,正常情况下,配置的是具体的域名或者是IP地址。
我们如果需要通过 nacos 去发现这个接口对应的真实地址的话,只需要配置它的服务名就好了。
后面是要进行接口的注册,让这个 ISampleApi 可以动起来。
运行并访问 <code>localhost:9992</code> 就可以看到效果了
从上面的日志看,它请求的是 <code>http://sample/api/get</code>,实际上是 <code>http://192.168.100.220:9991/api/get</code>,刚好这个地址是注册到 nacos 上面的,也就是服务发现是生效了。
下面来看看 WebApiClientCore.Extensions.Nacos 这个包做了什么。
本质上是加了一个 HttpClientHandler,这个 handler 依赖于 sdk 提供的 INacosNamingService。
在 handler 里面重写了 SendAsync 方法,替换了 HttpRequestMessage 的 RequestUri,也就是把服务名换成了真正的服务地址。
具体查找替换逻辑如下:
这里是先查询一个健康的实例,如果存在,才会进行组装,这里有一个关于 HTTPS 的约定,也就是元数据里面是否有 Secure 的配置。
大致如下图:
声明式的接口调用,对Http接口请求,还是很方便的
感兴趣的话,欢迎您的加入,一起开发完善。
nacos-sdk-csharp 的地址 :https://github.com/nacos-group/nacos-sdk-csharp
nacos-csharp-extensions 的地址: https://github.com/catcherwong/nacos-csharp-extensions
本文示例代码的地址 :https://github.com/catcherwong-archive/2021/tree/main/WebApiClientCoreWithNacos
如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!
作者:Catcher Wong ( 黄文清 )
来源:http://catcher1994.cnblogs.com/
声明:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果您发现博客中出现了错误,或者有更好的建议、想法,请及时与我联系!!如果想找我私下交流,可以私信或者加我微信。