Eureka注册中心

Eureka注册中心

Eureka 是 Netflix 发布的一个开源的服务发现组件,主要提供了以下两个作用:

服务注册和发现:Eureka 可以让微服务应用程序在启动时自动向 Eureka 注册中心注册自己,包括服务实例的 IP 地址、端口号、主机名等元数据信息。同时,客户端也可以通过 Eureka 注册中心查询并发现可用的服务实例。

高可用性和容错性:由于 Eureka 的架构采用了分布式的设计模式,通过维护多个 Eureka Server 的集群来保证服务的高可用性和容错性。这样即使某个 Eureka Server 发生故障或宕机,其他 Eureka Server 仍然可以继续服务,从而确保整个服务注册和发现系统不会出现单点故障。

总之,Eureka 提供了一种方便的方式来实现服务注册和发现,并且通过分布式架构来保证服务的高可用性和容错性,是构建微服务架构中不可或缺的重要组件。

实践的步骤包括:

搭建eureka-server

1.创建eureka-server服务

在cloud-demo父工程下,创建一个子模块(普通的maven工程):

2.引入SpringCloud为eureka提供的starter依赖:

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

3.给eureka-server服务编写一个启动类,一定要添加一个@EnableEurekaServer注解,开启eureka的注册中心功能:

package cn.itcat.eureka;

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer //启eureka的注册中心功能 public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class,args); } }

4.编写一个application.yml文件,内容如下:

server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka

5.启动微服务,然后在浏览器访问:http://127.0.0.1:10086

看到下面结果应该是成功了:

服务注册

将user-service和order-service注册到eureka-server中去。

1.在user-service和order-service的pom文件中,引入下面的eureka-client依赖:

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

2.配置文件

在user-service和order-service中,修改application.yml文件,添加服务名称、eureka地址:

user-service

spring:
  application:
    name: userservice  #服务名称
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

order-service

spring:
  application:
    name: orderservice  #服务名称
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

3.启动多个user-service实例

为了演示一个服务有多个实例的场景,添加一个SpringBoot的启动配置,再启动一个user-service。

首先,复制原来的user-service启动配置:

启动:

浏览器中刷新

注册成功!

服务发现

服务拉取和负载均衡

最后,我们要去eureka-server中拉取user-service服务的实例列表,并且实现负载均衡。

不过这些动作不用我们去做,只需要添加一些注解即可。

在order-service的OrderApplication中,给RestTemplate这个Bean添加一个@LoadBalanced注解:

修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法。修改访问的url路径,用服务名代替ip、端口:

访问http://localhost:8080/order/102

8081和8082都访问到了

直接负载均衡

负载均衡原理

SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。

自定义负载均衡策略

通过定义IRule实现可以修改负载均衡规则,有两种方式:

1.代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:

    //修改负载均衡规则为随机(全局)
    @Bean
    public IRule randomRule(){
        return new RandomRule();
    }

2.配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:

userservice: # 给某个微服务(指定)配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 

测试

8081接收到请求101,102,103

8082接收到请求104

饥饿加载

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

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon:
  eager-load:
    enabled: true
    clients: userservice  #配置一个

ribbon: eager-load: enabled: true clients: #配置多个 -userservice -xxservice -xxservice

end
SpringCloud
Eureka
SpringBoot

评论区

暂无评论