前言:

  原本计划这次写一下搭建eureka群集。但是发现上次写的只是服务的注册,忘了写服务的发现,所以这次先把服务发现补上去。

  1.   我们基于上篇文章,再新建两个.net core web api项目,分别起名为order_one,order_two, 作为两个订单服务。我们以order_one为例。
    1. 同理先使用nuget添加Pivotal.Discovery.ClientCore库。
    2. Startup.cs 中添加
       public void ConfigureServices(IServiceCollection services)
      {
      // services.AddDiscoveryClient(Configuration);
      services.AddDiscoveryClient(Configuration);
      services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
      }
       public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory)
      {
      loggerFactory.AddConsole(Configuration.GetSection("Logging"));
      loggerFactory.AddDebug();
      if (env.IsDevelopment())
      {
      app.UseDeveloperExceptionPage();
      }
      else
      {
      app.UseHsts();
      }
      app.UseDiscoveryClient();
      app.UseHttpsRedirection();
      app.UseMvc();
      }

      需要using Pivotal.Discovery.Client;

    3. appsettings.json 添加eureka服务配置
      {
      "Logging": {
      "IncludeScopes": false,
      "Debug": {
      "LogLevel": {
      "Default": "Warning"
      }
      },
      "Console": {
      "LogLevel": {
      "Default": "Warning"
      }
      }
      },
      "spring": {
      "application": {
      "name": "order"
      }
      },
      "eureka": {
      "client": {
      "serviceUrl": "http://localhost:8888/eureka/",
      "shouldFetchRegistry": true
      },
      "instance": {
      "port": ,
      "hostName": "localhost"
      }
      }
      }
    4. 修改launchSettings.json 端口改为5001
      {
      "iisSettings": {
      "windowsAuthentication": false,
      "anonymousAuthentication": true,
      "iisExpress": {
      "applicationUrl": "http://localhost:5001/",
      "sslPort":
      }
      },
      "profiles": {
      "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
      }
      },
      "Order_One": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/order",
      "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:5001/"
      }
      }
      }
    5. 添加一个控制器,返回order one
      [Route("api")]
      public class ValuesController : Controller
      { // GET api/values
      [HttpGet("value")]
      public string Get()
      {
      return "Order One";
      }
      }
    6. 再建一个同样的项目,order_two
  2. 上述项目创建完成后,我们先启动spring cloud项目。然后同时启动三个.net core项目。这个时候我们刷新一下spring cloud页面。

    这个时候发现名为order的有两个服务。

  3. 修改一下orderserver的控制器代码
    [Route("api")]
    public class ValuesController : Controller
    { DiscoveryHttpClientHandler _handler; private const string GET_SERVICES_URL = "http://order/api/value";
    private ILogger<ValuesController> _logger; public ValuesController(IDiscoveryClient client, ILoggerFactory logFactory = null)
    {
    _handler = new DiscoveryHttpClientHandler(client);
    _logger = logFactory?.CreateLogger<ValuesController>();
    } [HttpGet("order")]
    public async Task<string> GetServices()
    {
    _logger?.LogInformation("GetServices");
    var client = GetClient();
    return await client.GetStringAsync(GET_SERVICES_URL); } private HttpClient GetClient()
    {
    var client = new HttpClient(_handler, false);
    return client;
    } }

    然后再次启动这三个.net core项目,并访问http://localhost:5000/api/order,如图,他成功返回了order two,多刷新几次会发现返回的order One 和 order two是来回变的。

    说明eureka服务中心帮我们实现了负载均衡。

  4. 这个时候,我们可以把order_one 或者 order_two关掉一个。我们再次访问http://localhost:5000/api/order会出现一次错误,然后eureka会自动把有问题的服务踢掉(时间可配置),再次访问不再有问题。

参考资料:

Spring Cloud

Steeltoe

总结

现在网络上类似这样的文章很多,自己再单独写一份就是为了做个笔记,跟各位大牛交流一下,自己也学习学习。

