前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Spring Cloud】004-Eureka服务注册与发现

【Spring Cloud】004-Eureka服务注册与发现

作者头像
訾博ZiBo
发布于 2025-01-06 07:55:37
发布于 2025-01-06 07:55:37
10600
代码可运行
举报
运行总次数:0
代码可运行

一、Eureka概述

1、什么是Eureka

Eureka:[juˈriːkə] (读音:尤瑞卡)发现;

Netflix在设计Eureka时,遵循的就是API原则;

Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是基于REST的服务,用于定位服务,以实现云端中间件层服务发现和故障转移,服务注册与发现对于微服务来说是非常重要的,有了服务注册与发现,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了,功能类似于Dubbo的注册中心,比如Zookeeper;

2、原理

Eureka基本的架构:

①Springcloud 封装了Netflix公司开发的Eureka模块来实现服务注册与发现 (对比Zookeeper);

②Eureka采用了C-S的架构设计,EurekaServer作为服务注册功能的服务器,他是服务注册中心

③而系统中的其他微服务,使用Eureka的客户端连接到EurekaServer并维持心跳连接。这样系统的维护人员就可以通过EurekaServer来监控系统中各个微服务是否正常运行,Springcloud 的一些其他模块 (比如Zuul) 就可以通过EurekaServer来发现系统中的其他微服务,并执行相关的逻辑;

Eureka 包含两个组件:

Eureka ServerEureka Client.

Eureka Server 提供服务注册,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会储存所有可用服务节点的信息,服务节点的信息可以在界面中直观地看到;

Eureka Client 是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳 (默认周期为30秒) 。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除掉 (默认周期为90s);

三大角色:

Eureka Server:提供服务的注册与发现(类似Zookeeper);

Service Provider:服务生产方,将自身服务注册到Eureka中,从而使服务消费方能够找到;

Service Consumer:服务消费方,从Eureka中获取注册服务列表,从而找到所消费的服务;

二、构建Eureka注册中心

1、常规步骤:

第一步:导入依赖;

第二步:编写配置文件;

第三步:开启功能@EnableXXX;

第四步:配置类;

2、创建新模块springcloud-eureka-7001(普通Maven模板)

第一步:导入依赖
代码语言:javascript
代码运行次数:0
运行
复制
<?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">
    <parent>
        <artifactId>springcloud</artifactId>
        <groupId>com.zibo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud-eureka-7001</artifactId>
    <!--导包-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
        <!--热部署工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>


</project>
第二步:配置文件
代码语言:javascript
代码运行次数:0
运行
复制
server:
  port: 7001

# Eureka配置
eureka:
  instance:
    hostname: localhost # Eureka服务端实例名称
  client:
    register-with-eureka: false # 是否向eureka注册中心注册自己
    fetch-registry: false # 如果为false,则表示自己为注册中心
    service-url: # 监控页面
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
第三步:写主启动类,开启功能
代码语言:javascript
代码运行次数:0
运行
复制
package com.zibo.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer //服务端启动类,可以接受别人注册进来!
public class Eureka_7001 {
    public static void main(String[] args) {
        SpringApplication.run(Eureka_7001.class,args);
    }
}
第四步:启动测试

三、服务注册、信息配置、自我保护机制

1、在服务提供者springcloud-provider-dept-8001注册服务

第一步:在pom.xml中导入Eureka依赖坐标
代码语言:javascript
代码运行次数:0
运行
复制
        <!--在服务提供者里面添加Eureka依赖坐标-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
第二步:在application.yaml中进行配置
代码语言:javascript
代码运行次数:0
运行
复制
server:
  port: 8001

# mybatis配置
mybatis:
  type-aliases-package: com.zibo.springcloud.pojo
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

# spring配置
spring:
  application:
    name: springcloud-provider-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource #数据源
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/zb1?serverTimezone=UTC
    username: root
    password: zibo15239417242

# Eureka的配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/
第三步:在主启动类里面加入@EnableEurekaClient注解
代码语言:javascript
代码运行次数:0
运行
复制
package com.zibo.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

//启动类
@SpringBootApplication
@EnableEurekaClient //自动在服务启动后自动注册到Eureka中
public class DeptProvider_8001 {
    public static void main(String[] args) {
        SpringApplication.run(DeptProvider_8001.class,args);
    }
}
第四步:测试

