Eureka - 搭建

单节点配置

Eureka 配置 server端

新建 Maven项目

修改 pom文件

<?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">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>eureka</artifactId>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </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>

添加 bootstrap.yml 文件

server:
  port: 7900
eureka:
  client:
    #是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息
    register-with-eureka: false
    #是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
    fetch-registry: false
    #设置服务注册中心的URL,用于client和server端交流
    service-url:
      defaultZone: http://localhost:7900/eureka/

启动类上添加注解 @EnableEurekaServer

package com.qiankai.eureka;

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

/**
 * @author QianKai
 * @date 2020/9/13
 */
@EnableEurekaServer
@SpringBootApplication
public class AppEureka {
    public static void main(String[] args) {
        SpringApplication.run(AppEureka.class, args);
    }
}

启动项目

访问配置的地址和端口号

Client端配置

新建maven项目 eureak-client

修改pom文件

<?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">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>eureka-client</artifactId>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>

新增 bootstrap.yml文件

server:
  port: 8000
eureka:
  client:
    # 设置服务注册中心的url
    service-url:
      defaultZone: http://localhost:7900/eureka

启动类上加注解 @EnableEurekaClient

package com.qiankai.client;

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

/**
 * @author QianKai
 * @date 2020/9/13
 */
@EnableEurekaClient
@SpringBootApplication
public class AppEurekaClient {
    public static void main(String[] args) {
        SpringApplication.run(AppEurekaClient.class, args);
    }
}

启动项目

查看刚刚7900端口的 Eureka界面,发现多了一个实例

Eureka集群配置

第一个 Eureka Server 配置

构建步骤同上,只是配置文件需要修改,如下:

# 高可用集群配置

eureka:
  client:
    #是否将自己注册到Eureka Server,默认为true
    register-with-eureka: true
    #是否从eureka server获取注册信息
    fetch-registry: true
    #设置服务注册中心的URL,用于client和server端交流
    #此节点应向其他节点发起请求
    service-url:
      defaultZone: http://localhost:7901/eureka/
  instance:
    hostname: ek1.com #主机名
management:
  endpoint:
    shutdown:
      enabled: true
server:
  port: 7900 # web 端口配置

spring:
  application:
    name: EUREKA_SERVER_01

启动该节点,访问 Eureka界面,此时没有注册信息:

第二个 Eureka Server 配置

同上,修改配置文件:

# 高可用集群配置

eureka:
  client:
    #是否将自己注册到Eureka Server,默认为true
    register-with-eureka: true
    #是否从eureka server获取注册信息
    fetch-registry: true
    #设置服务注册中心的URL,用于client和server端交流
    #此节点应向其他节点发起请求
    service-url:
      defaultZone: http://localhost:7900/eureka/
  instance:
    hostname: ek2.com #主机名
management:
  endpoint:
    shutdown:
      enabled: true
server:
  port: 7901 # web 端口配置
spring:
  application:
    name: EUREKA_SERVER_02

启动该节点,发现注册了自己和另一个节点(原因是自己去另一个节点上注册了,然后另一个节点过来注册了,并且把自己的信息同步过来了):

客户端连接配置

配置文件中新增一个server连接的地址,多个地址之间使用逗号分隔,如下:

# 连接多个 Eureka Server

server:
  port: 8000
eureka:
  client:
    # 设置服务注册中心的url
    service-url:
      defaultZone: http://localhost:7900/eureka, http://localhost:7901/eureka # 多个地址之间用 , 分隔
  instance:
    instance-id: qiankai-client-01 #显示此名字(默认是当前项目http://localhost:8001)
    prefer-ip-address: true #访问路径可以显示ip地址
spring:
  application:
    name: API-CLIENT # 应用名称

启动客户端后,查看效果:

第一个Eureka上有注册信息:

第二个Eureka上也有注册信息:

在 Eureka Server配置 hostname的效果如下:

应用客户端开启监控

用于上报节点的信息,在Client中(不是Eureka Server)添加如下依赖:

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

配置文件中开启端点监控

# 开启端点监控
management:
  endpoints:
    web:
      exposure:
        include: health,info

此时,Eureka中的Client就可以点击访问该节点的状态了

默认端点
Spring Boot 2.0 的Actuator只暴露了health和info端点,提供的监控信息无法满足我们的需求

api端点功能

  • health
    会显示系统状态

  • shutdown
    用来关闭节点

开启远程关闭功能
management.endpoint.shutdown.enabled=true
使用Post方式请求端点
{
"message": "Shutting down, bye..."
}

  • autoconfig
    获取应用的自动化配置报告 beans

    获取应用上下文中创建的所有Bean

  • configprops
    获取应用中配置的属性信息报告

  • env
    获取应用所有可用的环境属性报告

  • mappings
    获取应用所有Spring Web的控制器映射关系报告

  • info
    获取应用自定义的信息

  • metrics
    返回应用的各类重要度量指标信息
    metrics节点并没有返回全量信息,我们可以通过不同的key去加载我们想要的值
    metrics/jvm.memory.max

posted @ 2020-09-13 15:34  它山之玉  阅读(283)  评论(0编辑  收藏  举报