.NET Core下的Spring Cloud——前言和概述

前言

前几年一直在写类似dubbo,Spring Cloud的微服务框架辗辗转转重复了多次,也重构推翻了很多次,其中诞生了“Rabbit.Rpc”,”Go”,”RabbitCloud”等开源项目。

其中不乏他人对这些项目的完善。很高兴自己的开源项目能够给他人提供思路和复用代码。

关于Rabbit.Rpc相关的文章:

《.NET轻量级RPC框架:Rabbit.Rpc》

《拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc》

挫折

但无一不被推翻。为什么呢?是因为没有耐心?喜新厌旧吗?

回顾经历,鄙人一直在互联网类型的公司就职,用户量和请求量都不算低,而自己造的轮子在具体应用上多多少少存在一些问题。

为什么不去解决遇到的问题呢?

一个人的精力有限,越深入越发现一个微服务框架需要考虑的事情太多,而不是简简单单写点代码达到展示可用。

真正用在生产上会遇到很多奇奇怪怪的需求,有技术正确的也有业务需要的。

而且每一个项目对微服务框架的需求也不尽一样。经常遇到某些功能在A处可用,在B处就没那么流利了。

是能力不足代码太low吗?

也存在这个可能。个人觉得微服务框架需要大量的微服务实践经验。或许是本人的实践经验还不够。

站在巨人的肩膀上

这时候我发现了一个项目“SteeltoeOSS”这是Spring Cloud团队在.NET下的实现。这时我准备拥抱开源,放弃自己造核心轮子的想法。利用社区的经验衍生出更方便的使用方式。

然而SteeltoeOSS因为创建不久,无法完全对标Java Spring Cloud的实现,缺少了一些快速上手的能力,比如feign(声明式API请求客户端),Hystrix的集成,ribbot(负载均衡服务器),只有基于eureka的服务发现。

这样的情况便萌生了我补缺的想法,我基于SteeltoeOSS添加了三个新的项目,分别是:steeltoe-extensions(Steeltoe.Discovery.Consul.Client,基于consul的服务发现),ribbon和feign(简单可用)。其中feign属于简单可用,耦合的比较紧,目前feign还在ribbon的git仓库。

为什么要这么做?

“.NET不缺乏轮子,而是缺乏稳定生产可用的轮子。”

目前这套解决方案只在前段时间"福州首届.NET开源社区线下技术交流会"上公开宣讲过。

这套解决方案也用于生产,不是满足私欲的花瓶框架

下面是生产环境的相关情况:

最大峰值:80W/min

日请求量:2亿

微软官方实地勘察调研,并作为案例向社会推广.NET Core。

看看效果

首先准备2个server(服务提供方)

这边大家意会就可以了,后续会写详细的文章来一步一步完成和解释这些步骤。

配置如下:

640?wx_fmt=png640?wx_fmt=png

大概的意思是:

本地绑定的服务端口分别是 6001和6002

配置Consul的地址和注册到Consul上的服务地址

其中server2关闭了url健康检查(consul定时向server1请求,返回200代表健康),启用了心跳检查(定时向consul报告我还活着)。

设置服务的名称

添加actuator端点(提供健康检查等能力,来自SteeltoeOSS)

Program如下:

640?wx_fmt=png

大概的意思是:

根据不同的serverId加载不同的配置文件并且创建对应的WebHost

其中UseDiscoveryClient是启用发现客户端的意图

Startup如下:

640?wx_fmt=png640?wx_fmt=png

大概的意思是:

server1启用mvc,健康检查端点和CloudFoundry端点(url健康检查)

server2只启用mvc(心跳检查)

Controller如下:

640?wx_fmt=jpeg

大概的意思:返回当前时间

看看Consul

640?wx_fmt=png640?wx_fmt=jpeg

我们可以发现Consul上注册了一个timeService,并且有两个健康的节点,分别是:localhost:6001和localhost:6002。

这样我们就完成了同一个服务两个实例的环境,下一步就是如何调用这些服务。

编写客户端(服务调用方)

配置文件

640?wx_fmt=jpeg

大概的意思是:

配置Consul的地址

当前程序不注册到Consul上(目前只是调用方无需注册到Consul)

只查询健康的服务信息(不健康的节点不会返回)

使用feign调用

定义接口

640?wx_fmt=png

大概的意思是:

定义了一个ITimeService接口,里面有个方法叫GetNowAsync。

在接口定义上添加FeignClientAttribute,指定这个接口对应的服务名称是:timeService(server端的服务名称:Spring:Application:Name),定义一个回退类型(当服务不可用时返回一个可控值,DateTime的最小时间)

