小白学习SpringCloud之Eureka

前言

需要搭建springcloud项目,eureka是其中的一个模块,依赖主要继承父依赖
学习视频:b站狂神说

便于理解,我修改了本地域名=》这里!!!

127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
127.0.0.1 eureka7003.com

Eureka入门案例

在这里插入图片描述

eureka注册中心服务模块

springcloud-eureka-7001模块

1、导入eureka依赖

        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!--        热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

2、配置application.yml

server:
  port: 7001
# eureka 配置
eureka:
  instance:
    hostname: localhost # Eureka 服务端实例名称
  client:
    register-with-eureka: false  # 表示是否向服务器Eureka注册中心注册自己 这里本身激素服务器 false
    fetch-registry: false # 如果为false 则表示自己为注册中心
    service-url:  #       替换源码 默认this.serviceUrl.put("defaultZone", "http://localhost:8761/eureka/");
      # 单机
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

3、创建启动类并添加启动注解

@SpringBootApplication
@EnableEurekaServer // 开启EurekaServer 服务端启动类 可以接收别人注册
public class EurekaServer_7001 {
    // 启动访问http://localhost:7001/
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer_7001.class,args);
    }
}

4、启动Eureka服务&浏览器访问

http://localhost:7001/
在这里插入图片描述目前还没有任何服务注册到Eureka 所以显示是No instances available

springcloud-provider-dept-8001 模块

这是一个普通的springcloud项目,需要注册到Eureka中
在这里插入图片描述

springcloud服务模块

1、导入eureka依赖

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
    <version>1.4.6.RELEASE</version>
</dependency>

2、配置application.yml

eureka:
  client:
    service-url:  #       替换源码 默认this.serviceUrl.put("defaultZone", "http://localhost:8761/eureka/");
      defaultZone: http://localhost:7001/eureka/
  instance:
    instance-id: springcloud-provider-dept8001  # 修改eureka 上	Status默认描述信息

3、在启动类上添加EurekaClient启动注解

@EnableEurekaClient  // 自动在服务启动后自动注册到Eureka中

4、启动springcloud-provider-dept-8001

1.需要先启动Eureka服务
2.访问http://localhost:7001/

在这里插入图片描述Instances currently registered with Eureka中Application对于的是配置文件中spring.application.name: springcloud-provider-dept的值,Status对应的是eureka.instance.instance-id的值。

解决点击Status出现错误页面的问题

实际是http://localhost:8001/actuator/info地址,需要配置信息
在这里插入图片描述
解决出现错误页面的问题,下面使用actuator来解决。

1、导入启动actuator依赖

<!--        解决 eureka Status  actuator/info 完善监控信息-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>

2、在springcloud-provider-dept-8001项目中添加配置

# 导入 actuator
info:
  app.name: jiangyl-springcloud
  company.name: jiang.yl.com

3、点击Status的UP (1) - springcloud-provider-dept8001

再次启动springcloud-provider-dept-8001
也就是访问http://localhost:8001/actuator/info
在这里插入图片描述

如何获取到该服务信息

可以在提供者模块的Controller控制层自动注入DiscoveryClient类来实现


    // 还需要在启动类中添加 @EnableDiscoveryClient  服务发现  用于团队协助
    @GetMapping("/dept/discovery")
    //注册进来的微服务  , 获取一些信息
    public Object discovery(){
        // 获取微服务列表的清单
        List<String> services = client.getServices();
        System.out.println("discovery->services = " + services);
        // Eureka 中Application iD
        List<ServiceInstance> instances = client.getInstances("SPRINGCLOUD-PROVIDER-DEPT");
        for (ServiceInstance instance : instances) {
            System.out.println(
                    instance.getHost()+"\t"+
                    instance.getUri()+"\t"+
                    instance.getPort()+"\t"+
                    instance.getServiceId());
        }
        return this.client;
    }

重新启动该服务,控制台输出内容:

discovery->services = [springcloud-provider-dept]
localhost	http://localhost	:8001	8001	SPRINGCLOUD-PROVIDER-DEPT

访问接口。

访问浏览器地址http://localhost:8001/dept/discovery
在这里插入图片描述

获取服务配置信息

Eureka自我保护机制

如果已经注册到Eureka的服务,突然关闭服务了,默认等待90秒后刷新http://localhost:7001/浏览器会发现出现了下面的英文:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
翻译:紧急!Eureka可能错误地声称实例正在运行,但实际上它们并未运行。由于续订数量低于阈值,因此为了安全起见,这些实例并未过期。
在这里插入图片描述
自我保护机制:好死不如赖活着
一句话总结:某时刻某一个微服务不可以用了,eureka不会立刻清理,依旧会对该微服务的信息进行保存!

  • EurekaServer默认会在90秒内未收到微服务心跳时注销该实例。在网络分区故障时,健康的服务被错误注销。Eureka通过自我保护机制来避免这种情况,当短时间内丢失过多客户端时,EurekaServer会进入保护模式,不再注销服务,直到网络恢复。
  • 在自我保护模式中,EurekaServer会保护服务注册表中的信息,不再注销任何服务实例。当它收到的心跳数重新恢复到阈值以上时,该EurekaServer节点就会自动退出自我保护模式。它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。
  • 综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮和稳定
  • 在SpringCloud中,可以使用eureka.server.enable-se1f-preservation = false禁用自我保护模式【不推荐关闭自我保护机制】

Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪

eureka集群环境配置

为了演示的更接近真实集群环境,首先将C:\Windows\System32\drivers\etc\hosts文件添加一下配置:

# 模拟有3台主机,
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
127.0.0.1 eureka7003.com

1、复制eureka服务项目

复制文章前面提到的springcloud-eureka-7001项目:

在这里插入图片描述

创建3个eureka服务

2、修改对应全局配置文件

只是需要修改对应的配置文件即可:
springcloud-eureka-7001模块中的application.yml修改之后
hostname: eueka7001.com 本机域名
defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/需要关联的主机

server:
  port: 7001
# eureka 配置
eureka:
  instance:
    hostname: eureka7001.com # Eureka 服务端实例名称 电脑1hostname
  client:
    register-with-eureka: false  # 表示是否向服务器Eureka注册中心注册自己 这里本身激素服务器 false
    fetch-registry: false # 如果为false 则表示自己为注册中心
    service-url:  #       替换源码 默认this.serviceUrl.put("defaultZone", "http://localhost:8761/eureka/");
      # 单机
      #      defaultZone: http://localhost:7001/eureka/
      #集群
      # 连接其它主机电脑,域名:端口  
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

springcloud-eureka-7002模块中的application.yml

server:
  port: 7002


# eureka 配置
eureka:
  instance:
    hostname: eureka7002.com # Eureka 服务端实例名称 电脑2hostname
  client:
    register-with-eureka: false  # 表示是否向服务器Eureka注册中心注册自己 这里本身激素服务器 false
    fetch-registry: false # 如果为false 则表示自己为注册中心
    service-url:  #       替换源码 默认this.serviceUrl.put("defaultZone", "http://localhost:8761/eureka/");
      # 连接其它主机电脑,域名:端口   
      # 单机
      #      defaultZone: http://localhost:7001/eureka/
      #集群
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/


springcloud-eureka-7003模块中的application.yml

server:
  port: 7003

# eureka 配置
eureka:
  instance:
    hostname: eureka7003.com # Eureka 服务端实例名称 电脑3hostname
  client:
    register-with-eureka: false  # 表示是否向服务器Eureka注册中心注册自己 这里本身激素服务器 false
    fetch-registry: false # 如果为false 则表示自己为注册中心
    service-url:  #       替换源码 默认this.serviceUrl.put("defaultZone", "http://localhost:8761/eureka/");
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/

3、依次启动项目

在这里插入图片描述

启动eureka项目

访问对应的域名:端口号,如:http://eureka7001.com:7001/,结果如下:
在这里插入图片描述DS Replicas:注册中心中用于数据同步的相邻备份节点

提供者连接集群eureka

只需要修改本文章上述提到的springcloud-provider-dept-8001项目中的application.yml文件defaultZone:的值

server:
  port: 8001
 
eureka:
  client:
    service-url:  #       替换源码 默认this.serviceUrl.put("defaultZone", "http://localhost:8761/eureka/");
      # 端口号 7001 7002 7003  ,实际工作中是3台不同的电脑域名或IP
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7002.com:7003/eureka/
  instance:
    instance-id: springcloud-provider-dept8001  # 修改eureka 上	Status默认描述信息
 

