Spring Cloud Eureka使用----shock wave 2

408 阅读2分钟

单机版Eureka 搭建

第一步新增依赖

<?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>org.example</groupId>
    <artifactId>eureka_service</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>eureka_service</name> <!-- FIXME change it to the project's website -->
    <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>Finchley.SR2</spring-cloud.version>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

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

第二步配置文件yml

spring:
  application:
    name: eureka-service
server:
  port: 8701 # 端口自己决定
  # 指定当前eureka客户端的注册地址,也就是eureka服务的提供方,当前配置的服务的注册服务方
eureka:
  instance:
    prefer-ip-address: true
    hostname: eureka-center
    instance-id: eureka-service
  instance-info-replication-interval-seconds: 5
  client:
    registerWithEureka: false# 单点的时候设置为 false 禁止注册自身
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://localhost:${server.port}/eureka
    # eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上
    # 默认30s
  server:
    response-cache-update-interval-ms: 3000
    # 启用主动失效,并且每次主动失效检测时间间隔为3s
    eviction-interval-timer-in-ms: 3000
    # 关闭自我保护机制
    enable-self-preservation: false

第三步注解

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

开始运行

clipboard.png

服务搭建

我们下面创建一个服务client1

引入依赖

<?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>org.example</groupId>
    <artifactId>client1_service</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>client1_service</name> <!-- FIXME change it to the project's website -->
    <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>Finchley.SR2</spring-cloud.version>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <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-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--ribbon服务类负载均衡组件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
        <!--hystrix服务类熔断组件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <!-- 添加Fegin服务调用依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.netflix.ribbon</groupId>
            <artifactId>ribbon-eureka</artifactId>
            <version>2.2.5</version>
        </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>

</project>

添加注解

package org.example;

import org.example.config.MyRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

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

配置文件

server:
  port: 8702 # 端口自己决定
  # 指定当前eureka客户端的注册地址,也就是eureka服务的提供方,当前配置的服务的注册服务方
eureka:
  instance:
#    preferIpAddress: true
# 客户端在注册时使用自己的IP而不是主机名,缺省:false
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port} #注册中心右边的位置的显示
  client:
    serviceUrl:
#    注册中心地址
      defaultZone: http://localhost:8701/eureka
# 是否从Eureka获取注册信息,缺省:true
# 一般情况下,Eureka服务端是不需要的
    fetch-registry: true
spring:
  application:
    name: client1-service

启动服务

clipboard1.png

单服务多实例搭建

我们通常情况下单个服务都会启动多个实例 直接复制client1,新增clinet2和client3服务

clipboard2.png

将两个实例指向同一个注册中心地址

client:
    serviceUrl:
#    注册中心地址
      defaultZone: http://localhost:8701/eureka

集群版注册中心搭建

eureka8701配置

spring:
  application:
    name: eureka-service
server:
  port: 8701 # 端口自己决定
  # 指定当前eureka客户端的注册地址,也就是eureka服务的提供方,当前配置的服务的注册服务方
eureka:
  instance:
    prefer-ip-address: true
    hostname: eureka8701
  instance-info-replication-interval-seconds: 5
  client:
    registerWithEureka: true # 单点的时候设置为 false 禁止注册自身
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://eureka8701.com:${server.port}/eureka,http://eureka8700.com:8700/eureka
    # eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上
    # 默认30s
  server:
    response-cache-update-interval-ms: 3000
    # 启用主动失效,并且每次主动失效检测时间间隔为3s
    eviction-interval-timer-in-ms: 3000
    # 关闭自我保护机制
    enable-self-preservation: false

eureka8700配置

spring:
  application:
    name: eureka-service
server:
  port: 8700 # 端口自己决定

  # 指定当前eureka客户端的注册地址,也就是eureka服务的提供方,当前配置的服务的注册服务方
eureka:
  instance:
    prefer-ip-address: true
    hostname: eureka8700
  instance-info-replication-interval-seconds: 5
  client:
    registerWithEureka: true # 单点的时候设置为 false 禁止注册自身
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://eureka8700.com:${server.port}/eureka,http://eureka8701.com:8701/eureka
    # eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上
    # 默认30s
  server:
    response-cache-update-interval-ms: 3000
    # 启用主动失效,并且每次主动失效检测时间间隔为3s
    eviction-interval-timer-in-ms: 3000
    # 关闭自我保护机制
    enable-self-preservation: false

运行服务

clipboard3.png