HttpClientFactory与Steeltoe结合来完成服务发现
<h2 id="前言">前言 说了一下用HttpClientFactory实现了简单的熔断降级。 这篇就来简单说说用HttpClientFactory来实现服务发现。由于标题已经好明显的说了 因此这里会要求有Spring Clound的相关环境,本文也默认各位对这里有些许了解,所以不会涉及搭建过程的。 下面就开始正文了。 这里的Service,其实可以比较简单的理解成对注册到Eureka的服务进行调用,然后进行后续处理。 public interface IMyService { Task 在上面的Service中,都是常规的不能再常规的HttpClient的用法!似乎也没有看到任何和服务发现相关的东西呀。 确实,就上面的代码,完成不了服务发现,因为我们的主角,HttpClientFactory还没有出场! 先定义好这个Service,是因为我们这里要用另一种client方式(Typed Client)。 下面就去Startup进行相关的配置了。 在进行配置之前,我们要先添加Steeltoe.Discovery.ClientCore的引用。 再按照Steeltoe的配置说明,在 { "Logging": { "LogLevel": { "Default": "Information","Microsoft": "Error" } },"AllowedHosts": "*","spring": { "application": { "name": "clienttest" } },"eureka": { "client": { "serviceUrl": "http://192.168.1.133:7070/eureka/","shouldFetchRegistry": true,"ValidateCertificates": false },"instance": { "port": 7788,"instanceId": "192.168.1.116:7788","hostName": "192.168.1.116" } } } 最后就是在 public void ConfigureServices(IServiceCollection services) { //服务发现客户端 services.AddDiscoveryClient(Configuration); //服务发现的Handler services.AddTransient 这里注册HttpClient,涉及到了两个点。一个是Typed Client,另一个是outgoing request middleware。 Typed Client 主要是 DiscoveryHttpMessageHandler表明,使用这个HttpClient的时候,会使用这个Handler. 另外,这里指定的BaseAddress是http://bservicetest/api/values/。 这个是已经注册到Eureka的另外一个测试服务,我们就是要发现它,然后从这个服务里面取到结果。 然后,自然就是控制器了。 Controller就是很简单的了,不需要多说。 [Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { // GET api/values/text [HttpGet("text")] public async Task 这里还加了一个日志,是为了方便发布后查看日志,所以添加了NLog来输出日志。 添加一个
然后在 public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } <h2 id="运行效果">运行效果 发布之后,可以看到Eureka上面已经成功注册了我们的这个ClientTest服务 其中,上图两个箭头的地方就是我们用到的服务,CLIENTTEST就是我们刚才发布的。BSERVICETEST是另一个测试服务。 CLIENTTEST就是会调用BSERVICETEST这个测试服务拿数据。 下面请求看看效果。 从动图来看,是已经达到预期了,由于BSERVICETEST有两个实例,所以也可以看到上面的结果是,两个实例在随机返回结果。 最后看看日志 请求也确实是到了我们的BSERVICETEST,而不是直接通过这个service的直接地址去访问的。 Outgoing request middleware这个功能对HttpClientFactoty来说,用途似乎不少,就看各位怎么发挥了。 Steeltoe团队似乎也在尝试将Hystrix以HttpClientFactoty的形式来调用。对比Polly,就个人而言,还是觉得Polly好用一点。 最后附上本文的示例代码 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – 即使关闭了自动完成功能,Firefox也会缓存
- asp.net-mvc – MVC3将@model传递给局部视图
- asp.net核心 – 无法使用托管代理在Visual Studio Team Ser
- asp.net – 哪种模式最匹配场景详细,是不是很好的做法?
- asp.net – DropDownList selectedvalue和表
- asp.net – System.Web.HttpException:请求超时
- asp.net – NancyFx和Windows身份验证
- asp.net-mvc – 在asp.net MVC中授权属性和jquery AJAX
- 怎么将XML字符串转换为XmlDocument,并获取部分节点值
- 版本化ASP.NET Web应用程序
- asp.net-mvc – ASP.NET MVC和Ajax,并发请求?
- asp.net-mvc – ASP.Net MVC Razor Views – 在构
- asp.net – 什么是global.asax用于?
- asp.net – 具有SQL Server成员资格提供程序的Mo
- asp.net-mvc-3 – 剃刀引擎 – SEO元标签
- asp.net – UpdatePanel中的动态创建控件?
- asp.net-mvc – 将HttpRequestMessage转换为Http
- asp.net-mvc – 有没有更好的方法来指定asp.net
- asp.net-mvc – Asp.net MVC和普通的html页面
- ASP.NET MVC 微信公共平台开发之 微信接入