Spring Cloud Eureka的使用

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Spring Cloud Eureka

🐻 一个服务注册与发现的组件
🐻🐻🐻🐻🐻🐻ZT😄🐻🐻🐻🐻🐻🐻🐻🐻🐻

  • 注重AP服务可用性

🐻🐻🐻🐻🐻🐻XZL🐻🐻🐻🐻🐻🐻🐻🐻🐻

开始使用

1.创建项目

  • 创建一个maven项目(自定义项目名)
  • 在该项目下新建一个模块(01-eureka)maven项目
  • 在该模块下创建多个模块(springboot项目)
  • 创建模块1:eureka-server-01

1.1创建步骤:
在这里插入图片描述

直接点击下一步

配置项目信息
在这里插入图片描述

选择依赖

  • 服务端选择:

在这里插入图片描述

  • 客户端选择:(eureka discovery client+web)

在这里插入图片描述

最后配置模块名即可创建模块成功
在这里插入图片描述

1.2 修改pom.xml文件

将spring版本改为2.3.12.RELEASE

将java版本改成1.8将springcloud版本改成Hoxton.SR12

依赖代码:

<?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 https://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.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.pengke</groupId>
    <artifactId>eureka-server-01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-server-01</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
    </properties>
    <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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>netflix-candidates</id>
            <name>Netflix Candidates</name>
            <url>https://artifactory-oss.prod.netflix.net/artifactory/maven-oss-candidates</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

</project>

1.3 编写项目配置文件(我这里用的yml文件)

服务端配置:

server:
  port: 8761 #eureka默认端口 6379 8080 3306 8848
spring:
  application:
    name: eureka-server #应用名称,禁用特殊字符

客户端配置:

server:
  port: 8080 #客户端的端口没要求
spring:
  application:
    name: eureka-client-a
# 注册的含义,就是将自己的一些信息发送过去
eureka:
  client:
    service-url: #指定注册的地址
      defaultZone: http://localhost:8761/eureka

1.4 开启服务开启客户端

服务端(application文件中):

@EnableEurekaServer //开启eureka注册中心的功能

客户端(application文件中):

@EnableEurekaClient //开启客户端的功能

1.5 成功实现查看效果

浏览器访问:http://localhost:8761/

在这里插入图片描述

以上表示成功配置并使用注册中心

由于创建客户端步骤繁琐并且发现其它配置都一致只需要修改端口号即可这里示例一个简便创建步骤

1.1编辑配置
在这里插入图片描述

1.2:copy

在这里插入图片描述

这样即可实现在同应用下建立另一个实例

在这里插入图片描述

ok了

配置文件详解

服务端

server:
  port: 8761 #eureka默认端口 6379 8080 3306 8848
spring:
  application:
    name: eureka-server #应用名称,禁用特殊字符
eureka: #eureka配置分为三大类 server client 实例 eureka-server既是服务端也是客户端
  server:
    eviction-interval-timer-in-ms: 10000 #服务器间隔多少毫秒做定期删除操作
    renewal-percent-threshold: 0.85 # 续约百分比 超过85%应用没续约那么eureka会保护服务 不会剔除任何一个服务
  instance: # 实例的配置
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} #主机名称:应用名称:端口号
    hostname: localhost #主机名称或者服务的ip
    prefer-ip-address: true # 以ip形式显示具体服务信息
    lease-renewal-interval-in-seconds: 5 #服务实例续约时间的间隔

客户端

server:
  port: 8080 #客户端的端口没要求
spring:
  application:
    name: eureka-client-a
# 注册的含义,就是将自己的一些信息发送过去
eureka:
  client: # 客户端配置
    service-url: #指定注册的地址
      defaultZone: http://localhost:8761/eureka
    register-with-eureka: true # 可以不往eureka-server注册
    fetch-registry: true # 应用是否去拉取服务列表到本地
    registry-fetch-interval-seconds: 10 # 为了缓解服务列表脏读问题,时间越短脏读越少(浪费性能)
  instance:
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} #主机名称:应用名称:端口号
    hostname: localhost #主机名称或者服务的ip
    prefer-ip-address: true # 以ip形式显示具体服务信息
    lease-renewal-interval-in-seconds: 10 #服务实例续约时间的间隔

以上配置都在代码中以注解形式讲解

集群

集群可以创建多个Eureka应用互相之间同步客户端注册信息又可以独立提供服务发现与注册服务。

与之前不同的是client可指向多个地址

例如用逗号分隔:

defaultZone:http://peer1:8761/eureka/,http://peer2:8762/eureka/

还需修改主机hosts文件

在结尾加上

主要是将本机ip地址取个别名与服务端配置名对应

127.0.0.1 peer1
127.0.0.1 peer2

集群的配置就如同上所说

服务发现

假设多个客户端向服务端注册客户端互相联系访问即为服务发现

  • 通过服务的应用名称找到服务的具体实例的过程(服务发现)

示例步骤:

  1. 在客户端a编写controller
  • DiscoveryClient是springclound内部提供的一个属性,用于获取服务列表
  • 通过.getInstances 获取实例信息(参数名传服务名称)
package com.pengke.eurekaclienta02.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class DiscoveryController {
    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("test")
    public String doDiscovery(String serviceName){
        //这就是服务发现  通过服务应用名称找到服务的具体信息
        List<ServiceInstance> instances=discoveryClient.getInstances(serviceName);
        instances.forEach(System.out::println);
        ServiceInstance serviceInstance=instances.get(0);//列表第一项
        String ip=serviceInstance.getHost();//获取ip
        int port=serviceInstance.getPort();//获取port端口
        System.out.println(ip+"port:"+port);

        return instances.get(0).toString();
    }
}

  1. 客户端b配置instance信息

    server:
      port: 8081 #客户端的端口没要求
    spring:
      application:
        name: eureka-client-b
    # 注册的含义,就是将自己的一些信息发送过去
    eureka:
      client:
        service-url: #指定注册的地址
          defaultZone: http://localhost:8761/eureka
      instance:
        prefer-ip-address: true
        instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
        hostname: localhost
        lease-renewal-interval-in-seconds: 10 #续约时间
    

    最终启动服务端启动两个客户端浏览器进行访问

    http://localhost:8080/test?serviceName=应用名称
    

    访问路径为客户端a的访问地址/请求的接口?serviceName=应用名称(可小写)

最终页面展示内容

在这里插入图片描述

出现这一步就代表成功了(通过应用名称找到服务的ip和端口)~
over🐻

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring