升级微服务架构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的微服务也已成功完成注册。

posted @ 2018-08-23 20:15  唐 森  阅读(811)  评论(0编辑  收藏  举报