背景

公司去年开始使用dotnet core开发项目。公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代理,项目最终上线。但是这远远没达到微服务的要求,其中服务治理,断路器都没有。我个人理解,我们谈微服务实际上更多的是谈服务治理这块东西,至于各个的服务只是微服务中的应用而已。一次偶然的机会发现了java的spring cloud这套框架,而且支持dotnet core集成(Steeltoe OSS)。所以目前我们的项目架构是spring cloud搭建底层微服务框架,dotnet core来编写业务逻辑。

spring cloud

spring cloud是java平台提供的一套解决方案,目前市面上来说可能不是最好的微服务解决方案,但是一定是功能最齐全最全的解决方案。提供了一些微服务的基础功能,包括服务治理、负载均衡、断路器、配置中心、API网关等等。

服务治理

关于服务治理这块东西,网上太多太多的资料和原理。相信大家也看了很多,但是如何应用到实际的项目场景,为什么要这样做呢?传统的项目,服务与服务之间的调用都是通过URL来访问,如果是集群那么通过一个负载均衡地址来访问,增加或者减少机器都是通过维护负载均衡列表的IP地址来实现。微服务架构下,分散成了N个服务,每个服务又是一个集群,对于一个大项目来说,维护这些配置是非常头疼的。笔者曾经在某知名互联网公司工作过,公司最累最背锅的就是运维团队,基本24小时都在应付各个团队的部署上线工作以及各种配置的维护,而且还经常出错挨骂。那么服务治理就出现在这种应用场景之中,运维工程师不用再维护各个负载均衡节点,由服务中心去统一处理。举个简单例子,一个电商网站,分解成N个服务,其中有一个用户服务,有一个订单服务,用户服务需要调用订单服务,而订单服务是一个集群,对于用户中心来说他只需要知道访问订单中心即可,至于具体访问订单中心的哪台机器由服务中心来调配。

搭建服务治理平台

  1. java开发环境和IDE使用请自行百度,笔者java开发的ide使用的intellij idea。

  2. 创建一个srping boot项目,项目名称service-center,添加spring cloud的依赖

    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId></dependency>
  3. 添加@EnableEurekaServer注解

    @EnableEurekaServer@SpringBootApplicationpublic class ServiceCenterApplication {}
  4. 设置应用程序的端口和名称

    spring.application.name=service-center
    server.port=5000
  5. 启动项目,在浏览器输入http://localhost:5000/

注册服务

  1. 使用vs创建一个dotnet core web api程序

  2. 使用nuget添加Pivotal.Discovery.Client库

    <PackageReference Include="Pivotal.Discovery.Client" Version="1.1.0" />

    3.Program.cs 设置一个端口

    public static void Main(string[] args)    {        var host = new WebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).UseIISIntegration().UseStartup<Startup>().UseApplicationInsights().UseUrls("http://*:8010").Build();host.Run();}
  3. Startup.cs

     public void ConfigureServices(IServiceCollection services){services.AddDiscoveryClient(Configuration);        // Add framework services.services.AddMvc();}
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){loggerFactory.AddConsole(Configuration.GetSection("Logging"));loggerFactory.AddDebug();app.UseMvc();app.UseDiscoveryClient();}
  4. appsettings.json

    {
    "Logging": {"IncludeScopes": false,"LogLevel": {"Default": "Warning"}
    },
    "spring": {"application": {"name": "serviceone"}
    },
    "eureka": {"client": {"serviceUrl": "http://loclhost:5000/eureka/","shouldFetchRegistry": false,"shouldRegisterWithEureka": true },"instance": {"port": 8010}
    }
    }

    如果是团队开发,"shouldRegisterWithEureka"设置成false,防止本地环境注册到开发环境

  5. 启动程序,再次访问http://localhost:5000/发现已经注册到服务中心了

  6. 同样的方式我们再创建一个ServiceTwo的项目,修改programe.cs和appsettings.json文件,其它不变

    public static void Main(string[] args)    {        var host = new WebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).UseIISIntegration().UseStartup<Startup>().UseApplicationInsights().UseUrls("http://*:8011").Build();host.Run();
    {
    "Logging": {"IncludeScopes": false,"LogLevel": {"Default": "Warning"}
    },
    "spring": {"application": {"name": "servicetwo"}
    },
    "eureka": {"client": {"serviceUrl": "http://loclhost:5000/eureka/","shouldFetchRegistry": false,"shouldRegisterWithEureka": true },"instance": {"port": 8011}
    }
    }
  7. 再次访问http://localhost:5000/,发现ServiceOne和ServiceTwo都已经注册到服务中心了

