抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

搭建Eureka服务

Eureka的作用

  • 消费者如何获取服务提供者的具体信息
    • eureka也是服务,它会将自己也提交到注册中心,用于eureka集群之间通信
    • 服务提供者启动时,向eureka注册自己的信息
    • eureka保存这些信息
    • 服务消费者根据服务名称向eureka拉取提供者的信息
  • 如果有多个服务提供者,消费者该如何选择
    • 服务消费者根据负载均衡算法,从服务列表中挑选一个
  • 先非洲如何感知服务提供者的健康状态
    • 服务提供者会每隔30s向注册中心发送心跳请求,报告健康状态
    • eureka会更新记录服务列表信息,心跳不正常会被剔除
    • 消费者就可以拉取到最新的信息

添加依赖

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

启动注解

@EnableEurekaServer

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

配置文件

​ application.yml

server:
port: 5901
spring:
application:
name: eurekaserver # eureka的服务名称
eureka:
client:
service-url: # eureka 的地址信息
defaultZone: http://127.0.0.1:5901/eureka

注册服务

引入依赖

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

配置文件

spring:
application:
name: userServer # 你的服务名称
eureka:
client:
service-url: # eureka 的地址信息
defaultZone: http://127.0.0.1:5901/eureka

部署多个实例

IDEA

服务拉取

Service,OrderService

@Override
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2. 利用RestTemplate发起http请求,查询用户
String url = "http://userServer/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);
//3. 封装user到order
order.setUser(user);
// 4.返回
return order;
}

启动类,@LoadBalanced负载均衡配置

/**
* 创建 RestTemplate 并注入Spring容器
* @return
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}

Ribbon负载均衡

负载均衡原理

image-20221128114515696

负载均衡策略

Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则

类名 规则描述
RoundRobinRule 轮询规则,默认方法
AvailabilityFilteringRule 忽略并发过高和短路状态的服务器
WeightedResponseTimeRule 权重规则
ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择。
BestAvailableRule 忽略那些短路的服务器,并选择并发数较低的服务器。
RandomRule 随机规则
RetryRule 重试机制的选择逻辑

配置方法

  1. 在启动类中重写方法,返回值为你要的规则

    @Bean
    public IRule randomRule(){
    return new RandomRule();
    }
  2. 或者在application.yml中配置

    userServer:
    ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule# 负载均衡规则

懒加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时。

ribbon:
eager-load:
enabled: true #开启饥饿加载
clients: userServer

评论