• 微服务深入浅出(3)-- 服务的注册和发现Eureka


    现来说一些Eureka的概念:

    1、服务注册 Register

    就是Client向Server注册的时候提供自身元数据,比如IP和Port等信息。

    2、服务续约 Renew

    Client默认每隔30s发送一次心跳来服务续约,如果90s没有收到Client的心跳包,Server会将Client从注册列表中移除。

    3、获取服务注册信息 Fetch Register

    Eureka Client会从Eureka Server获取服务注册表信息,并将其缓存在本地。默认每30s更新一次。

    4、下线 Cancel

    Eureka Client在程序关闭的时候可以向Eureka Server发送下线请求立即移除注册表信息,需要手动调用代码:

    5、LoadBalancer缓存

    Ribbon在客户端维护了缓存定时刷新,避免每个请求都从Server获取注册信息,所以新注册的Provider可能会出现延迟。

    DiscoveryManager.getInstance().shutdownComponent();

    搭建Eureka Server

    配置文件:

    server:
      port: 9001
    eureka:
      instance:
        hostname: localhost
        prefer-ip-address: true
      client:
          register-with-eureka: false
          fetch-registry: false
          service-url:
            defaultZone: http://localhost:9001/eureka/

    启动类加注解@EnableEurekaServer:

    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerApplication.class, args);
        }
    }

    访问:http://localhost:9001/

    Eureka服务注册

    配置文件:

    server:
      port: 9006
    spring:
      application:
        name: hi-service
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:9001/eureka/

    启动类加注解@EnableEurekaClient:

    @SpringBootApplication
    @EnableEurekaClient
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }

    Eureka服务发现

    配置文件:

    server:
      port: 9008
    spring:
      application:
        name: eureka-consumer
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:9001/eureka/

    启动类加注解@EnableEurekaClient:

    @SpringBootApplication
    @EnableEurekaClient
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }

     

    Service层访问:

    @Service
    public class RibbonService {
        @Autowired
        RestTemplate restTemplate;
    
        public String hi() {
            return restTemplate.getForObject("http://hi-service/hi", String.class);
        }
    }

    可以看到,url已经使用application name去代替了ip+port的信息去请求服务。如果Eureka Service provider在配置文件中没有配置serviceId,则默认为配置文件中的服务名,也就是${spring.application.name}。

    创建Eureka Server服务集群

    多profile格式配置文件application.yml

    spring:
      application:
        name: discovery-cluster
    ---
    spring:
      profiles: discovery1
    server:
      port: 8761
    eureka:
      instance:
        hostname: discovery1
      client:
        service-url:
          default-zone: http://discovery2:8762/eureka
    
    ---
    spring:
      profiles: discovery2
    server:
      port: 8762
    eureka:
      instance:
        hostname: discovery2
      client:
        service-url:
          default-zone: http://discovery1:8761/eureka

    配置文件是通过两个Eureka Server互相注册,这里有三段配置,第一段配置为公共配置,配置了应用名称,第二段为名discovery1的配置,第三段为discovery2的配置。在项目启动可以通过 
    --spring.profiles.active={配置名称} 来启动不同的配置。

    java -jar discovery-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=discovery1 
    java -jar discovery-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=discovery2 

    在client端,只需要把 eureka.client.serviceUrl.defaultZone 改成相应的集群地址即可,多个服务用逗号分隔:

    eureka
        client
            serviceUrl
                defaultZone = http://discovery1:8761/eureka,http://discovery2:8761/eureka

     

     

  • 相关阅读:
    第15届创新英语大赛初赛第二阶段题目
    13.递归第一次
    13.递归第一次
    13.递归第一次
    13.递归第一次
    Algs4-1.3.19给出一段代码,删除链表的尾结点
    Algs4-1.3.18下面链表在代码的作用
    Algs4-1.3.17从文件中读取信息生成Transaction对象数组
    Algs4-1.3.16从文件中读取日期生成日期对象数组
    Algs4-1.3.15打印Queue中倒数第k个元素的值
  • 原文地址:https://www.cnblogs.com/ijavanese/p/9145366.html
Copyright © 2020-2023  润新知