.net core+Spring Cloud学习之路 二的更多相关文章

  1. .net core+Spring Cloud学习之路 一

    文章开头唠叨两句. 2019年了,而自己参加工作也两年有余了,用一个词来概括这两年多的生活,就是:“碌碌无为”. 也不能说一点收获都没有,但是很少.2019来了,我立志要打破现状,改变自己,突破自我. ...

  2. Spring Cloud进阶之路 | 二:服务提供者(discovery)

    1 创建父项目 以前文所述,以spring boot 2.1.7.RELEASE为基,spring cloud版本为Greenwich.SR2,spring cloud alibaba版本为2.1.0 ...

  3. Spring Cloud 学习笔记(二)——Netflix

    4 Spring Cloud Netflix Spring Cloud 通过自动配置和绑定到Spring环境和其他Spring编程模型惯例,为Spring Boot应用程序提供Netflix OSS集 ...

  4. Spring Boot 学习之路二 配置文件 application.yml

    一.创建配置文件 如图所示,我们在resources文件夹中新建配置文件application.yml   结构图 二.一些基本配置 server: port: 8090 //配置端口 session ...

  5. Spring Cloud学习笔记【二】Eureka 服务提供者/服务消费者(ribbon)

    Ribbon 是 Netflix 发布的开源项目,主要功能是为 REST 客户端实现负载均衡.它主要包括六个组件: ServerList,负载均衡使用的服务器列表.这个列表会缓存在负载均衡器中,并定期 ...

  6. Spring Cloud gateway 网关服务二 断言、过滤器

    微服务当前这么火爆的程度,如果不能学会一种微服务框架技术.怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习.说没有时间?没有精力?要学俩个框架?而Spring C ...

  7. spring cloud 学习(9) - turbine stream无法在eureka注册的解决办法

    turbine是啥就不多解释了,初次接触的可以移步spring cloud 学习(4) - hystrix 服务熔断处理 拉到最后看一下,turbine stream默认情况下启动成功后,eureka ...

  8. Spring框架学习之IOC(二)

    Spring框架学习之IOC(二) 接着上一篇的内容,下面开始IOC基于注解装配相关的内容 在 classpath 中扫描组件 <context:component-scan> 特定组件包 ...

  9. 搭建高可用服务注册中心-Spring Cloud学习第一天(非原创)

    文章大纲 一.Spring Cloud基础知识介绍二.创建单一的服务注册中心三.创建一个服务提供者四.搭建高可用服务注册中心五.项目源码与参考资料下载六.参考文章   一.Spring Cloud基础 ...

随机推荐

  1. mysql 几种日志

    mysql 5.5 有以下几种日志: 错误日志(error log): log-err 查询日志(general  query log): log 慢查询日志: -log-slow-queries  ...

  2. 《深入分析Java web技术内幕》读书笔记(一)

    1.什么时网站 网站就是利用Html工具制作用于展示特定内容的网页集合,网站也是一种软件. 网站的开发过程需要考虑其完整性.目的性.扩展性和安全性. 2.C/S架构跟B/S架构 C/S架构:客户端和服 ...

  3. git常用命令学习笔记

    安装好git之后即可使用git来管理项目了,鼠标右键点击 git bash出现命令黑窗口,接下来执行git指令即可. https://git-scm.com/book/zh/v2 以下整理了git常用 ...

  4. mybatis源码解析之Configuration加载(三)

    概述 上一篇我们主要分析了下<environments>标签下面,transactionManager的配置,上问最后还有个遗留问题:就是在设置事物管理器的时候有个autocommit的变 ...

  5. java算法02 - 树

    树是一类重要的非线性结构.而二叉树是一种比较重要的树,接下来我们来了解二叉树的相关内容. 二叉搜索树:每个节点都不比它左子树的任意元素小,而且不比它的右子树的任意元素大. /** * 二叉搜索树 O( ...

  6. day13笔记

    1:StringBuffer(掌握) (1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了 一个字符串缓冲区类.StringBuffer供我们使 ...

  7. 域名排序 sort uniq awk

    [root@web01 ~]# sort [-fbMnrtuk] [file or stdin] 选项与参数:-f :忽略大小写的差异,例如 A 与 a 视为编码相同:-b :忽略最前面的空格符部分: ...

  8. Oracle分析函数及常用函数: over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名

    (1)   函数:  over()的作用及用法:    -- 分区(分组)求和. sum() over( partition by column1 order by column2 )主要用来对某个字 ...

  9. python 面试题之 生成器

    如下函数执行结果是什么? 答案:  [20, 21, 22, 23] 核心要点:本题重点在对生成器的理解, 生成器具有惰性机制 ,只有在取值的时候才执行. 解析: for 循环遍历列表,执行了两次 第 ...

  10. 从n个数中随机选出k个数,并判断和是不是素数

    洛谷p1036 #include<iostream> #include<math.h> using namespace std; ],n,k;//依照题目所设 bool isp ...