先启动eureka集群,再启动提供者

访问三台eureka主机中的任意一个,都可以看到提供者信息,如:http://eureka7001.com:7001/

在这里插入图片描述

[每日鸡汤1/1]:学习不是一场短跑,而是一场马拉松。保持耐心和毅力,你会看到不一样的风景。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Maven的仓库、周期和插件

一、简介 随着各公司的Java项目入库方式由老的Ant改为Maven后&#xff0c;相信大家对Maven已经有了个基本的熟悉。但是在实际的使用、入库过程中&#xff0c;笔者发现挺多人对Maven的一些基本知识还缺乏了解&#xff0c;因此在此处跟大家简单地聊下Maven的相关内容&#xff0c…

如何把经验变成可以销售的“知识产品”?

知识付费&#xff0c;很多人想做&#xff0c;但是不知道如何把自己在某方面的“经验”&#xff0c;变成一个“知识产品”&#xff0c;那么这篇文章&#xff0c;我们就来聊聊如何从0打造一个知识产品 非常简单&#xff0c;一共六个步骤&#xff1a; 第一步&#xff1a;取名字&…

【深度学习】StabelDiffusion,Lora训练过程,秋叶包,Linux,SDXL Lora训练

文章目录 一、环境搭建指南二、个性化安装流程三、启动应用四、打开web五、开始训练 19.27服务器 一、环境搭建指南 打造一个高效且友好的开发环境&#xff0c;我们推荐使用以下简洁明了的中文资源&#xff1a; 项目源码获取&#xff1a; 通过以下命令轻松克隆项目及所有子模…

(一)Dataframes安装与类型 #Julia数据分析 #CDA学习打卡

目录 一. Julia简介 二. Dataframe构造方法 1&#xff09;访问列的方式 &#xff08;a&#xff09;判断严格相等 i. 切片严格相等是true ii. 复制严格相等是false &#xff08;b&#xff09;判断相等 i. 切片相等是true ii. 复制相等是true 2&#xff09;获取列名称 …

【Camera KMD ISP SubSystem笔记】CAM SYNC与DRQ③

