前言

前几年一直在写类似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(服务提供方)

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

配置如下:

大概的意思是:

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

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

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

设置服务的名称

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

Program如下:

大概的意思是:

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

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

Startup如下:

大概的意思是:

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

server2只启用mvc(心跳检查)

Controller如下:

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

看看Consul

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

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

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

配置文件

大概的意思是:

配置Consul的地址

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

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

使用feign调用

定义接口

大概的意思是:

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

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

初始化和调用

运行

关掉server试试?

在开启server?

使用HttpClientFactory调用

初始化和调用

运行

可以看到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

.NET Core下的Spring Cloud——前言和概述相关推荐

  1. Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 11.1 Spring Cloud Alibaba Nacos 概述

    11.1 Spring Cloud Alibaba Nacos 概述 11.1.1 Spring Cloud Alibaba 简介 在一开始,我们先简单介绍下Spring Cloud Alibaba的 ...

  2. Spring Cloud 基本理论概述

    前言 万丈高楼平地起,但还有种说法叫:"万事开头难",不管使用什么技术,就算是行业老司机,也得乖乖的从基本理论概述开始.通过本篇文章,您将理解什么是 Spring Cloud ?S ...

  3. .NET Core + Spring Cloud:服务注册与发现

    毫无疑问,微服务架构是目前的主流,在微服务架构下,服务治理.负载均衡.服务熔断.配置中心.API网关 等都是需要关注的问题,当然不是非要全部完善后才能进行微服务开发,在很多项目团队中,初期可能会将某个 ...

  4. Spring Cloud Gateway 3.1.3最新版中文手册官网2022

    Spring Cloud Gateway 3.1.3 该项目提供了一个库,用于在 Spring WebFlux 之上构建 API 网关.Spring Cloud Gateway 旨在提供一种简单而有效 ...

  5. 网关 翻译版本 spring cloud gateway

    Spring Cloud Gateway 官网原文地址 https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html ...

  6. Spring Cloud(10)——新一代网关Spring Cloud Gateway

    文章目录 Spring Cloud(10)--新一代网关Spring Cloud Gateway 1.背景知识--API网关 2.Spring Cloud Gateway 详细概述 3.Spring ...

  7. Spring Cloud Hoxton正式发布,Spring Boot 2.2.x不再孤单

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 距离Spring Boot 2.2.0的发布已经有一个半 ...

  8. Spring Cloud –基本设置

    Spring Cloud解决了分布式系统的常见问题. 但是,对于只使用广为人知的整体应用程序工作的人来说,从一开始就跳入一长串为分布式服务设计的模式可能会让人不知所措. 本文将通过实用的方法为您介绍S ...

  9. [转]Spring Cloud在国内中小型公司能用起来吗?

    原文地址:http://www.cnblogs.com/ityouknow/p/7508306.html 原文地址:https://www.zhihu.com/question/61403505 今天 ...

最新文章

  1. 属于程序员自己的日历 2019年编程日历限量预售!
  2. Mysql 添加用户和数据库授权
  3. 大批机器人上岗,会影响工作吗,为何我们必须发展人工智能?
  4. centOS 7设置静态IP,使用Xshell远程连接
  5. Java学习进度(2013.03.13)—Struts2学习一
  6. USACO Training Section 1.2 挤牛奶Milking Cows
  7. Wireshark条件过滤后的数据包保存
  8. linux关闭mysql日志记录_linux 下mysql 运行一段时间后自动关闭,日志无异常
  9. react+百度地图实现自定义图标
  10. Android7.1 Audio的FW和HAL层dump PCM数据(三十七)
  11. 常用PMP资料下载地址
  12. 性能服务器漫画免费下拉式,热浪漫画_斗破苍穹漫画免费下拉式
  13. 代收邮件服务器(pop,接收邮件服务器(POP)是?什么是 POP3? POP3 命令包括什么?
  14. 【MyEcplise】build workspace卡死
  15. 干货|爬虫被封的几个常见原因
  16. C++中bad_alloc类
  17. element-UI 图标点击切换
  18. 局域网和广域网的传输流程
  19. C++乘除运算防止中间值溢出
  20. 2014小学计算机统计表,2014年春小学部考试成绩统计表.xls

热门文章

  1. some demos
  2. MATLAB编程与应用系列-关于MATLAB编程入门教程的总体编写安排
  3. [python] 解决pip install download速度过慢问题 更换豆瓣源
  4. ImageView的scaleType理解
  5. RabbitMQ+PHP 教程六(RPC)
  6. 关于F5 排错的简单介绍之一
  7. 同一个PC只能运行一个应用实例(考虑多个用户会话情况)
  8. 响应式设计(Response Web Design)浅谈
  9. Kappa信息化谋局电子商务与传统渠道的全面管理
  10. 从Banner入手保护linux系统服务器