HttpClientFactory与Steeltoe结合来完成服务发现

前言

上一篇说了一下用HttpClientFactory实现了简单的熔断降级。

这篇就来简单说说用HttpClientFactory来实现服务发现。由于标题已经好明显的说了Steeltoe

因此这里会要求有Spring Clound的相关环境,本文也默认各位对这里有些许了解,所以不会涉及搭建过程的。

下面就开始正文了。

定义Service

这里的Service,其实可以比较简单的理解成对注册到Eureka的服务进行调用,然后进行后续处理。

640?wx_fmt=png

在上面的Service中,都是常规的不能再常规的HttpClient的用法!似乎也没有看到任何和服务发现相关的东西呀。

确实,就上面的代码,完成不了服务发现,因为我们的主角,HttpClientFactory还没有出场!

先定义好这个Service,是因为我们这里要用另一种client方式(Typed Client)。

下面就去Startup进行相关的配置了。

在Startup进行配置

在进行配置之前,我们要先添加Steeltoe.Discovery.ClientCore的引用。

<PackageReference Include="Steeltoe.Discovery.ClientCore" Version="2.1.0-rc1" />

再按照Steeltoe的配置说明,在appsettings.json中添加下面的配置

640?wx_fmt=png

最后就是在ConfigureServices方法里面进行操作了。

640?wx_fmt=png

这里注册HttpClient,涉及到了两个点。一个是Typed Client,另一个是outgoing request middleware

Typed Client 主要是AddTypedClient<IMyService, MyService>(),表明注册的这个HttpClient是给这个类型用的。

DiscoveryHttpMessageHandler表明,使用这个HttpClient的时候,会使用这个Handler.

另外,这里指定的BaseAddress是http://bservicetest/api/values/。

这个是已经注册到Eureka的另外一个测试服务,我们就是要发现它,然后从这个服务里面取到结果。

然后,自然就是控制器了。

Controller和日志使用

Controller就是很简单的了,不需要多说。

640?wx_fmt=png

这里还加了一个日志,是为了方便发布后查看日志,所以添加了NLog来输出日志。

添加一个nlog.config,内容大致如下。

640?wx_fmt=png

然后在Program添一行使用NLog的代码。

640?wx_fmt=png

运行效果

发布之后,可以看到Eureka上面已经成功注册了我们的这个ClientTest服务

640?wx_fmt=png

其中,上图两个箭头的地方就是我们用到的服务,CLIENTTEST就是我们刚才发布的。BSERVICETEST是另一个测试服务。

CLIENTTEST就是会调用BSERVICETEST这个测试服务拿数据。

下面请求看看效果。

640?wx_fmt=gif

从动图来看,是已经达到预期了,由于BSERVICETEST有两个实例,所以也可以看到上面的结果是,两个实例在随机返回结果。

最后看看日志

640?wx_fmt=png

请求也确实是到了我们的BSERVICETEST,而不是直接通过这个service的直接地址去访问的。

总结

Outgoing request middleware这个功能对HttpClientFactoty来说,用途似乎不少,就看各位怎么发挥了。

Steeltoe团队似乎也在尝试将Hystrix以HttpClientFactoty的形式来调用。对比Polly,就个人而言,还是觉得Polly好用一点。

最后附上本文的示例代码https://github.com/catcherwong/Demos/tree/master/src/SteeltoeWithHttpClientFactory

原文地址:https://www.cnblogs.com/catcher1994/p/9381735.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

业务流程、长周期服务和微服务

在近期于伦敦Skills Matter举行的DDD eXchange 2018会议上&#xff0c;Martin Schimak认为在最近几年间&#xff0c;领域事件引发了越来越多的讨论&#xff0c;但是我们对命令也应如此&#xff0c;在这次会议上他讨论了微服务领域的事件、命令以及长周期的服务&#xff0c;以及…

.NET Core TDD 前传: 编写易于测试的代码 -- 构建对象

该系列第1篇: 讲述了如何创造"缝". "缝"(seam)是需要知道的概念.本文是第2篇, 介绍的是如何避免在构建对象时写出不易测试的代码. 本文的概念性内容大部分都来自Misko Hevery的这篇博客文章.构建还是用上文里汽车的例子.通常情况下, 我们是先去建造汽车, …

构建可扩展的有状态服务

原文链接&#xff1a;http://highscalability.com/blog/2015/10/12/making-the-case-for-building-scalable-stateful-services-in-t.html在很长一段时间内&#xff0c;分布式系统都采用无状态服务作为分布式系统扩展的最佳实践。它可以通过简单的循环负载均衡来提供扩展能力。…

树莓派3B+,我要跑.NET CORE

前面的话我也不知道为什么&#xff0c;看到.net core觉得很爽&#xff0c;可以真正的跨平台&#xff0c;个人觉得很喜欢&#xff0c;所以就准备拿树莓派来验证我的想法。在我写这篇文章的时候&#xff0c;刚好在树莓派上装好了core2.1&#xff0c;先上结果。一、基础准备从板子…

【DP】【高精】WZK打雪仗(jzoj 1997)

WZK打雪仗 jzoj 1997 题目大意&#xff1a; 在一个环上有n*2个点&#xff0c;问有多少种连法可以用n条线连接成n对点 输入样例 5输出样例 42解释&#xff1a; 一种可行的方案如下&#xff1a; 数据范围 对于30%数据&#xff1a; n<30。 对于100%数据&#xff1a; …

月旦评 之 DevOps招贤令2018

公元164-182年间&#xff0c;汝南平舆的许氏兄弟于每月初一品评人物&#xff0c;褒贬时政&#xff0c;被称为“月旦评”。所谓“子治世之能臣&#xff0c;乱世之奸雄也”这句许邵评价曹操的话也是来自于“月旦评”&#xff1b;时间一下子来到了2018年&#xff0c;LEANSOFT DevO…