初始化和调用

640?wx_fmt=png

运行

640?wx_fmt=jpeg

关掉server试试?

640?wx_fmt=jpeg

在开启server?

640?wx_fmt=jpeg

使用HttpClientFactory调用

初始化和调用

640?wx_fmt=png

运行

640?wx_fmt=png

可以看到6001和6002在交替请求,证明采用的策略是轮询。

写在最后

本篇属于开篇,后续会单独介绍ribbon、feign、Steeltoe.Discovery.Consul.Client。

开源的地址如下:

https://github.com/majian159/ribbon

https://github.com/RabbitTeam/steeltoe-extensions

.NET技术栈QQ群:384413261(点击加入 .NET Group)

原文地址: https://www.cnblogs.com/ants/p/10189440.html

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


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

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

相关文章

期望 概率DP

期望 \(x\) 的期望 \(E(x)\) 表示平均情况下 \(x\) 的值。 令 \(C\) 表示常数, \(X\) 和 \(Y\) 表示两个随机变量。 \(E(C)C\) \(E(C \times X)C \times E(X)\) \(E(XY)E(X)E(Y)\) 期望的线性性 \(E(XY)\) 不一定等于 \(E(X) \times E(Y)\) 期望练习&#xff1a…

CF785E Anton and Permutation

CF785E Anton and Permutation 题意&#xff1a; 对于一个长度为 n 的序列进行 k 次操作&#xff0c;每次操作都是交换序列中的某两个数。对于每一个操作&#xff0c;回答当前序列中有多少个逆序对。 1<n<200000 1<q<50000 题解&#xff1a; 动态逆序对&#x…

P5311-[Ynoi2011]成都七中【点分树,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P5311 题目大意 给出nnn个点的一棵树&#xff0c;每个节点有一个颜色&#xff0c;mmm次询问提出区间[l,r][l,r][l,r]的点构成的生成子图中xxx所在连通块的颜色数。 1≤n,m,ai≤1051\leq n,m,a_i\leq 10^51≤n,m,ai​≤105 解…

[ NOIP提高组 2016]愤怒的小鸟(暴搜 + 状压DP)// [SNOI2017]一个简单的询问(莫队)

一次性写两道题T1&#xff1a;一个简单的询问题目题解代码实现T2&#xff1a;愤怒的小鸟题目暴搜题解暴搜代码实现状压DP题解状压DP代码实现T1&#xff1a;一个简单的询问 题目 给你一个长度为 N 的序列 ai ,1≤i≤N&#xff0c;和 q 组询问&#xff0c;每组询问读入 l1,r1,l…

微软发布新的 Azure Pipelines 功能和集成

在最近举行的Connect()大会上&#xff0c;微软发布了几项新功能以及与 Azure Pipelines 的集成&#xff0c;包括 Visual Studio Code 的 Azure Pipelines 扩展、GitHub 版本管理、对 IoT 项目的支持以及 ServiceNow 集成。自从 9 月份推出 Azure Pipelines 以来&#xff0c;这种…

平衡树练习总结

文章目录前言普通平衡树文艺平衡树郁闷的出纳员书架宠物收养场机械排序千山鸟飞绝总结前言 专门刷了一天半的平衡树 &#xff08;附带划水OvO&#xff09; 使用的是蜜汁常数的splay 感觉对平衡树的理解还是有帮助的 一些较为常规的平衡树的题应该是差不多了 更正之前刚学的观点…

二维树状数组

二维树状数组可以实现在平面上的区域加、区域查询等操作。 区域修改 我们在一维时维护树状数组的区间操作时&#xff0c;对其进行了差分。类比一维的思想&#xff0c;我们在二维平面上也对树状数组差分。 我们来看二维的前缀和&#xff1a; \[sum(i,j)sum(i-1,j)sum(i,j-1)-sum…

【AcWing 249. 蒲公英】

【AcWing 249. 蒲公英】 题意&#xff1a; 长度为n的序列&#xff0c;给定区间&#xff0c;求区间众数&#xff0c;如果出现次数相同&#xff0c;输出编号最小的 题解&#xff1a; 区间众数&#xff0c;不带修改&#xff0c;强制在线&#xff08;否则可以莫队&#xff09; …

年末展望:Oracle 对 JDK收费和.NET Core 给我们的机遇

2018年就结束了&#xff0c;马上就要迎来2019年&#xff0c;这一年很不平凡&#xff0c;中美贸易战还在继续&#xff0c;IT互联网发生急剧变化&#xff0c;大量互联网公司开始裁员&#xff0c;微软的市值在不断上升 &#xff0c;在互联网公司的市值下跌过程中爬到了第一的位置&…

