在进行Eureka的搭建之前,先简单了解一下它的原理,可以参考一下这篇博客:

Eureka工作原理_技术无止境-CSDN博客_eurekaEureka 工作原理上节内容为大家介绍了,注册中心 Eureka 产品的使用,以及如何利用 Eureka 搭建单台和集群的注册中心。这节课我们来继续学习 Eureka,了解它的相关概念、工作流程机制等。Eureka 作为 Spring Cloud 体系中最核心、默认的注册中心组件,研究它的运行机制,有助于我们在工作中更好地使用它。Eureka 核心概念回到上节的服务注册调用示意图,服务提...https://blog.csdn.net/qwe86314/article/details/94552801

1、搭建Eureka服务端(EurekaServer)

(搭建高可用的注册中心也不难,Eureka直接支持)

第一步:添加Mavan依赖,引入SpringBoot、SpringCloud、SpringBoot-Euraka的相关依赖,并对应好版本:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.siemens.springcloud</groupId>
    <artifactId>eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>eureka-server</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Dalston.SR4</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2. 配置application.yml文件,修改默认配置,适应生产环境。

eureka:
  instance:
    hostname: localhost
  server:
    enable-self-preservation: false      # 关闭自我保护模式(默认为打开)
    eviction-interval-timer-in-ms: 5000  # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

3.注解启用类 :在启动类上添加@EnableEurekaServer注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

}

在application配置文件中进行一些具体的配置

配置完application可以用maven命令打包,以后直接启动就ok了

  1. 如何做到 server 高可用

server 两两相互注册:记住这里client的注册地址写上多个server(避免部分server挂掉后,重启无法注册)

application.yml

eureka:
client:
service-url:
defaultZone: http://eureka2:8762/eureka/ # 这里是配置两两注册的 server 地址
server:
enable-self-preservation: false # 设置是否为安全模式
spring:
application:
name: eureka # 配置应用名称
server:
port: 8761 # 配置服务端口

eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/
# instance:
# hostname: clientName # 自定义链接,不一定会用到
spring:
application:
name: client

成功搭建Eureka Server后,接着我们就可以将服务实例注册到该服务中心了,搭建客户端具体步骤如下: 

二、搭建Eureka客户端(EurekaClient)

1. 添加Mavan依赖 :加入Spring Boot和Spring Cloud相关依赖,并对应好版本;

Eureka 客户端的maven配置和服务器端配置基本相同,唯一不同的地方在于客户端需要设置健康状态信息,需要引入spring-boot-starter-actuator依赖,如下所示:

<dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. 注解启用类 :在启用类上加入@EnableEurekaClient注解;

在启用类上加入@EnableEurekaClient注解即可,通过该注解,项目下所有被@RestController注解的对外服务接口将可通过注册-发布的方式对外提供服务。

3. 配置application.yml文件 :修改默认配置,适应生产环境。

server:
  port: 8762
spring:
  application:
    name: service-hi
  #zipkin:
    #base-url: http://localhost:9411

eureka:
  instance:
    lease-renewal-interval-in-seconds: 5      # 心跳时间,即服务续约间隔时间(缺省为30s)
    lease-expiration-duration-in-seconds: 15  # 发呆时间,即服务续约到期时间(缺省为90s)
  client:
    registry-fetch-interval-seconds: 10 # 拉取服务注册信息间隔(缺省为30s)
    service-url:
      defaultZone: http://localhost:8761/eureka/
    healthcheck:
      enabled: true # 开启健康检查(依赖spring-boot-starter-actuator)

– 1、eureka.instance.lease-renewal-interval-in-seconds:
lease-renewal-interval-in-seconds,表示eureka client发送心跳给server端的频率。如果在leaseExpirationDurationInSeconds后,server端没有收到client的心跳,则将摘除该instance。除此之外,如果该instance实现了HealthCheckCallback,并决定让自己unavailable的话,则该instance也不会接收到流量,默认30秒。

– 2、eureka.instance.lease-expiration-duration-in-seconds:
lease-expiration-duration-in-seconds,表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该instance,该值默认为90秒。

– 3、eureka.client.registry-fetch-interval-seconds:
表示eureka client间隔多久去拉取服务注册信息,默认为30秒,对于api-gateway,如果要迅速获取服务注册状态,可以缩小该值,比如5秒。

配置结束之后,启动Spring-Boot程序,可以发现原来的注册界面多了一个注册的实例,则注册成功:

服务消费端

引入依赖,和服务端依赖一致
在这里插入图片描述

yml配置,也和服务端一致
在这里插入图片描述
主配置类的注解开启可以写可以不写

4.消费端使用

注入springcloud提供的服务发现,DiscoveryClient,用来获取服务的元数据信息
使用RestTemplate进行远程调用

 

Eureka总结

Eureka用于服务发现(注册中心)

服务A如何在众多的B服务中选择一个合适的?

A在自己的逻辑里面去实现如何找到合适的B服务(客户端发现,这里是Eureka采用的)

注册中心去寻找一个合适的B服务给A提供服务(服务的发现,代理的方式,例如nginx)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