优秀的编程知识分享平台

网站首页 > 技术文章 正文

从0开始学习Eureka

nanyue 2025-03-10 18:56:29 技术文章 6 ℃

什么是Eureka?

Eureka是一个服务治理组件,主要用于实现分布式系统中的服务注册与发现。

搭建Eureka服务端

我们可以通过在一个基础的springboot工程中引入eureka的依赖实现一个eureka服务端。

pom依赖:


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server
    3.1.3

在启动类上添加注解

Application.java

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

增加配置

application.yml

server:
  port: 8761
eureka:
  client:
    #是否将自己注册到Eureka Server 默认为true:注册
    register-with-eureka: false
    #是否从Eureka Server获取注册的服务信息 默认为true:拉取
    fetch-registry: false
    service-url:
      #访问eureka时使用:http://localhost:9000 ,不要使用:http://localhost:9000/eureka/
      defaultZone: http://localhost:8761/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0
    enable-self-preservation: false
    renwal-percent-threshold: 0.60
    eviction-interval-timer-in-ms: 10000
    peer-node-read-timeout-ms: 30000
    peer-node-connect-timeout-ms: 10000

到这里我们开发的eureka服务端就完成了,然后启动看看。

搭建eureka客户端

和服务端相似,在一个基础的springboot工程中引入eureka-client依赖。

pom依赖:



    org.springframework.boot
    spring-boot-starter-web


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client
    3.1.3

在启动类上添加注解

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

添加配置

application.yml

spring:
  application:
    name: eureka-client
server:
  port: 9010
eureka:
  client:
    #是否将自己注册到Eureka Server 默认为true:注册
    register-with-eureka: true
    #是否从Eureka Server获取注册的服务信息 默认为true:拉取
    fetch-registry: true
    registryFetchIntervalSeconds: 10
    service-url:
      #访问eureka时使用:http://localhost:9000 ,不要使用:http://localhost:9000/eureka/
      defaultZone: http://localhost:8761/eureka/
  instance:
    lease-expiration-duration-in-seconds: 10
    lease-renewal-interval-in-seconds: 3

eureka客户端就完成了,然后启动看看。

Feign调用

Feign调用是指在微服务架构中,使用Feign这个声明式的Web服务客户端来简化HTTP API调用的过程。

简单的说就是把原生的http调用的代码包装成一个方法,在需要请求的地方直接调用这个方法就可以发起http请求。

下面展示一下,首先准备一个eureka,两个微服务,一个postman。

贴一下eureka-client的feign接口代码

@Component
@FeignClient(value = "eureka-client2")
public interface TestFeignClient {
    @GetMapping("test/1")
    String getOne();
}

贴一下eureka-client2的接口代码

@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("/1")
    public String getOne(){
        return "123456";
    }
}

接下来我们会把eureka-client作为请求方,eureka-client2作为服务方,然后使用postman请求eureka-client,之后eureka-client 会请求eureka-client2。结果如下,调用成功。

工作原理

eureka服务端将注册上来的服务统计在注册表(ConcurrentHashMap)中,当发生注册和下线动作时都会刷新注册表并同步到readWriteCacheMap中,同时readWriteCacheMap每180秒也会同步一次。每隔30秒服务列表同步到readOnlyCacheMap中,而eureka-client就是从readOnlyCacheMap中获取服务列表。

在源码中可以看到readWriteCacheMap过期时间是180秒,当readWriteCacheMap过期之后会从注册表同步服务列表信息。

最近发表
标签列表