Eureka-Client 注册服务到 Eureka-Server

目录

本文导读

Eureka Client 创建流程

新建 Eureka-Client 应用

pom.xml 文件

application.yml 

启动测试

Instances currently registered with Eureka

spring.application.name

IP 地址代替主机名注册

Changing the Eureka Instance ID


本文导读

1、《Spring Boot 搭建 Eureka Servrer · 单机模式》中已经搭建好了 Eureka Server(应用名为EurekaServer_shenZhen ),本文将创建 Eureka Client 端应用(EurekaServer_cat),然后让 EurekaServer_cat 将服务注册到 EurekaServer_shenZhen 上。

2、看本文的同时可以结合 Spring Cloud Netflix 官网文档:Service Discovery: Eureka Clients

Eureka Client 创建流程

1、Include Eureka Client导入 Eureka Client 组件):

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

2、Registering with Eureka注册服务到 Server 端的注册表中):

1)导入 spring-cloud-starter-netflix-eureka-client 后,应用程序将自动向 Eureka 服务器注册,但是需要在配置文件中定位Eureka 服务器,application.yml:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

2)eureka.client.serverUrl.defaultZone:Eureka Server 端也会配置这一项,这里只需要指向 Server 端提供的地址即可。

当客户端向 Eureka Server 注册时,客户端会提供关于自身的元数据——例如主机、端口、健康标志 URL、主页和其他详细信息。Eureka Server 接收服务注册表中所有实例的心跳消息,如果心跳超时,则实例会从注册表中删除。

 

新建 Eureka-Client 应用

1、环境:Java JDK 1.8 + Spring Boot 2.1.3 + Spring Cloud(Greenwich.RELEASE) + Maven 3.5.2 + Eureka 2.1.0 + IDEA 14.

2、可以直接在 https://start.spring.io/ 网页上快速初始化应用进行创建,然后下载、解压,最后倒入到开发工具中。

3、也可以使用 IDEA 创建,如下所示为 IDEA 创建时的主要截图。

4、如下所示选择 web 组件(因为创建 web应用)、Eureka Discovery(Eureka 发现组件,也就是 Client组件)。

pom.xml 文件

1、应用生成之后 pom.xml 文件内容默认如下:

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/>
        <!-- lookup parent from repository -->
    </parent>
    <groupId>www.wmx.com</groupId>
    <artifactId>EurekaClient_cat</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>EurekaClient_cat</name>
    <description>Demo project for Spring Boot</description>

    <!-- 使用的 Spring Cloud 版本为 Greenwich-->
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <!--web 组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <!-- spring boot 测试模块-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Cloud 依赖管理-->
            <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>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>

</project>

application.yml 

1、根据官网“Registering with Eureka”指示,在全局配置文件中配置如下:

#配置 Eureka Client
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

启动测试

1、导入 spring-cloud-starter-netflix-eureka-client 后,配置 eureka.client.serverUrl.defaultZone,先就可以启动测试了

2、先开启《Spring Boot 搭建 Eureka Servrer · 单机模式》中的 Eureka Server 应用,如下所示启动 Eureka Server 成功,此时没有实例注册进来。

3、然后再启动本 Eureka Client 应用,如下所示,此时 Eureka Server 上可以看到注册的 Eureka Client 实例了。

Instances currently registered with Eureka

1、上面 Eureka Client 注册到了 Eureka Server 上,现在来开始研究细节,服务端的 Spring Eureka 主页截图如下:

spring.application.name

1、Application:默认显示为 UNKNOWN(未知),这可以通过 spring.application.name 进行配置 spring 应用名(官网

2、spring.application.name 用于配置 spring 应用名,通常只是用于标识 spring 应用,而 server.servlet.context-path 是指定 web 服务器访问的应用上下文。

3、在原来的基础上追加修改 applicatiom.yml 文件如下:

#web 服务器配置
server:
  servlet:
    context-path: /EurekaClient_cat  #应用上下文路径
  port: 8080  #服务器端口

#sping 配置
spring:
  application:
    name: eureka-client-cat     #建议 spring.application.name 值全部用小写

#配置 Eureka Client
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

4、重启 Eureka Client,然后 Eureka Server 主页的 Application 就会显示设置好的应用名称

IP 地址代替主机名注册

1、默认情况下 Eureka Client 使用主机名进行注册, 如上图所示。在某些情况下,Eureka Client 最好公布服务(自己)的 IP 地址,而不是主机名。

2、设置 eureka.instance.preferIpAddress 为 true,当应用程序向 eureka 注册时,客户端会使用IP地址而不是主机名。在原基础上追加如下:

#配置 Eureka Client
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    preferIpAddress: true

3、此时再次重启 Eureka Client,Eureka Server 主页变化如下:

4、默认情况下,如果程序无法确定主机名,也会将 IP 地址发送给 Eureka Server 进行注册。如果不想使用 IP注册,而就想要使用主机名进行注册,可以明确指定主机名,配置 eureka.instance.hostname:

eureka.instance.hostname=192.168.1.20   #直接输入主机名称指定
eureka.instance.hostname=${HOST_NAME}   #使用环境变量在运行时设置主机名

5、注意:这里介绍的是 “使用主机名还是使用IP地址进行服务注册”,主机名或者IP并不是注册后的服务实例的ID(Instance ID),Status 列下的绿色字表示 Instance ID。

Changing the Eureka Instance ID

1、一个普通的 Netflix Eureka 实例注册的后的 ID 等于它的主机名(此时spring.application.name、server.port等都未配置),形如:SC-201707281232,于是默认情况下每个主机只有一个服务。

2、Spring Cloud Eureka 提供了一个合理的默认值,其定义如下:

${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}}

也就是说默认情况下使用 “主机名:spring应用名:服务器端口” 作为注册的服务实例 ID 值。如:myhost:myappname:8080

3、如果自己想指定实例 ID值,则覆盖配置:eureka.instance.instanceId 即可,在原基础上修改如下,手动写死实例ID:

#配置 Eureka Client
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    preferIpAddress: true
    instanceId: wangMaoXiong

此时重启 Eureka Client 后,Eureka Server 主页如下:

4、此外官方还介绍了一种方式,就是 Eureka Client 每次向服务端进行注册的时候使用一串随机值(UUID),这样每次注册完成后 Instance ID 的都会不一样。application.yml:

eureka:
  instance:
    instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}

随机值来自后面的 vcap,如上所示生成的实例 ID 就是 spring应用民:UUID随机值,当然前面的 spring应用名可以缓存其它的值。

将如上这一行替换 application.yml 中的旧值,然后重启 Eureka Client ,此时 Eureka Server 主页如下:

猜你喜欢

转载自blog.csdn.net/wangmx1993328/article/details/88232648