公司去年开始使用dotnet core开发项目。公司的整体架构采用的是微服务,那时候因为对微服务的理解并非太深,加上各类组件的不成熟,只是把项目的各个功能经过业务层面拆分,而后经过nginx代理,项目最终上线。可是这远远没达到微服务的要求,其中服务治理,断路器都没有。我我的理解,咱们谈微服务实际上更多的是谈服务治理这块东西,至于各个的服务只是微服务中的应用而已。一次偶然的机会发现了java的spring cloud这套框架,并且支持dotnet core集成(Steeltoe OSS)。因此目前咱们的项目架构是spring cloud搭建底层微服务框架,dotnet core来编写业务逻辑。html
spring cloud是java平台提供的一套解决方案,目前市面上来讲可能不是最好的微服务解决方案,可是必定是功能最齐全最全的解决方案。提供了一些微服务的基础功能,包括服务治理、负载均衡、断路器、配置中心、API网关等等。java
关于服务治理这块东西,网上太多太多的资料和原理。相信你们也看了不少,可是如何应用到实际的项目场景,为何要这样作呢?传统的项目,服务与服务之间的调用都是经过URL来访问,若是是集群那么经过一个负载均衡地址来访问,增长或者减小机器都是经过维护负载均衡列表的IP地址来实现。微服务架构下,分散成了N个服务,每一个服务又是一个集群,对于一个大项目来讲,维护这些配置是很是头疼的。笔者曾经在某知名互联网公司工做过,公司最累最背锅的就是运维团队,基本24小时都在应付各个团队的部署上线工做以及各类配置的维护,并且还常常出错挨骂。那么服务治理就出如今这种应用场景之中,运维工程师不用再维护各个负载均衡节点,由服务中心去统一处理。举个简单例子,一个电商网站,分解成N个服务,其中有一个用户服务,有一个订单服务,用户服务须要调用订单服务,而订单服务是一个集群,对于用户中心来讲他只须要知道访问订单中心便可,至于具体访问订单中心的哪台机器由服务中心来调配。nginx
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
@EnableEurekaServer @SpringBootApplication public class ServiceCenterApplication {}
spring.application.name=service-center server.port=5000
<PackageReference Include="Pivotal.Discovery.Client" Version="1.1.0" />
3.Program.cs 设置一个端口git
public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .UseApplicationInsights() .UseUrls("http://*:8010") .Build(); host.Run(); }
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(); }
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "spring": { "application": { "name": "serviceone" } }, "eureka": { "client": { "serviceUrl": "http://localhost:5000/eureka/", "shouldFetchRegistry": false, "shouldRegisterWithEureka": true }, "instance": { "port": 8010 } } }
若是是团队开发,"shouldRegisterWithEureka"设置成false,防止本地环境注册到开发环境github
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 } } }
这样一个简单的服务治理平台就搭建出来了,咱们经过spring cloud来建立了一个服务中心,而后经过dotnet core建立了2个服务注册到了服务中心,可是这些离微服务还差的远.服务之间怎么相互调用呢?集群模式怎么处理呢?微服务的统一API网关呢?留下这些问题,且听下回分解。
第二篇文章已经发布。spring cloud+dotnet core搭建微服务架构:服务发现(二)web
全部代码均上传github。代码按照章节的顺序上传,例如第一章demo1,第二章demo2以此类推。
求推荐,大家的支持是我写做最大的动力,个人QQ群:328438252,交流微服务。spring
java部分json
.net部分api