DRQ什么时候调度Node去填写dependency ::Pipeline调度Node的sequenceId 0执行 Pipeline::ProcessRequest() { for (UINT nodeIndex 0; nodeIndex < m_orderedNodeCount ; nodeIndex) m_pDeferredRequestQueue->AddDef…

ROM修改进阶教程------如何去除安卓机型系统的开机向导 几种操作步骤解析

在和很多工作室定制化系统中。手机在第一次启动的时候系统都会进入设置向导,虽然可以设置手机的基本配置。但有很多客户需要去除手机的开机向导来缩短开机时间。确保手机直接进入工作状态。那么今天的教程针去除对开机向导的几种方法做个解析。机型很多版本不同。操作也有不同…

JS实现对用户名、密码进行正则表达式判断,网页跳转

目标&#xff1a;使用JS实现对用户名和密码进行正则表达式判断&#xff0c;用户名和密码正确时&#xff0c;进行网页跳转。 用户名、密码的正则表达式检验 HTML代码&#xff1a; <button type"submit" id"login-btn" /*onclick"login();alidate…

四川易点慧电子商务:抖音小店引领潮流,先进模式打造电商新标杆

在当下数字化浪潮中&#xff0c;电子商务行业如日中天&#xff0c;四川易点慧电子商务有限公司以其独特的视角和前瞻性的战略布局&#xff0c;成功在抖音小店领域崭露头角&#xff0c;成为行业内的佼佼者。本文将深入剖析四川易点慧电子商务的成功秘诀&#xff0c;以及其在抖音…

【openLooKeng-1.10.0集群环境安装部署】

openLooKeng-1.10.0集群环境安装部署 一、摘要二、正文1. 环境说明2. 集群拓扑图3. 安装过程(以root用户安装)3.1 在Coordinator和Worker两个节点都需要安装jdk1.8+3.2 在Coordinator上安装配置openLooKeng3.3 在Worker节点上进行配置openLooKeng3.4 在Coordinator节点上先启…

Spring Boot集成Redisson实现延迟队列

项目场景&#xff1a; 在电商、支付等领域&#xff0c;往往会有这样的场景&#xff0c;用户下单后放弃支付了&#xff0c;那这笔订单会在指定的时间段后进行关闭操作&#xff0c;细心的你一定发现了像某宝、某东都有这样的逻辑&#xff0c;而且时间很准确&#xff0c;误差在1s内…

OceanBase单机版安装体验

前情提要 上周OceanBase开发者大会过后&#xff0c;作为观察员也来体验一下OB的安装。业内有某个国产安装用了两周&#xff0c;这种其实有点劝退了。话说就是10年前&#xff0c;没搞过Oracle的人也不用两周安装一个数据库啊。今天看看OB的&#xff08;一体化&#xff09;安装。…

【震撼揭秘】Sentinel:一文读懂,那些让开发者“拍案叫绝”的核心特性!

关注微信公众号 “程序员小胖” 每日技术干货&#xff0c;第一时间送达&#xff01; 引言 在微服务架构中&#xff0c;流量治理是确保系统稳定性和高可用性的关键。Sentinel作为一项强大的流量控制组件&#xff0c;为我们提供了完善的解决方案。本文将带您走进Sentinel的世界…

第11章 Android特色开发——基于位置的服务

第11章 Android特色开发——基于位置的服务 本章中&#xff0c;将要学习一些全新的Android技术&#xff0c;这些技术有别于传统的PC或Web领域的应用技术&#xff0c;是只有在移动设备上才能实现的。 基于位置的服务&#xff08;Location Based Service&#xff09;。由于移动…

vue2实现字节流byte[]数组的图片预览

项目使用vantui框架&#xff0c;后端返回图片的字节流byte[]数组&#xff0c;在移动端实现预览&#xff0c;实现代码如下&#xff1a; <template><!-- 附件预览 --><div class"file-preview-wrap"><van-overlay :show"show"><…

IOS恢复

1、实验目的 通过本实验可以掌握&#xff1a; copy方式恢复IOS的步骤。TFTPDNLD方式恢复IOS的步骤。Xmodem方式恢复IOS的步骤。 2、实验拓扑 路由器IOS恢复的实验拓扑如下图所示。 3、实验步骤 如果工作中不慎误删除路由器IOS&#xff0c;或者升级了错误版本的IOS&#xff…

flutter笔记-webrtc使用1:依赖本地包socket.io-client

文章目录 1. 示例工程2. yaml 修改3. 使用4. socketio 关于自定义服务器自定义签名的问题封装成async和await方式 本文开始介绍webrtc的使用&#xff0c;阅读本文的前提是假设你已经使用过webrtc&#xff0c;了解webrtc的交互机制&#xff0c;不了解的可以看之前的文章&#xf…

【Java数据结构】初步认识ArrayList与顺序表

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x…

Flutter开发好用插件url_launcher详解-启动 URL

文章目录 url_launcher介绍安装用法错误处理自定义行为其他功能 url_launcher介绍 url_launcher 是一个 Flutter 插件&#xff0c;用于启动 URL。它支持网络、电话、短信和电子邮件方案。您可以使用它从您的 Flutter 应用程序中打开网站、拨打号码、发送短信或撰写电子邮件。 …

jvm知识点总结(二)

Java8默认使用的垃圾收集器是什么? Java8版本的Hotspot JVM,默认情况下使用的是并行垃圾收集器&#xff08;Parallel GC&#xff09; 如果CPU使用率飙升&#xff0c;如何排查? 1.先通过top定位到消耗最高的进程id 2.执行top -h pid单独监控该进程 3.在2中输入H&#xff…

【线性代数 C++】求逆矩阵

对于 n n n阶矩阵 A A A&#xff0c;如果有 n n n阶矩阵 B B B&#xff0c;使 A B B A E ABBAE ABBAE&#xff0c;则说 A A A是可逆的&#xff0c;并把 B B B称为 A A A的逆矩阵. A A A的逆矩阵记作 A − 1 A^{-1} A−1&#xff0c;则 B A − 1 BA^{-1} BA−1.若 ∣ A ∣ ≠…