• 服务注册和发现 Eureka


    1.项目结构如图

    图中的pom.xml 是父级pom

    eureka-client  和 eureka-server 是两个 Module项目,创建项目都可以用 Spring Initializr 方式创建

    spring-boot-starter-parent 为 2.1.1.RELEASE

    spring-cloud-dependencies 为  Greenwich.RC1

    spring-cloud-starter-netflix-eureka-server 为 2.0.2.RELEASE  

    spring-cloud-starter-netflix-eureka-client 为 2.0.2.RELEASE

    2.父级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.1.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.hc</groupId>
        <artifactId>demoparent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>demoparent</name>
        <packaging>pom</packaging>
        <description>Demo project for Spring Boot</description>
        <modules>
            <module>eureka-client</module>
            <module>eureka-server</module>
        </modules>
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.RC1</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</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>

    3.eureka-server 中 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>com.hc</groupId>
            <artifactId>demoparent</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <artifactId>eureka-server</artifactId>
        <dependencies>
            <!-- 引入关于 eureka-server的依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
                <version>2.0.2.RELEASE</version>
            </dependency>
        </dependencies>
    </project>

    application.yml 内容

    server:
      port: 8761
    eureka:
      client:
        register-with-eureka: false
        fetch-registry: false
        service-url:
          defaultZone: http://localhost:${server.port}/eureka/
      server:
        # 关闭自我保护机制
        enable-self-preservation: false
        # 每隔10s扫描服务列表,移除失效服务
        eviction-interval-timer-in-ms: 10000

    主程序入口加上 @EnableEurekaServer

    4.eureka-client 中 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>com.hc</groupId>
            <artifactId>demoparent</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <artifactId>eureka-client</artifactId>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- 引入关于 eureka-server的依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                <version>2.0.2.RELEASE</version>
            </dependency>
            <!--运行状态监控-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <!--mybatis配置 start-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.2.0</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.39</version>
            </dependency>
            <!--mybatis配置 end-->
        </dependencies>
    </project>

    application.yml 内容

    server:
      port: 8762
    spring:
      main:
        allow-bean-definition-overriding: true
      datasource:
        url: jdbc:mysql://192.168.0.1:3306/test1?useUnicode=true&characterEncoding=utf8
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
      application:
        name: eureka-client001
    eureka:
      client:
        #改变eureka server的检查方式,使用actuator 的health进行检查,可能会检查到数据库
        healthcheck:
          enabled: true
        service-url:
          defaultZone: http://localhost:8761/eureka/
      instance:
        prefer-ip-address: true
        instanceId: ${spring.application.name}:${server.port}
        # 每隔10s发送一次心跳
        lease-renewal-interval-in-seconds: 10
        # 告知服务端30秒还未收到心跳的话,就将该服务移除列表
        lease-expiration-duration-in-seconds: 30
        #改变eureka 服务端的 status 状态跳转查看页面
        status-page-url-path: /actuator/health
    management:
      endpoints:
        web:
          exposure:
            include: "*"
      server:
        port: 10111
        servlet:
          context-path: /
        ssl:
          enabled: false
      endpoint:
        health:
          show-details: always

    主程序入口加上 @EnableEurekaClient

    创建controller 接口

    package com.example.eurekaclient.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class clientController {
        @RequestMapping("/hello")
        public String hello() {
            return "hello this is client001";
        }
    }

    5.运行结果

    6.spring cloud eureka 配置说明

    见博客 https://www.cnblogs.com/li3807/p/7282492.html

    配置参数

    默认值

    说明

    服务注册中心配置

      

    Bean类:org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean

    eureka.server.enable-self-preservation

    false

    关闭注册中心的保护机制,Eureka 会统计15分钟之内心跳失败的比例低于85%将会触发保护机制,不剔除服务提供者,如果关闭服务注册中心将不可用的实例正确剔除

    服务实例类配置

      

    Bean类:org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean

    eureka.instance.prefer-ip-address

    false

    不使用主机名来定义注册中心的地址,而使用IP地址的形式,如果设置了

    eureka.instance.ip-address 属性,则使用该属性配置的IP,否则自动获取除环路IP外的第一个IP地址

    eureka.instance.ip-address

      

    IP地址

    eureka.instance.hostname

      

    设置当前实例的主机名称

    eureka.instance.appname

      

    服务名,默认取 spring.application.name 配置值,如果没有则为 unknown

    eureka.instance.lease-renewal-interval-in-seconds

    30

    定义服务续约任务(心跳)的调用间隔,单位:秒

    eureka.instance.lease-expiration-duration-in-seconds

    90

    定义服务失效的时间,单位:秒

    eureka.instance.status-page-url-path

    /info

    状态页面的URL,相对路径,默认使用 HTTP 访问,如果需要使用 HTTPS则需要使用绝对路径配置

    eureka.instance.status-page-url

      

    状态页面的URL,绝对路径

    eureka.instance.health-check-url-path

    /health

    健康检查页面的URL,相对路径,默认使用 HTTP 访问,如果需要使用 HTTPS则需要使用绝对路径配置

    eureka.instance.health-check-url

      

    健康检查页面的URL,绝对路径

    服务注册类配置

      

    Bean类:org.springframework.cloud.netflix.eureka.EurekaClientConfigBean

    eureka.client.service-url.

      

    指定服务注册中心地址,类型为 HashMap,并设置有一组默认值,默认的Key为 defaultZone;默认的Value为 http://localhost:8761/eureka ,如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。

    如果服务注册中心加入了安全验证,这里配置的地址格式为:http://<username>:<password>@localhost:8761/eureka 其中 <username> 为安全校验的用户名;<password> 为该用户的密码

    eureka.client.fetch-registery

    true

    检索服务

    eureka.client.registery-fetch-interval-seconds

    30

    从Eureka服务器端获取注册信息的间隔时间,单位:秒

    eureka.client.register-with-eureka

    true

    启动服务注册

    eureka.client.eureka-server-connect-timeout-seconds

    5

    连接 Eureka Server 的超时时间,单位:秒

    eureka.client.eureka-server-read-timeout-seconds

    8

    读取 Eureka Server 信息的超时时间,单位:秒

    eureka.client.filter-only-up-instances

    true

    获取实例时是否过滤,只保留UP状态的实例

    eureka.client.eureka-connection-idle-timeout-seconds

    30

    Eureka 服务端连接空闲关闭时间,单位:秒

    eureka.client.eureka-server-total-connections

    200

    从Eureka 客户端到所有Eureka服务端的连接总数

    eureka.client.eureka-server-total-connections-per-host

    50

    从Eureka客户端到每个Eureka服务主机的连接总数

    欢迎指正:haizi2014@qq.com
  • 相关阅读:
    远程连接redis服务
    redis的安装以及启动
    Easyui学习之右键菜单easyui-menu
    富文本编辑器KindEditor的使用
    zookeeper启动失败解决方法
    在TortoiseSVN使用clean up
    kettle性能优化
    idea快捷键
    Spring Cloud服务网关 Zuul Filter使用
    添加路由
  • 原文地址:https://www.cnblogs.com/hcfan/p/10118656.html
Copyright © 2020-2023  润新知