步骤:启动eureka_7001——启动服务提供者provider-dept_8001——访问监控面板;

监控面板地址:http://localhost:7001/

补充:

修改eureka的默认描述信息;

配置:

代码语言:javascript
代码运行次数:0
运行
复制
server:
  port: 8001

# mybatis配置
mybatis:
  type-aliases-package: com.zibo.springcloud.pojo
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

# spring配置
spring:
  application:
    name: springcloud-provider-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource #数据源
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/zb1?serverTimezone=UTC
    username: root
    password: zibo15239417242

# Eureka的配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/
  instance:
    instance-id: springcloud-provider-dept8001 # 修改eureka的默认描述信息

结果:

2、关闭dept-8001服务出发自我保护机制

EureKa自我保护机制:好死不如赖活着

一句话总结就是:某时刻某一个微服务不可用,eureka不会立即清理,依旧会对该微服务的信息进行保存!

默认情况下,当eureka server在一定时间内没有收到实例的心跳,便会把该实例从注册表中删除(默认是90秒),但是,如果短时间内丢失大量的实例心跳,便会触发eureka server的自我保护机制,比如在开发测试时,需要频繁地重启微服务实例,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews threshold和Renews(last min),当后者(最后一分钟收到的心跳数)小于前者(心跳阈值)的时候,触发保护机制,会出现红色的警告:**EMERGENCY!EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT.RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEGING EXPIRED JUST TO BE SAFE.**从警告中可以看到,eureka认为虽然收不到实例的心跳,但它认为实例还是健康的,eureka会保护这些实例,不会把它们从注册表中删掉;

该保护机制的目的是避免网络连接故障,在发生网络故障时,微服务和注册中心之间无法正常通信,但服务本身是健康的,不应该注销该服务,如果eureka因网络故障而把微服务误删了,那即使网络恢复了,该微服务也不会重新注册到eureka server了,因为只有在微服务启动的时候才会发起注册请求,后面只会发送心跳和服务列表请求,这样的话,该实例虽然是运行着,但永远不会被其它服务所感知。所以,eureka server在短时间内丢失过多的客户端心跳时,会进入自我保护模式,该模式下,eureka会保护注册表中的信息,不在注销任何微服务,当网络故障恢复后,eureka会自动退出保护模式。自我保护模式可以让集群更加健壮;

但是我们在开发测试阶段,需要频繁地重启发布,如果触发了保护机制,则旧的服务实例没有被删除,这时请求有可能跑到旧的实例中,而该实例已经关闭了,这就导致请求错误,影响开发测试。所以,在开发测试阶段,我们可以把自我保护模式关闭,只需在eureka server配置文件中加上如下配置即可:eureka.server.enable-self-preservation=false,不推荐关闭!

3、完善监控信息

第一步:在dept-8001的pom.xml中导入依赖
代码语言:javascript
代码运行次数:0
运行
复制
<?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">
    <parent>
        <artifactId>springcloud</artifactId>
        <groupId>com.zibo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud-provider-dept-8001</artifactId>
    <dependencies>
        <!--在服务提供者里面添加Eureka依赖坐标-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
        <!--actuator:完善监控信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--我们需要拿到实体类,所以需要配置api module-->
        <dependency>
            <groupId>com.zibo</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--jetty-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <!--热部署工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>

</project>
第二步:在application.yaml配置更多信息

4、在dept-8001的DeptController添加方法用于获取服务信息

第一步:添加方法
代码语言:javascript
代码运行次数:0
运行
复制
package com.zibo.springcloud.controller;

import com.zibo.springcloud.pojo.Dept;
import com.zibo.springcloud.service.DeptService;
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.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

//提供Restful服务!
@RestController
public class DeptController {

    @Autowired
    private DeptService deptService;

    @Autowired
    private DiscoveryClient client;

    @PostMapping("/dept/add")
    public boolean addDept(Dept dept){
        return deptService.addDept(dept);
    }

    @GetMapping("/dept/get/{id}")
    public Dept get(@PathVariable("id") long id){
        return deptService.queryById(id);
    }

    @GetMapping("/dept/get")
    public List<Dept> addDept(){
        return deptService.queryAll();
    }

