天天看点

聊一聊声明式接口调用与Nacos的结合使用

聊一聊声明式接口调用与Nacos的结合使用

对于公司内部的 API 接口,在引入注册中心之后,免不了会用上服务发现这个东西。

现在比较流行的接口调用方式应该是基于声明式接口的调用,它使得开发变得更加简化和快捷。

.NET 在声明式接口调用这一块,有 WebApiClient 和 Refit 可以选择。

前段时间有个群友问老黄,有没有 WebApiClient 和 Nacos 集成的例子。

找了一圈,也确实没有发现,所以只好自己动手了。

本文就以 WebApiClient 为例,简单介绍一下它和 Nacos 的服务发现结合使用。

基于 .NET 6 创建一个 minimal api。

这个应用是 provider,在启动的时候,会向 Nacos 进行注册,可以被其他应用发现并调用。

聊一聊声明式接口调用与Nacos的结合使用

这里同样是创建一个 .NET 6 的 WEB API 项目来演示,这里需要引入一个 nuget 包。

首先来声明一下这个接口。

这里其实要注意的就是 <code>HttpHost</code> 这个特性,正常情况下,配置的是具体的域名或者是IP地址。

我们如果需要通过 nacos 去发现这个接口对应的真实地址的话,只需要配置它的服务名就好了。

后面是要进行接口的注册,让这个 ISampleApi 可以动起来。

运行并访问 <code>localhost:9992</code> 就可以看到效果了

聊一聊声明式接口调用与Nacos的结合使用

从上面的日志看,它请求的是 <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 的配置。

大致如下图:

聊一聊声明式接口调用与Nacos的结合使用

声明式的接口调用,对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

聊一聊声明式接口调用与Nacos的结合使用

如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!

作者:Catcher Wong ( 黄文清 )

来源:http://catcher1994.cnblogs.com/

声明:

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果您发现博客中出现了错误,或者有更好的建议、想法,请及时与我联系!!如果想找我私下交流,可以私信或者加我微信。

继续阅读