函数式编程之-模式匹配(Pattern matching)

编者&#xff1a;C# 7.0也加入了模式匹配&#xff0c;来源于F#。模式匹配在F#是非常普遍的&#xff0c;用来对某个值进行分支匹配或流程控制。模式匹配的基本用法模式匹配通过match...with表达式来完成&#xff0c;一个完整的模式表达式长下面的样子&#xff1a;match [somethi…

Asp.Net Core SignalR 与微信小程序交互笔记

什么是Asp.Net Core SignalRAsp.Net Core SignalR 是微软开发的一套基于Asp.Net Core的与Web进行实时交互的类库&#xff0c;它使我们的应用能够实时的把数据推送给Web客户端。功能自动管理连接允许同时广播到所有客户端也可以广播到指定的组或者特定的客户端在Github上开源&am…

手机(jzoj 1983)

手机 jzoj 1983 题目大意&#xff1a; 在手机输入键盘上有很多键&#xff08;如下图&#xff09;&#xff0c;每一个位置按一次就是第一个字母&#xff0c;第二次就是第二个字母&#xff08;空格按0一次&#xff09;&#xff0c;现在问打出一条信息最少按几下&#xff1f; …

Go vs .NET Core 2.1

.NET Core 2.1 正式发布之际&#xff0c;微软团队在博客的中提到了 .NET Core 2.1 中的性能提升。这让我想起了去年 Go 语言 Iris MVC 框架作者做的 Go 与 .NET Core 2.0 之间的性能对比(具体可看https://hackernoon.com/go-vs-net-core-in-terms-of-http-performance-7535a61b…

.NET Core TDD 前传: 编写易于测试的代码 -- 依赖项

第1篇: 讲述了如何创造"缝". "缝"(seam)是需要知道的概念.第2篇, 避免在构建对象时写出不易测试的代码.本文是第3篇, 讲述依赖项和迪米特法则.迪米特法则 (Law of Demeter)还是使用建造汽车的例子. 生产汽车的时候需要轮胎, 组装时需要什么型号的轮胎, 就…

.Net Core中的日志组件(Logging)

1、介绍Logging组件是微软实现的日志记录组件包括控制台(Console)、调试(Debug)、事件日志(EventLog)和TraceSource&#xff0c;但是没有实现最常用用的文件记录日志功能(可以用其他第三方的如NLog、Log4Net。之前写过NLog使用的文章)。2、默认配置新建.Net Core Web Api项目&a…

将 ASP.NET Core 2.0 项目升级至 ASP.NET Core 2.1.3X

阅读文本大概需要 3.3 分钟。在上一篇文章《ASP.Net Core 运行错误 Http Error 502.5 解决办法》的最后有提到说&#xff0c;最推荐的升级办法是从2.0升级到2.1X版本.操作如下项目的例子直接使用https://github.com/52ABP/52ABP.School 作为对象&#xff0c;毕竟他正好是.NET C…

.net core 多版本如何选择

在讲述.net core多版本之前&#xff0c;我们先理解一下.net core sdk与.net core runtime之前的联系与区别&#xff0c;根据官网的解释我们可以简单地理解为&#xff1a;sdk是在开发过程中进行使用&#xff0c;而runtime是在项目发布后作为运行环境进行安装的&#xff0c;runti…

好代码是管出来的——使用GitHub实现简单的CI/CD

软件开发一般来说是一项团队作业&#xff0c;在本系列文章开始就提到过软件的编码是由一个团队“并行”完成的&#xff0c;为了保证编码任务正常完成&#xff0c;首先引入版本控制工具来完成代码管理&#xff0c;为了保证代码质量引入了代码分析器以及代码测试。版本控制工具可…

数据告诉你:中年并不只有危机,创业或许正当时

人们普遍认为最成功的企业家都是年轻人。比尔?盖茨、史蒂夫?乔布斯和马克?扎克伯格都在自己20岁出头的时候&#xff0c;建立起了日后改变世界的伟大公司。这些著名的案例是否反映了一种可以被普遍推广的模式呢&#xff1f;风险投资机构和媒体似乎赞成一点。我们分析了过去十…

ASP.NET Core 2.0 MVC项目实战

一、前言毕业后入职现在的公司快有一个月了&#xff0c;公司主要的产品用的是C/S架构&#xff0c;再加上自己现在还在学习维护很老的delphi项目&#xff0c;还是有很多不情愿的。之前实习时主要是做.NET的B/S架构的项目&#xff0c;主要还是用的那种传统的开发模式&#xff0c;…

WebApiClient百度地图服务接口实践

1. 文章目的随着WebApiClient的不断完善&#xff0c;越来越多开发者选择WebApiClient替换原生的HttpClient&#xff0c;然而在应用到实际项目中多多少少会遇到一些项目结合上的疑问和困难&#xff0c;本文将以WebApiClient使用者的身份&#xff0c;在Asp.net core mvc项目中使用…

Dependency injection in .NET Core的最佳实践

我们知道依赖注入&#xff08;DI&#xff09;是一种实现对象及其协作者或依赖关系之间松散耦合的技术。 ASP.NET Core包含一个简单的内建容器来支持构造器注入。我们试图将DI的最佳实践带到.NET Core应用程序中&#xff0c;这表现在以下方面&#xff1a;构造器注入注册组件DI i…

CodeForces - 1189A ----Keanu Reeves

原题传送 INPUT Output Examples 题意&#xff1a; 有个长度我n的字符串&#xff0c;然后把它分成k分&#xff0c;要使每份都good且为正数&#xff08;good的要求为该数中0和1的个数不同&#xff09;&#xff0c;求输出最小的结果&#xff08;答案不唯一输出一个即可&#xf…