zoukankan      html  css  js  c++  java
  • 升级微服务架构2:服务注册

      微服务架构中,服务是最小的可伸缩的独立部署的单位,同一个服务提供可以有多个实例,这些实例都会注册到服务注册中心(Eureka Server)上进行统一的管理及调用的负载均衡。
      因Spring Cloud的是已Java为主要开发语言,本文会先讲Java语言的服务怎么注册到服务中心,然后按照这个逻辑移植到.net版本上。

      1.创建java版服务,并注册到服务中心

      1.1创建一个Eureka Client的Maven项目

      操作模式和上一篇使用Maven创建Eureka Server一样,模块名:userservice(用户服务)

      Eureka Client和web添加依赖:  

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

      创建Spring Boot 启动类并加上注解@SpringBootApplication和@EnableEurekaClient

      

      创建一个User实体,一个UserController类并注解为RestController,写一个返回用列表的方法。  

    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @RequestMapping("/getall")
        public List<User> getAll(){
            ArrayList<User> list=new ArrayList<>();
            User user1=new User();
            user1.setAge(10);
            user1.setName("小明");
            user1.setDeleted(false);
    
            User user2=new User();
            user2.setAge(12);
            user2.setName("小红");
            user2.setDeleted(true);
    
            list.add(user1);
            list.add(user2);
            return list;
        }

      1.2配置服务中心

      服务配置信息:

    server:
      port: 7771 #服务端口
    
    eureka:
      client:
        registerWithEureka: true #是否注册
        fetchRegistry: true #启用客户端缓存
        serviceUrl:
          defaultZone: http://peer1:8881/eureka/,http://peer2:8882/eureka/ #注册到两个服务中心
    
    spring:
      application:
        name: userservice #服务名

      启动该服务,刷新下服务中心,可以看到userservice已经注册成功

      

      访问userservice获取用户的方法,成功返回Json数据

      

      1.3启动多个userservice服务实例并注册

      IEDA修改启动配置,去掉启动仅单个实例 ,Edit Configurations->选择要修改的配置->去掉勾选Single Instance only

      

      

      修改userservice的端口为7772启动一个实例,启动成功后再修改端口为7773启动,这样就有三个实例注册到了服务中心

      

      Java版的服务注册就完成了,安装这个思路使用.net core来创建个同样的服务并注册到服务中心

      2.创建.net core服务,并注册到服务中心

      2.1创建.net core API项目 

       创建一个空解决方案MicroService,然后创建一个.net core web api项目UserService

      

      选择.net core 2.1,项目类型选择API,暂时不用HTTPS,去掉勾选

      

      在NuGet包管理器中搜索Pivotal.Discovery.Client,选择.net core版Pivotal.Discovery.ClientCore,这个组件相当于Java中的Eureka Client组件,用于服务注册,现在最新稳定版为2.0.1,非Core版本也可以,不过最近一次更新是2017年9月份了,这里选择Core版。

      

      2.2配置服务中心

      服务注册配置可参考steeltoe官方文档,和java版的Eureka Client配置大致类似  

      配置文件:   

    {
      "Logging": {
        "LogLevel": {
          "Default": "Warning"
        }
      },
      "AllowedHosts": "*",
    /*服务注册配置*/
      "spring": {
        "application": {
          "name": "userservice"/*服务名*/
        }
      },
      "eureka": {
        "client": {
          "serviceUrl": "http://localhost:8881/eureka/", /*Eureka服务地址*/
          "shouldRegisterWithEureka": true,/*是否注册到Eureka Server*/
          "shouldFetchRegistry": true /*开启本地缓存*/
        },
        "instance": {
          "port": 7779 /*服务端口*/
        }
      }
    }

      经实践发现Eureka配置文件中的serviceUrl只能用一个地址,多个服务中心地址不知道为什么注册不上,而且只能用localhost或IP,如127.0.0.1,使用peer1,peer2也注册不上,什么原因暂时还没去研究。

      在Program类中指定不同环境配置文件

      参考:http://steeltoe.io/docs/steeltoe-discovery/#reading-configuration-values
      如不指定配置文件会导致报错:ArgumentException: Discovery client type UNKNOWN, check configuration,原因就是找不到配置文件,配置服务发现时可加Configuration.GetSection("eureka").GetChildren().Any()来判断能否取到eureka节点的配置文件。

      

      在Startup启动类ConfigureServices方法中添加服务发现客户端配置,在Configure方法中添加使用服务发现客户端的方法

      这个类似于Spring Boot的启动类中设置Eureka Client注解一样

      

      创建一个User实体,属性和Java端一样,注意java的Getter和Setter对应的字段是小写开头,且默认is开头的序列化会去掉前面的is。

      

      同样创建一个UserController和一个getAll方法,返回用户列表。

      2.3服务启动配置并注册到服务中心

      在项目属性->调试中选择IIS Express调试,并将端口设置为服务端口7779

       

      或者直接在launchSettings.json改端口

      

      启动VS调试该服务,浏览器调用该API,http://localhost:7779/user/getall

      成功返回Json信息

      

      再刷新下Eureka Server,发现服务以及注册成功。

       

      到此.net core的微服务也已成功完成注册。

  • 相关阅读:
    工厂模式 ioc dom4j 反射之我的一点理解
    hibernate中注解方式中的控制反转
    java中的数据存储(堆,栈) 很重要
    hibernate中映射关系总结
    三极管使用方法
    OC OD介绍
    HP Jack介绍
    Jlink接口的Jtag和SWD接口定义
    什么是域什么是工作组
    Ubuntu安装.run文件
  • 原文地址:https://www.cnblogs.com/townsend/p/9525745.html
Copyright © 2011-2022 走看看