Eureka注册中心

一、原理分析

1、消费者该如何获取服务提供的具体信息

服务提供者启动时向Eureka注册自己的信息,Eureka保存这些信息。消费者根据服务名称向Eureka拉取提供者信息

2、如果有多个服务提供者,消费者该如何选择?

服务消费者利用负载均衡算法,从服务列表中挑选一个

3、消费者如何感知服务提供者健康状态

服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态,Eureka会更新记录服务列表信息,心跳不正常会被剔除。消费者就可以拉取到最新的信息

EurekaServer:服务端

记录服务信息、心跳监控

EurekaClient:客户端

(1)服务提供者:注册自己的信息到EurekaServer,每隔30秒向EurekaServer发送心跳
(2)服务消费者:根据服务名称从EurekaServer拉去服务列表。基于服务列表做负载均衡,选中一个微服务后发起远程调用

二、EurekaServer实现

1、搭建EurekaServer服务

(1)引入依赖

<!--eureka服务端-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

(2)启动类添加注解开关

@EnableEurekaServer

(3)添加application.yml文件配置

server:
  port: 10001# 服务端口
spring:
  application:
    name: eurekaserver # eureka的服务名称
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10001/eureka
2、EurekaServer服务注册

(1)引入依赖

<!--eureka客户端依赖-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

(2)添加application.yml文件配置

spring:
  application:
    name: userservice# user服务的服务名称
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10001/eureka
3、服务拉取

(1)url访问路径,用服务名称代替ip、端口

String url = "http://userservice/user/" + order.getUserId();

(2)在启动类中的RestTemplate添加负载均衡注解

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

三、Ribbon负载均衡

(1)Ribbon负载均衡规则

规则接口是IRule。默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询

(2)负载均衡自定义两种方式

配置灵活,但修改时需要重新打包发布

@Bean
public IRule randomRule() {
  return new RandomRule();
}

直观、方便无需重新打包发布,但是无法做全局配置

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule  # 负载均衡规则
(3)Ribbon默认加载方式是懒加载。更改加载方式
ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients: # 指定饥饿加载的服务名称
      - userservice
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容