    //获取服务的信息
    @GetMapping("/dept/discovery")
    public DiscoveryClient discovery(){
        //获取微服务列表的清单
        List<String> services = client.getServices();
        System.out.println("discovery=>services:" + services);
        //得到一个具体的微服务信息,通过application名字
        List<ServiceInstance> instances = client.getInstances("SPRINGCLOUD-PROVIDER-DEPT");
        for (ServiceInstance instance : instances) {
            System.out.println("getHost:" + instance.getHost() + ";getPort:" + instance.getPort() + ";getUri:" + instance.getUri() + ";getServiceId:" + instance.getServiceId());
        }
        return client;
    }
}

第二步:在主启动程序中添加服务发现注解

代码语言:javascript
代码运行次数:0
运行
复制
package com.zibo.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

//启动类
@SpringBootApplication
@EnableEurekaClient //自动在服务启动后自动注册到Eureka中
@EnableDiscoveryClient //服务发现
public class DeptProvider_8001 {
    public static void main(String[] args) {
        SpringApplication.run(DeptProvider_8001.class,args);
    }
}
第三步:测试

四、集群环境配置

1、创建两个新的模块

2、导包(直接从7001复制)

3、配置(从7001复制,改端口号)

4、写主启动类

5、集群

思路:

7001绑定7002和7003;7002绑定7001和7003;7003绑定7001和7002;

模拟三台服务器:

在hosts文件中添加:

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
127.0.0.1 eureka7003.com
配置:

(application.yaml,其他两个以此类推即可)

代码语言:javascript
代码运行次数:0
运行
复制
server:
  port: 7001

# Eureka配置
eureka:
  instance:
    hostname: eureka7001.com # Eureka服务端实例名称
  client:
    register-with-eureka: false # 是否向eureka注册中心注册自己
    fetch-registry: false # 如果为false,则表示自己为注册中心
    service-url: # 监控页面
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
      # 另外两个这么写,hostname要改成对应的eureka7002.com、eureka7003.com
      # defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/
      # defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/

6、运行测试

步骤:

7001——7002——7003;

访问:

eureka7001.com:7001

7、启动服务provider-dept-8001

第一步:修改配置文件,关联三台服务器
代码语言:javascript
代码运行次数:0
运行
复制
server:
  port: 8001

# mybatis配置
mybatis:
  type-aliases-package: com.zibo.springcloud.pojo
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

# spring配置
spring:
  application:
    name: springcloud-provider-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource #数据源
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/zb1?serverTimezone=UTC
    username: root
    password: zibo15239417242

# Eureka的配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: springcloud-provider-dept8001 # 修改eureka的默认描述信息

# info配置信息
info:
  app.name: zibo-springcloud
  company.name: com.zibo
第二步:访问http://localhost:8001/dept/get
第三步:访问http://localhost/consumer/dept/get
第四步:断掉一台服务器
第五步:访问http://localhost:8001/dept/get

五、CAP原则及对比ZooKeeper

1、CAP原则

RDBMS (MySQL\Oracle\sqlServer) ===> ACID;

NoSQL (Redis\MongoDB) ===> CAP;

2、ACID是什么

A (Atomicity) 原子性;

C (Consistency) 一致性;

I (Isolation) 隔离性;

D (Durability) 持久性;

3、CAP是什么

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾;

C (Consistency) 强一致性;

A (Availability) 可用性;

P (Partition tolerance) 分区容错性;

CAP的三进二:CA、AP、CP

4、CAP理论的核心

一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求;

根据CAP原理,将NoSQL数据库分成了满足CA原则,满足CP原则和满足AP原则三大类:

CA:单点集群,满足一致性,可用性的系统,通常可扩展性较差;

CP:满足一致性,分区容错的系统,通常性能不是特别高;

AP:满足可用性,分区容错的系统,通常可能对一致性要求低一些;

5、作为分布式服务注册中心,Eureka比Zookeeper好在哪里

著名的CAP理论指出,一个分布式系统不可能同时满足C (一致性) 、A (可用性) 、P (容错性),由于分区容错性P再分布式系统中是必须要保证的,因此我们只能再A和C之间进行权衡。

Zookeeper保证的是CP;

Eureka保证的是AP;

Zookeeper保证的是CP:

当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接收服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但zookeeper会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30-120s,且选举期间整个zookeeper集群是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因为网络问题使得zookeeper集群失去master节点是较大概率发生的事件,虽然服务最终能够恢复,但是,漫长的选举时间导致注册长期不可用,是不可容忍的。

Eureka保证的是AP:

Eureka看明白了这一点,因此在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册时,如果发现连接失败,则会自动切换至其他节点,只要有一台Eureka还在,就能保住注册服务的可用性,只不过查到的信息可能不是最新的,除此之外,Eureka还有之中自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:

①Eureka不在从注册列表中移除因为长时间没收到心跳而应该过期的服务;

②Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点上 (即保证当前节点依然可用);

③当网络稳定时,当前实例新的注册信息会被同步到其他节点中;

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【Spring Cloud】007-Hystrix服务熔断
复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免失败;
訾博ZiBo
2025/01/06
610
【Spring Cloud】007-Hystrix服务熔断
SpringCloud:Eureka服务注册与发现
Eureka 其实就是一个 服务注册与发现的中心,也就是相当于我们前面做的一些生产者的服务需要注册到我们的注册中心,那么我们的消费者就不用把代码写死,而是可以去服务中心订阅对应的服务,获取服务的最新地址,并且进行逻辑解耦。
lwen
2018/07/23
8810
Eureka服务发现和注册
文章目录 1. Eureka - 服务发现和注册 2. 服务端 3. 客户端 4. 细节的完善 4.1. 微服务名称的改变 4.2. 访问信息显示IP信息提示 4.3. 微服务info内容的说明(客户端) 5. 自我保护机制 6. 服务发现(不重要) 7. 集群配置 7.1. 服务端的配置 7.2. 客户端 8. 完整的配置信息 8.1. 服务端 8.2. 客户端 9. Eureka设置用户名和密码访问 10. Eureka和zookepper的区别 11. 参考文章 Eureka - 服务发现和注册
爱撒谎的男孩
2019/12/31
6550
【Spring Cloud】005-Ribbon负载均衡
Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具;
訾博ZiBo
2025/01/06
1300
【Spring Cloud】005-Ribbon负载均衡
Eureka服务注册与发现
  Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理
别团等shy哥发育
2023/02/25
4570
Eureka服务注册与发现
Eureka服务注册与发现
在这个例子中,Eureka就是大型商场,就是一个服务中心。加了服务端注解@EnableEurekaServer之后就可以开启服务中心了,然后商家就是客户端,要加@EnableEurekaClient之后就可以去注册了。至于消费者,直接去消费
chenchenchen
2019/09/03
8160
Eureka服务注册与发现
02Eureka服务注册与发现
访问:C:\Windows\System32\drivers\etc 下的 host 文件,添加如下内容
Remember_Ray
2020/10/29
3260
02Eureka服务注册与发现
SpringCloud微服务:Eureka组件之服务注册与发现
角色职责如下: 1)、Register:服务注册中心,它是一个Eureka Server ,提供服务注册和发现功能。 2)、Provider:服务提供者,它是一个Eureka Client ,提供服务。 3)、Consumer:服务消费者,它是一个Eureka Cient ,消费服务。
知了一笑
2019/07/19
7550
SpringCloud微服务:Eureka组件之服务注册与发现
SpringCloud之Eureka
Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理。
shaoshaossm
2022/12/27
2480
SpringCloud之Eureka
服务发现(Discovery)基于Eureka注册中心
日常开发中,有时候需要将服务的信息暴露给同事,方便调用联调,可以直接针对服务提供一个详细的接口。
鱼找水需要时间
2023/02/16
2740
服务发现(Discovery)基于Eureka注册中心
springcloud Eureka(续)
需要先写一个Eureka的服务中心 创建一个module为例 EurekaService
暴躁的程序猿
2022/03/24
1880
springcloud Eureka(续)
【Spring Cloud】003-Rest学习环境搭建
訾博ZiBo
2025/01/06
560
【Spring Cloud】003-Rest学习环境搭建
【Spring Cloud】009-Config
微服务意味着要将单体应用中的业务拆分成一个个子服务, 每个服务的粒度相对较小,因此系统中会出现大量的服务,由于每个服务都需要必要的配置信息才能运行,所以一套集中式的, 动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml,那上百的的配置文件要修改起来,岂不是要发疯!
訾博ZiBo
2025/01/06
760
【Spring Cloud】009-Config
【Spring Cloud】008-Zuul路由网关
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而**过滤器功能则负责对请求的处理过程进行干预,**是实现请求校验,服务聚合等功能的基础。Zuul和Eureka进行整合, 将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。 注意:Zuu|服务最终还是会注册进Eureka; 提供:代理+路由+过滤三大功能!
訾博ZiBo
2025/01/06
630
【Spring Cloud】008-Zuul路由网关
狂神说SpringCloud学习笔记[通俗易懂]
笔记整理来源 B站UP主狂神说https://www.bilibili.com/video/BV1jJ411S7xr
全栈程序员站长
2022/08/14
8620
狂神说SpringCloud学习笔记[通俗易懂]
SpringCloud笔记
修改C:\Windows\System32\drivers\etc 下的hosts文件,添加
CBeann
2023/12/25
1920
SpringCloud笔记
Springcloud:Eureka服务注册与发现
@EnableEurekaServer加上个注解就是Eureka的服务端了,我们并不需要写什么业务员,启动之后访问
冷环渊
2021/10/19
4940
SpringCloud服务注册与发现之Eureka
在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。 它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。一句话讲解:好死不如赖活着 综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留)也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。
cheese
2023/10/25
5140
SpringCloud服务注册与发现之Eureka
SpringCloud的入门学习之概念理解、Eureka入门
  答:微服务强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题、提供落地对应服务的一个服务应用,狭意的看,可以看作Eclipse里面的一个个微服务工程/或者Module模块。
