Spring Cloud Eureka的使用

news2024/11/18 18:39:10

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🐻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP S/4HANA 采购订单处理操作详解

SAP S 4HANA Cloud 被 IDC 评为全球 SaaS 和云 ERP 系统领导者。SAP S4HANA Cloud是一套接近于零配置的系统&#xff0c;基于最佳业务实践的配置已经内嵌在标准版本中&#xff0c;可以让购买企业在第一时间内获得最全面的解决方案。本文就以其中最为常见的采购订单创建及处理流…

一页PPT自动生成短视频的研究

希望通过一些技术&#xff0c;将以前自己讲过的PPT转换成有解说的短视频&#xff0c;从而进行一些分发 旁白到语音 从文字转换成语音我们首先想到的就是TTS&#xff0c;这其中我也是用了各式各样的TTS&#xff0c;发现发音电子音非常强&#xff0c;听听起来很不舒服。后来发现…

Spring 事务和事务的传播机制

1.Spring 中事务的实现方式Spring 中的操作主要分为两类: 编程式事务 (了解)声明式事务编程式事务就是手写代码操作事务, 而声明式事务是利用注解来自动开启和提交事务. 并且编程式事务用几乎不怎么用. 这就好比汽车的手动挡和自动挡, 如果有足够的的钱, 大部分人应该都会选择自…

NPDP认证|如何实现产品的组合管理?

随着企业中研发项目类型和数量的增多,涉及的范围越来越宽广,内容越来越复杂,时效性也越来越强,传统的分散式的项目管理思想已经很难满足企业的需求。 为了使技术和资源能够得到有限的配置和利用,企业就需要把各种类型的研发项日进行有机的结合。 组合管理很重要吗? 答案是勿庸…

Vue知识点

Vue基础语法 插值操作 Mustache语法 可以直接写变量&#xff0c;也可以写简单的表达式 {{firstName lastName}}’ {{firstName lastName}} {{firstName}} {{lastName}} 其他指令使用 v-noce&#xff1a; <h2 v-once>{{message}}</h2> 某些情况下&#xff…

shell 脚本实现 k8s 集群环境下指定 ns 资源的 yaml 文件备份

shell 脚本实现 k8s 集群环境下指定 ns 资源的 yaml 文件备份需求说明功能实现shell 脚本实现shell 使用方式前置工具环境安装dump-k8s-yaml.sh 使用方式输入命令 bash ./dump-k8s-yaml.shdump-k8s-yaml.sh 应用举例dump-k8s-yaml.sh 输出日志信息参考文档需求说明 在基于 k8s…

【Java寒假打卡】Java基础-字符流

【Java寒假打卡】Java基础-字符流编码表字符串中的编码和解码问题字节流读取文本文件出现乱码的原因字符流读取中文的过程字符流写出数据字符流输出数据注意事项flush和close方法字符流读取数据案例-保存键盘录入的数据字符缓冲输入流字符缓冲输出流缓冲流的特有方法案例-读取文…

【算法】广度优先遍历 (BFS)

目录1.概述2.代码实现3.应用1.概述 &#xff08;1&#xff09;广度优先遍历 (Breadth First Search)&#xff0c;又称宽度优先遍历&#xff0c;是最简便的图的搜索算法之一。 &#xff08;2&#xff09;已知图 G (V, E) 和一个源顶点 start&#xff0c;宽度优先搜索以一种系…

让我用Python自制软件,看视频畅通无阻

前言 一个账号只能登录一台设备&#xff1f;涨价就涨价&#xff0c;至少还能借借朋友的&#xff0c;谁还没几个朋友&#xff0c;搞限制登录这一出&#xff0c;瞬间不稀罕了 这个年头谁还不会点技术了&#xff0c;直接拿python自制一个可以看视频的软件… 话不多说&#xff0…

终于弄懂了 非极大抑制 NMS

NMS的作用就是有效地剔除目标检测结果中多余的检测框&#xff0c;保留最合适的检测框。 以YOLOv5为例&#xff0c;yolov5模型的输入三个feature map的集合&#xff0c;加上batch的维度&#xff0c;也就是三维张量&#xff0c;即[batch&#xff0c;(p0∗p0p1∗p1p2∗p2)∗3&…

SWC步骤

纲要&#xff1a; SWC属于AUTOSAR的Component文件夹下&#xff0c;而Composition属于Composition文件夹下。 目录 1. Import "Data Type" and "Interface" information 2. Creat Software Component(SWC) 3. Create "Port" for this SWC 4.…

nexus raw 仓库代理(node-sass离线安装node-sass: Command failed)

问题背景 内网环境中使用 node 构建项目&#xff0c;项目中依赖了 node-sass&#xff0c;环境自动下载 node-saas 失败&#xff08;内网&#xff09;。 下面是构建 node-sass 的错误代码&#xff1a; [5/5] Building fresh packages... error /workspace/node_modules/node-…

nuxt概念

文章目录前言nuxt项目结构介绍网页导航文字显示&#xff08;商标&#xff09;package.jsonnuxt.config.js路由固定路由动态路由总结前言 首先了解下B2C模式&#xff0c;分前后台&#xff0c;后台一般为管理系统&#xff0c;不需要展示给过多的用户&#xff0c;而前台需要展示给…

2023年有哪些具备潜力的加密投资标的?

随着2022年一系列的黑天鹅事件&#xff08;Terra、Luna的暴雷、FTX、Three Arrows Capital等知名加密机构的破产&#xff09;&#xff0c;加密货币总市值已经从最高点的2.9万亿美元&#xff08;2021年的11月&#xff09;&#xff0c;下降到8500亿美元&#xff08;与2021年1月的…

NKOJ P7842 疫情防控

分析 这道题的本质就是找可以使得每座城市有且仅有一条道单行路进入该市的图有什么特点; 首先,我们假设图联通,则由于每个城市只有一条单行道可以进入,即一个城市必须有且仅有一条单行道与之配对,所以这个图至少要有nnn条边,即图中必须要有环才可以满足要求! 那如果图不连通…

Java多线程之读写锁ReentrantReadWriteLock类使用

在JDK中提供了一种读写锁ReentrantReadWriteLock类&#xff0c;相比ReentrantLock类&#xff0c;使用前者可以加快运行效率。ReentrantLock类是具有完全互斥排他的效果&#xff0c;即同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务&#xff0c;这样做虽然保证了…

【UE4 第一人称射击游戏】40-改变武器的可见性

上一篇&#xff1a;【UE4 第一人称射击游戏】39-“M4A1”武器设置本篇效果&#xff1a;步骤&#xff1a;打开“Weapon_M4A1”&#xff0c;删除带有“AK47”的那个骨架网格体打开事件图表&#xff0c;将“SkeletalMesh1”拖入打开“ThirdPersonCharacter”&#xff0c;在事件图表…

Docker:独具魅力的开源容器引擎

Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux 或 Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口&#…

MATLAB-控制系统模型之间的转换

系统的线性时不变&#xff08;LTI&#xff09;模型有传递函数&#xff08;tf&#xff09;模型、零极点增益&#xff08;zpk)模型和状态空间(ss&#xff09;模型,它们之间可以相互转换。模型之间的转换函数可以分为以下两类。第一类是把其他类型的模型转换为函数表示的模型自身&…

PHP多进程(一)

多进程的作用是一个程序启动多个进程。 一个程序启动起来本应该是一个进程&#xff0c;但它可作为父进程启动多个子进程来一起操作 形成并发操作 pcntl是php官方的多进程扩展,只能在linux环境使用 以下所有操作请在Linux环境下操作: 先认识两个函数,下面是官方文档地址: …