祥网站建设,网站设计科技有限公司,wordpress资源,工业设计网站免费背景公司去年开始使用dotnet core开发项目。公司的总体架构采用的是微服务#xff0c;那时候由于对微服务的理解并不是太深#xff0c;加上各种组件的不成熟#xff0c;只是把项目的各个功能通过业务层面拆分#xff0c;然后通过nginx代理#xff0c;项目最终上线。但是这… 背景公司去年开始使用dotnet core开发项目。公司的总体架构采用的是微服务那时候由于对微服务的理解并不是太深加上各种组件的不成熟只是把项目的各个功能通过业务层面拆分然后通过nginx代理项目最终上线。但是这远远没达到微服务的要求其中服务治理断路器都没有。我个人理解我们谈微服务实际上更多的是谈服务治理这块东西至于各个的服务只是微服务中的应用而已。一次偶然的机会发现了java的spring cloud这套框架而且支持dotnet core集成Steeltoe OSS。所以目前我们的项目架构是spring cloud搭建底层微服务框架dotnet core来编写业务逻辑。spring cloudspring cloud是java平台提供的一套解决方案目前市面上来说可能不是最好的微服务解决方案但是一定是功能最齐全最全的解决方案。提供了一些微服务的基础功能包括服务治理、负载均衡、断路器、配置中心、API网关等等。服务治理关于服务治理这块东西网上太多太多的资料和原理。相信大家也看了很多但是如何应用到实际的项目场景为什么要这样做呢传统的项目服务与服务之间的调用都是通过URL来访问如果是集群那么通过一个负载均衡地址来访问增加或者减少机器都是通过维护负载均衡列表的IP地址来实现。微服务架构下分散成了N个服务每个服务又是一个集群对于一个大项目来说维护这些配置是非常头疼的。笔者曾经在某知名互联网公司工作过公司最累最背锅的就是运维团队基本24小时都在应付各个团队的部署上线工作以及各种配置的维护而且还经常出错挨骂。那么服务治理就出现在这种应用场景之中运维工程师不用再维护各个负载均衡节点由服务中心去统一处理。举个简单例子一个电商网站分解成N个服务其中有一个用户服务有一个订单服务用户服务需要调用订单服务而订单服务是一个集群对于用户中心来说他只需要知道访问订单中心即可至于具体访问订单中心的哪台机器由服务中心来调配。搭建服务治理平台java开发环境和IDE使用请自行百度笔者java开发的ide使用的intellij idea。创建一个srping boot项目项目名称service-center添加spring cloud的依赖dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-eureka-server/artifactId/dependency添加EnableEurekaServer注解EnableEurekaServerSpringBootApplicationpublic class ServiceCenterApplication {}设置应用程序的端口和名称spring.application.nameservice-center
server.port5000启动项目在浏览器输入http://localhost:5000/注册服务使用vs创建一个dotnet core web api程序使用nuget添加Pivotal.Discovery.Client库PackageReference IncludePivotal.Discovery.Client Version1.1.0 /3.Program.cs 设置一个端口public static void Main(string[] args) { var host new WebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).UseIISIntegration().UseStartupStartup().UseApplicationInsights().UseUrls(http://*:8010).Build();host.Run();}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();}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防止本地环境注册到开发环境启动程序再次访问http://localhost:5000/发现已经注册到服务中心了同样的方式我们再创建一个ServiceTwo的项目修改programe.cs和appsettings.json文件其它不变public static void Main(string[] args) { var host new WebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).UseIISIntegration().UseStartupStartup().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}
}
}再次访问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跨平台或扫描二维码关注