后记

这样一个简单的服务治理平台就搭建出来了,我们通过spring cloud来创建了一个服务中心,然后通过dotnet core创建了2个服务注册到了服务中心,但是这些离微服务还差的远.服务之间怎么相互调用呢?集群模式怎么处理呢?微服务的统一API网关呢?留下这些问题,且听下回分解。

所有代码均上传github。
求推荐,你们的支持是我写作最大的动力,我的QQ群:328438252,交流微服务。

参考资料

java部分

  • spring cloud文档

  • 纯洁大神spring cloud系列

.net部分

  • SteeltoeOSS文档

  • SteeltoeOSS源码

原文地址:http://www.cnblogs.com/longxianghui/p/7561259.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)相关推荐

  1. spring cloud+dotnet core搭建微服务架构:配置中心续(五)

    前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...

  2. spring cloud+dotnet core搭建微服务架构:配置中心(四)

    前言 我们项目中有很多需要配置的地方,最常见的就是各种服务URL地址,这些地址针对不同的运行环境还不一样,不管和打包还是部署都麻烦,需要非常的小心.一般配置都是存储到配置文件里面,不管多小的配置变动, ...

  3. spring cloud+dotnet core搭建微服务架构:Api网关(三)

    前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...

  4. spring cloud+dotnet core搭建微服务架构:服务发现(二)

    前言 上篇文章<手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)>实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A ...

  5. spring cloud+.net core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

  6. 手把手教你用Spring Cloud和Docker构建微服务

    什么是Spring Cloud? Spring Cloud 是Pivotal提供的用于简化分布式系统构建的工具集.Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接 ...

  7. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

  8. 用Spring Cloud和Docker搭建微服务平台

    This blog series will introduce you to some of the foundational concepts of building a microservice- ...

  9. 手把手教你用Jenkins做dotnet core自动化发布

    Jenkins部分 首先,我们要有个Jenkins咯,下载链接:https://jenkins.io/download/ 我们安装官网教程安装好jenkins,安装教程略-. 嗯?不是说好手把手么?你 ...

最新文章

  1. Leetcode Excel Sheet Column Number
  2. python【蓝桥杯vip练习题库】ALGO-231多阶乘计算
  3. 窗口不小心拉到任务栏下面,窗口无法拖回桌面的解决办法
  4. Go 语言切片(Slice)
  5. hybris backoffice搜索时遇到could not execute full-text query的解决方案
  6. abb智能控制系统_ABB助力国网冀北电力打造虚拟电厂
  7. git checkout 会把改动带过去吗_原创 | 操作失误不要慌,这个命令给你的Git一次反悔的机会...
  8. java 调度etl_Easy Scheduler是一个工作流调度系统,主要解决数据研发ETL错综复杂的依赖关系...
  9. mysql 批量数据循环插入
  10. 获取指定月份最后一天_Excel如何计算某个月的第1天和最后1天?
  11. 物联网智能电影院- Android
  12. 项目实践日记(Gitlab的搭建及配置)
  13. Linux系统中xz命令用法详解(压缩和解压缩)
  14. mysql从删库到跑路 Ubuntu篇
  15. 涂涂乐的详细实现之二--UI布局和效果
  16. 重磅消息:微信支付分最新开通方法!
  17. Rhino是强大的专业3D造型软件
  18. TexturePacker 图集生成工具
  19. 使用 break 语句直接强行退出循环
  20. 强推面试前必刷:Alibaba 内部 Java 高级架构师

热门文章

  1. Oracle精简客户端配置
  2. 简洁强大的JavaWeb框架Blade
  3. Cus系统beta1.2发布
  4. oracle 11g(二)安装过程
  5. ObjectiveC 深浅拷贝学习
  6. Outlook 阅读窗格(Reading Pane)
  7. Visual Studio怎么使用中文帮助文档
  8. 双11,2分钟狂挣20亿的神秘大厂,急招.NET!
  9. 不止命令行!自定义VS生成事件
  10. 面向.NET开发人员的Dapr- actors 构建块