别先生
2019/11/26
4260
SpringCloud的入门学习之概念理解、Hystrix断路器
1、分布式系统面临的问题,复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。
别先生
2019/12/02
4080
相关推荐
【Spring Cloud】007-Hystrix服务熔断
更多 >
目录
  • 一、Eureka概述
    • 1、什么是Eureka
    • 2、原理
      • Eureka基本的架构:
      • Eureka 包含两个组件:
      • 三大角色:
  • 二、构建Eureka注册中心
    • 1、常规步骤:
    • 2、创建新模块springcloud-eureka-7001(普通Maven模板)
      • 第一步:导入依赖
      • 第二步:配置文件
      • 第三步:写主启动类,开启功能
      • 第四步:启动测试
  • 三、服务注册、信息配置、自我保护机制
    • 1、在服务提供者springcloud-provider-dept-8001注册服务
      • 第一步:在pom.xml中导入Eureka依赖坐标
      • 第二步:在application.yaml中进行配置
      • 第三步:在主启动类里面加入@EnableEurekaClient注解
      • 第四步:测试
      • 补充:
    • 2、关闭dept-8001服务出发自我保护机制
      • EureKa自我保护机制:好死不如赖活着
    • 3、完善监控信息
      • 第一步:在dept-8001的pom.xml中导入依赖
      • 第二步:在application.yaml配置更多信息
    • 4、在dept-8001的DeptController添加方法用于获取服务信息
      • 第一步:添加方法
    • 第二步:在主启动程序中添加服务发现注解
      • 第三步:测试
  • 四、集群环境配置
    • 1、创建两个新的模块
    • 2、导包(直接从7001复制)
    • 3、配置(从7001复制,改端口号)
    • 4、写主启动类
    • 5、集群
      • 思路:
      • 模拟三台服务器:
      • 配置:
    • 6、运行测试
      • 步骤:
      • 访问:
    • 7、启动服务provider-dept-8001
      • 第一步:修改配置文件,关联三台服务器
      • 第二步:访问http://localhost:8001/dept/get
      • 第三步:访问http://localhost/consumer/dept/get
      • 第四步:断掉一台服务器
      • 第五步:访问http://localhost:8001/dept/get
  • 五、CAP原则及对比ZooKeeper
    • 1、CAP原则
    • 2、ACID是什么
    • 3、CAP是什么
    • 4、CAP理论的核心
    • 5、作为分布式服务注册中心,Eureka比Zookeeper好在哪里
      • Zookeeper保证的是CP:
      • Eureka保证的是AP:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文