等比数列三角形 (数论 + 黄金分割点)+ JOISC 2016 Day3 T3 「电报」(基环树 + 拓扑排序)

文章目录T1&#xff1a;等比数列三角形题目题解代码实现T2&#xff1a;电报题目题解代码实现T1&#xff1a;等比数列三角形 题目 求三边都是 ≤n 的整数&#xff0c;且成等比数列的三角形个数 注意三角形面积不能为 0 注意 oeis 中未收录此数列&#xff0c;所以并不需要去搜了…

模板:笛卡尔树

介绍 笛卡尔树是一种非常特殊的二叉搜索树。每个节点有两个信息x和y。如果只考虑 x&#xff0c;它是一棵二叉搜索树&#xff0c;如果只考虑 y&#xff0c;它是一个小根堆。 实现 按照y升序插入 显然应该插入到一条极右链上 但为了维护x二叉搜索树的性质 对于右链上x>当前…

乱搞

占个坑&#xff0c;找时间补

【AcWing 243. 一个简单的整数问题2】

例题&#xff1a;【AcWing 243. 一个简单的整数问题2】 线段树模板题&#xff0c;区间修改区间求和。 题解&#xff1a; 将序列分成N/B块&#xff0c;维护&#xff1a; id[i] i/B&#xff0c;i所在块标号 res[id] 第id块的sum base[id] 第id块的add标记修改时&#xff0…

CF1540B-Tree Array【数学期望,dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF1540B 题目大意 nnn个点的一棵树&#xff0c;开始随机选择一个点标记&#xff0c;然后每次随机选择一个与被标记点连边的点标记&#xff0c;按照标记顺序排列&#xff0c;求期望逆序对数。 1≤n≤2001\leq n\leq 2001≤n≤2…

使用PerfView监测.NET程序性能(三):分组

在上一篇博客使用PerfView监测.NET程序性能&#xff08;二&#xff09;&#xff1a;Perfview的使用中&#xff0c;我们通过Perfview帮助文件中自带的代码来简单使用了Perfview&#xff0c;了解了基本操作。现在来看看Perfview中的分组操作&#xff08;Grouping&#xff09;。分…

【做题记录】构造题

CF468C Hack it! 题意&#xff1a; 令 \(F(x)\) 表示 \(x\) 的各个位上的数字之和&#xff0c;如 \(F(1234)123410\) 。 给定 \(a(a\le 10^{18})\) &#xff0c;请求出任意一组 \(l,r(l,r\le 10^{200})\) &#xff0c;要求满足&#xff1a; \[\sum_{il}^{r}F(i)\pmod{a}0 \]输出…

主席树 学习报告

文章目录前言可持久化线段树代码区间第k大代码练习粟粟的书架代码森林代码任务查询系统代码列队代码前言 主席树&#xff0c;全称是可持久化权值线段树 利用r和l-1两棵权值线段树作差得到[l,r]的信息 从而解决各种问题 在排名这方面功能极其强大 可持久化线段树 学主席树之前…

Star Way To Heaven (prim最小生成树) // [ NOIP提高组 2014]飞扬的小鸟(DP)

文章目录T1&#xff1a;Star Way To Heaven题目题解代码实现T2&#xff1a;飞扬的小鸟题目题解代码实现T1&#xff1a;Star Way To Heaven 题目 小 w 伤心的走上了 Star way to heaven。 到天堂的道路是一个笛卡尔坐标系上一个 n*m 的长方形通道 顶点在 (0,0) 和 (n,m) 。 小…

CF1043E Train Hard, Win Easy

CF1043E Train Hard, Win Easy 题意&#xff1a; n个人有Ai和Bi两个属性&#xff0c;给出m个关系&#xff1a;xi yi表示xi和yi不能配对 i,j两人规定匹配的价值为min (Ai Bj , Bi Aj ) 回答出每个人跟所有人配对&#xff08;除开不能和自己匹配的人&#xff09;的价值总和 …

P7887-「MCOI-06」Existence of Truth【构造】

正题 题目连接:https://www.luogu.com.cn/problem/P7887?contestId52021 题目大意 给出三个长度为nnn的序列xi,yi,zix_i,y_i,z_ixi​,yi​,zi​&#xff0c;求一个序列aaa满足0≤ai<10970\leq a_i<10^970≤ai​<1097且 xi(∑j1iaj)yi(∑jinaj)≡zi(mod1097)x_i\lef…