spring cloud+dotnet core搭建微服务架构:服务注册(一)

小灰灰 2022-06-07 09:06 299阅读 0赞

#

原文链接如下:

http://www.cnblogs.com/longxianghui/p/7561259.html

背景

公司去年开始使用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. 创建一个spring boot项目,项目名称service-center,添加spring cloud的依赖

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

    1. @EnableEurekaServer
    2. @SpringBootApplication
    3. public class ServiceCenterApplication { }
  4. 设置应用程序的端口和名称

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

注册服务

  1. 使用vs创建一个dotnet core web api程序
  2. 使用nuget添加Pivotal.Discovery.Client库

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

    3.Program.cs 设置一个端口

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

    1. public void ConfigureServices(IServiceCollection services) {
    2. services.AddDiscoveryClient(Configuration);
    3. // Add framework services.
    4. services.AddMvc();
    5. }
    6. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
    7. loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    8. loggerFactory.AddDebug();
    9. app.UseMvc();
    10. app.UseDiscoveryClient();
    11. }
  4. appsettings.json

    1. {
    2. "Logging": {
    3. "IncludeScopes": false,
    4. "LogLevel": {
    5. "Default": "Warning"
    6. }
    7. },
    8. "spring": {
    9. "application": {
    10. "name": "serviceone"
    11. }
    12. },
    13. "eureka": {
    14. "client": {
    15. "serviceUrl": "http://localhost:5000/eureka/",
    16. "shouldFetchRegistry": false,
    17. "shouldRegisterWithEureka": true
    18. },
    19. "instance": {
    20. "port": 8010
    21. }
    22. }
    23. }

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

  5. 启动程序,再次访问http://localhost:5000/发现已经注册到服务中心了
    image
  6. 同样的方式我们再创建一个ServiceTwo的项目,修改programe.cs和appsettings.json文件,其它不变

    1. public static void Main(string[] args) {
    2. var host = new WebHostBuilder()
    3. .UseKestrel()
    4. .UseContentRoot(Directory.GetCurrentDirectory())
    5. .UseIISIntegration()
    6. .UseStartup<Startup>()
    7. .UseApplicationInsights()
    8. .UseUrls("http://*:8011")
    9. .Build();
    10. host.Run();
    11. {
    12. "Logging": {
    13. "IncludeScopes": false,
    14. "LogLevel": {
    15. "Default": "Warning"
    16. }
    17. },
    18. "spring": {
    19. "application": {
    20. "name": "servicetwo"
    21. }
    22. },
    23. "eureka": {
    24. "client": {
    25. "serviceUrl": "http://loclhost:5000/eureka/",
    26. "shouldFetchRegistry": false,
    27. "shouldRegisterWithEureka": true
    28. },
    29. "instance": {
    30. "port": 8011
    31. }
    32. }
    33. }
  7. 再次访问http://localhost:5000/,发现ServiceOne和ServiceTwo都已经注册到服务中心了
    image

后记

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

示例代码

所有代码均上传github。代码按照章节的顺序上传,例如第一章demo1,第二章demo2以此类推。
求推荐,你们的支持是我写作最大的动力,我的QQ群:328438252,交流微服务。

传送门

  • spring cloud+dotnet core搭建微服务架构:服务注册(一)
  • spring cloud+dotnet core搭建微服务架构:服务发现(二)
  • spring cloud+dotnet core搭建微服务架构: Api网关(三)
  • spring cloud+dotnet core搭建微服务架构:配置中心(四)

参考资料

java部分

  • spring cloud文档
  • 纯洁大神spring cloud系列

.net部分

  • SteeltoeOSS文档
  • SteeltoeOSS源码

发表评论

表情:
评论列表 (有 0 条评论,299人围观)

还没有评论,来说两句吧...

相关阅读

    相关 服务架构服务注册

    为什么需要服务注册 ? 我们先来举一个生活中的例子:在以前互联网还不够发达的时候,“114号码百事通”大家应该很熟悉,有啥需求就会去打个电话查询一下。比如想知道附近电影院