【微服务】SpringCloud-eureka光速入门

news2024/9/24 3:29:27

SpringCloud-eureka光速入门

一、Eureka 主要组件

二、工作流程

三、优势

四、Eureka-光速入门【重点】

4.1 案例准备

4.1.1 创建父工程 tingyi-shop

4.1.2 创建子工程 tingyi-goods

4.1.3 创建子工程 tingyi-order

4.1.4 案例调整

4.1.4.1 在order模块创建 RestTemplate对象

4.1.4.2 修改OrderController

4.1.4.2 重启并测试

4.2 为什么使用eureka

4.2 Eureka光速入门

4.2.1 创建EurekaServer

4.2.2 调整商品模块

4.2.3 调整订单模块

4.2.4 调整订单模块, 调用商品模块

4.2.4 测试

4.3 Eureka的安全性

4.4 Eureka的高可用

4.4.1 配置以及代码

4.4.2 测试

4.4.3 Eureka的细节


🎈边走、边悟🎈迟早会好

Eureka 是 Netflix 开源的一个服务注册和发现工具,主要用于构建分布式系统中的服务发现机制。它在 Spring Cloud 生态系统中广泛使用,尤其在微服务架构中扮演重要角色。

一、Eureka 主要组件

  1. Eureka Server:

    • 作为服务注册中心,负责管理服务实例的注册和心跳检测。
    • 服务实例在启动时向 Eureka Server 注册,并定期发送心跳以保持注册信息的有效性。
    • Eureka Server 通常部署为集群,确保高可用性和容错性。
  2. Eureka Client:

    • 是注册在 Eureka Server 上的服务实例。
    • 它可以是任何类型的微服务应用程序,在启动时向 Eureka Server 注册并定期发送心跳。
    • Eureka Client 也可以从 Eureka Server 获取其他已注册服务的信息,以实现服务间的调用和负载均衡。

二、工作流程

  1. 服务注册:

    • 服务实例在启动时向 Eureka Server 注册其自身的元数据信息,如 IP 地址、端口号、服务名称等。
  2. 服务心跳:

    • 注册后,服务实例定期向 Eureka Server 发送心跳请求,以表明其仍然活跃。若在一段时间内未收到心跳,Eureka Server 将认为该实例已失效,并将其从注册列表中移除。
  3. 服务发现:

    • 服务调用者(客户端)通过 Eureka Server 查询可用的服务实例列表,以实现服务调用。
    • Eureka Client 缓存这些信息,并定期从 Eureka Server 更新,确保负载均衡和高可用性。
  4. 负载均衡:

    • 客户端根据从 Eureka Server 获取的服务实例列表,实现客户端负载均衡。
    • 常见的负载均衡策略包括轮询、随机选择、加权轮询等。

三、优势

  • 高可用性: Eureka Server 支持集群部署,确保在某些节点故障时系统仍然可用。
  • 自我保护机制: 当 Eureka Server 检测到大量客户端失效时,进入自我保护模式,避免因网络分区等原因误判服务失效。
  • 易扩展性: 新的服务实例可以动态注册和发现,支持弹性扩展。

Eureka 在 Netflix 的微服务架构中得到了广泛应用,并成为 Spring Cloud 的核心组件之一,用于实现服务注册与发现。

四、Eureka-光速入门【重点

4.1 案例准备

4.1.1 创建父工程 tingyi-shop

pom.xml

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>
​
<packaging>pom</packaging>
​
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.2.8.RELEASE</version>
</parent>
​
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <!-- 版本号是按照伦敦地铁站的名字命名的 -->
      <version>Hoxton.SR4</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

4.1.2 创建子工程 tingyi-goods

pom.xml

<dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
</dependencies>

引导类

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

application.yml

server:
  port: 9001
#指定服务的名称
spring:
  application:
    name: TINGYI-GOODS

controller编写

@RestController
public class GoodsController {
​
    @RequestMapping("/query")
    public String query() {
        return "查询商品信息!";
    }
}

启动并查看效果

4.1.3 创建子工程 tingyi-order

pom.xml

<dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
</dependencies>

引导类

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

application.yml

server:
  port: 9002
#指定服务的名称
spring:
  application:
    name: TINGYI-ORDER
 

编写controller

@RestController
public class OrderController {
    @RequestMapping("/query")
    public String query(){
        return "查询订单";
    }
}

启动并查看效果

4.1.4 案例调整

​ 在查询订单时,同时也需要获取商品的信息,那么我们如何查询商品信息呢?

​ 我们可以通过spring为我们提供的RestTemplate 模板对象 远程调用商品模块中的 控制器。

4.1.4.1 在order模块创建 RestTemplate对象
@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
        return new RestTemplate(factory);
    }
​
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(5000);//ms
        factory.setConnectTimeout(15000);//ms
        return factory;
    }
}
4.1.4.2 修改OrderController

4.1.4.2 重启并测试

4.2 为什么使用eureka

问题分析

​ 如果 被调用方,ip或者端口号发生了变化,需要维护调用方的方法。

​ 如果调用方搭建了集群,需要对所有的调用方维护。

解决

​ Eureka就是帮助我们维护所有服务的信息,以便服务之间的相互调用

Eureka

4.2 Eureka光速入门

4.2.1 创建EurekaServer

创建eureka的server,创建moudle,并且导入依赖,在启动类中添加注解,编写yml文件

微服务名字可以叫做 tingyi-eureka

导入依赖

<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-web</artifactId>
    </dependency>
</dependencies>

启动类添加注解

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

编写yml配置文件

server:
  port: 8761      # 端口号
spring:
  application:
    name: EUREKA-SERVER
eureka:
  instance:
    hostname: localhost   # localhost
  client:
    # 表示是否将自己注册到Eureka Server,默认为true
    registerWithEureka: false
    # 表示是否从Eureka Server获取注册信息,默认为true。
    # 因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false
    fetchRegistry: false
    # 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

启动 eurekaServer并访问

4.2.2 调整商品模块

导入依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  <version>2.2.2.RELEASE</version>
</dependency>

在启动类上添加注解

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

在配置文件中添加如下代码

# 指定Eureka服务地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
    # Eureka服务中, 显示的当前search业务微服务的访问地址.
  instance:
    home-page-url: http://localhost:${server.port}  
  

重启服务,浏览器访问地址 : http://localhost:8761

4.2.3 调整订单模块

导入依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  <version>2.2.2.RELEASE</version>
</dependency>

在启动类上添加注解

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

在配置文件中添加如下代码

# 指定Eureka服务地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

重启服务,浏览器访问地址 : http://localhost:8761   浏览器下方就会出现

4.2.4 调整订单模块, 调用商品模块

远程调用 订单模块controller

@RestController
public class OrderController {
​
    @Autowired
    EurekaClient eurekaClient;
​
    //自动注入RestTemplate对象
    @Autowired
    RestTemplate template;
​
    @RequestMapping("/query")
    public String query(){
        //根据Eureka上注册的服务名称获取实例对象
        InstanceInfo instanceInfo = eurekaClient.getNextServerFromEureka("TINGYI-GOODS", false);
        //获取对应模块的url
        String url = instanceInfo.getHomePageUrl();
        ResponseEntity<String> responseEntity = template.getForEntity(url + "/query", String.class);
​
        //返回结果
        return "查询订单" + "&" + responseEntity.getBody();
    }
}

4.2.4 测试

与原来效果一致

4.3 Eureka的安全性

实现Eureka认证

tingyi_eureka 微服务导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

tingyi_eureka 微服务加入配置类:

package com.tingyi.config;
​
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
​
/**
 * @author tingyi
 */
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
​
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 忽略掉/eureka/**
        http.csrf().ignoringAntMatchers("/eureka/**");
        super.configure(http);
    }
}

tingyi_eureka 微服务编写配置文件, 加入Eureka的用户名和密码:

server:
  port: 8761      # 端口号
spring:
  application:
    name: EUREKA-SERVER
  # 指定Eureka的用户名和密码
  security:
    user:
      name: root
      password: root
eureka:
  instance:
    hostname: localhost   # localhost
  client:
    # 表示是否将自己注册到Eureka Server,默认为true
    registerWithEureka: false
    # 表示是否从Eureka Server获取注册信息,默认为true。
    # 因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false
    fetchRegistry: false
    # 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

其他服务想注册到Eureka上需要添加用户名和密码

eureka:
  client:
    service-url:
      defaultZone: http://用户名:密码@localhost:8761/eureka

4.4 Eureka的高可用

如果程序的正在运行,突然Eureka宕机了。

  • 如果调用方访问过一次被调用方了,Eureka的宕机不会影响到功能。

  • 如果调用方没有访问过被调用方,Eureka的宕机就会造成当前功能不可用。

搭建Eureka高可用

准备多台Eureka

采用了复制的方式,删除iml和target文件,并且修改pom.xml中的项目名称,再给父工程添加一个module

4.4.1 配置以及代码

让服务注册到多台Eureka, 下面是更改tingyi_order 业务微服务配置:

server:
  port: 9001
#指定服务的名称
spring:
  application:
    name: tingyi-order
# 指定Eureka服务地址
eureka:
  client:
    service-url:
      defaultZone: http://root:root@EUREKA-SERVER1:8761/eureka,http://root:root@EUREKA-SERVER2:8762/eureka

让服务注册到多台Eureka, 下面是更改tingyi_goods 业务微服务配置:

server:
  port: 9002
#指定服务的名称
spring:
  application:
    name: tingyi-goods
# 指定Eureka服务地址
eureka:
  client:
    service-url:
      defaultZone: http://root:root@EUREKA-SERVER1:8761/eureka,http://root:root@EUREKA-SERVER2:8762/eureka

让多台Eureka之间相互通讯, 更改 tingyi_eureka 微服务配置

server:
  port: 8761      # 端口号
spring:
  application:
    name: EUREKA-SERVER
  security:
    user:
      name: root
      password: root
eureka:
  instance:
    hostname: localhost   # localhost
  client:
    # 表示是否将自己注册到Eureka Server,默认为true
    registerWithEureka: true
    # 表示是否从Eureka Server获取注册信息,默认为true。
    fetchRegistry: true
    # 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址
    serviceUrl:
      defaultZone: http://EUREKA-SERVER1:8761/eureka,http://EUREKA-SERVER2:8762/eureka/
  # Eureka自我保护机制关闭, 当开启自我保护机制开启后,实例不会删除,
  # 导致部分请求会连接不存在的实例,客户端没有做重试或者熔断的话会出大量问题
  server:
    enable-self-preservation: false

配置域名(只是用来欺骗自己的电脑)

4.4.2 测试

演示Eureka集群

  • 先将 多个tingyi_eureka 微服务启动

  • 登录后,可以在任意管理页看到集群信息

4.4.3 Eureka的细节

EurekaClient启动时,将自己的信息注册到EurekaServer上,EurekaSever就会存储上EurekaClient的注册信息。

当EurekaClient调用服务时,本地没有注册信息的缓存时,去EurekaServer中去获取注册信息。

EurekaClient会通过心跳的方式去和EurekaServer进行连接。(默认30sEurekaClient会发送一次心跳请求,如果超过了90s还没有发送心跳信息的话,EurekaServer就认为你宕机了,将当前EurekaClient从注册表中移除

eureka:
  instance:
    lease-renewal-interval-in-seconds: 30      #心跳的间隔
    lease-expiration-duration-in-seconds: 90    # 多久没发送,就认为你宕机了

EurekaClient会每隔30s去EurekaServer中去更新本地的注册表

eureka:
  client:
    registry-fetch-interval-seconds: 30 # 每隔多久去更新一下本地的注册表缓存信息

Eureka的自我保护机制,统计15分钟内,如果一个服务的心跳发送比例低于85%,EurekaServer就会开启自我保护机制

  • 不会从EurekaServer中去移除长时间没有收到心跳的服务。

  • EurekaServer还是可以正常提供服务的。

  • 网络比较稳定时,EurekaServer才会开始将自己的信息被其他节点同步过去

eureka:
  server:
    enable-self-preservation: true  # 开启自我保护机制, 建议开发阶段设置为false, 不然服务停了, eureka中的信息还在.

 🌟感谢支持 听忆.-CSDN博客

🎈众口难调🎈从心就好

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

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

相关文章

安装和使用vue-router

1.安装vue-router npm install vue-router2.新建页面 views > home > home.vue <script setup lang"ts"></script><template><div>首页</div> </template><style scoped></style>2.配置路由 router > i…

从LLM中完全消除矩阵乘法,效果出奇得好,10亿参数跑在FPGA上接近大脑功耗

一直以来&#xff0c;矩阵乘法&#xff08;MatMul&#xff09;稳居神经网络操作的主导地位&#xff0c;其中很大原因归结为 GPU 专门针对 MatMul 操作进行了优化。这种优化使得 AlexNet 在 ILSVRC2012 挑战赛中一举胜出&#xff0c;成为深度学习崛起的历史性标志。 在这当中&a…

HBase 在统一内容平台业务的优化实践

作者&#xff1a;来自 vivo 互联网服务器团队-Leng Jianyu、Huang Haitao HBase是一款开源高可靠性、扩展性、高性能和灵活性的分布式非关系型数据库&#xff0c;本文围绕数据库选型以及使用HBase的痛点展开&#xff0c;从四个方面对HBase的使用进行优化&#xff0c;取得了一些…

PG 逻辑备份

导出模式&#xff1a; ph_dump 只能备份单个数据库&#xff0c;不会导出角色和表空间相关的信息&#xff0c;而且恢 复的时候需要创建空数据库。 pg_dumpall 可以备份所有数据库&#xff0c;并且备份角色&#xff0c;表空间。 调用pg_dump&#xff1a; 逻辑恢复的恢复顺序&…

国漫推荐07

玄幻、奇幻 1.侠岚系列 《侠岚》&#xff08;第1至6季&#xff09; 《画江湖之侠岚》&#xff08;侠岚第7季&#xff09; 2.《斗破苍穹》 三十年河东&#xff0c;三十年河西&#xff0c;莫欺少年穷&#xff01; 3.《武动乾坤》&#xff08;第1至4季&#xff09; 4.《妖神记》…

热点观察 丨《绝区零》下载量突破5000万、中国厂商占领全球手游收入榜

7月第2周.热点趋势 1. 《绝区零》全球下载量突破5000万 2. 《Character AI》爆火后内容管控变严 3. 芬兰手游厂商Supercell宣布开发新游戏 4. 6月全球手游收入榜中国厂商前十占六 5. 韩版《贪吃蛇大冒险》6月下载亮眼 6. 苹果、三星加入AI手机大战 7. 麦当劳推出首部短剧…

STM32智能仓储管理系统教程

目录 引言环境准备晶智能仓储管理系统基础代码实现&#xff1a;实现智能仓储管理系统 4.1 数据采集模块 4.2 数据处理与决策模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;仓储管理与优化问题解决方案与优化收尾与总结 1. 引言 智能仓储管理系统…

物流智能锁在物流货运智能锁控管理中的应用

一、物流锁控管理的痛点剖析 &#xff08;一&#xff09;货物安全风险高 在传统的物流运输中&#xff0c;常用的机械锁和普通电子锁安全性有限&#xff0c;容易被非法破解或撬开。据不完全统计&#xff0c;每年因货物被盗造成的经济损失高达数十亿。这导致货物在运输途中面临…

IDEA设置代码提示忽略大小写

一、设置代码提示为忽略大小写 IDEA代码提示默认是区分大小写的&#xff0c;设置为提示忽略大小写&#xff1a; Setting——Editor——Code Completion 如图

vue vite+three在线编辑模型导入导出

文章目录 序一、1.0.0版本1.新增2.编辑3.导出4.导入 二、2.0.0版本1. 修复模型垂直方向放置时 模型会重合4. 修复了导出导入功能 现在是1:1导出导入5. 新增一个地面 视角看不到地下 设置了禁止编辑地面 地面设置为圆形6. 新增功能 可选择基本圆形 方形 圆柱形等模型以及可放置自…

每天五分钟深度学习:向量化技术在神经网络中的应用

本文重点 向量化技术,简而言之,就是利用矩阵运算(而非传统的for循环)来执行大规模的计算任务。这种技术依赖于单指令多数据(SIMD)架构,允许一个指令同时对多个数据元素执行相同的操作。例如,在向量化加法中,不再需要逐个元素进行加法操作,而是可以一次性对整个向量执…

防御课第一次作业第一天笔记整理

网络安全概述 网络安全&#xff08;Cyber Security&#xff09;是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而遭受到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断 中国网络安全市场近年来只增不…

【微信小程序知识点】自定义构建npm

在实际开发中&#xff0c;随着项目的功能越来越多&#xff0c;项目越来越复杂&#xff0c;文件目录也变得很繁琐&#xff0c;为了方便进行项目的开发&#xff0c;开发人员通常会对目录结构进行优化调整&#xff0c;例如&#xff1a;将小程序源码放到miniprogram目录下。 &…

探索最佳海外代理服务商!你知道哪些?

近期收到很多读者回复&#xff0c;咨询我有没有好用的海外代理&#xff0c;许多业务会用到海外代理&#xff0c;给大家整理了几个亲测好用的代理&#xff0c;如果有需要可以去试一试。 一、711Proxy 711Proxy的覆盖范围广&#xff0c;住宅IP质量高&#xff0c;基本上爬虫业务…

【测开能力提升-fastapi框架】fastapi路由分发

1.7 路由分发 apps/app01.py from fastapi import APIRouterapp01 APIRouter()app01.get("/food") async def shop_food():return {"shop": "food"}app01.get("/bed") async def shop_food():return {"shop": "bed&…

华贝甄选干细胞科技,揭秘生命修复的奥秘

在探索生命奥秘的漫漫征途中&#xff0c;华贝甄选凭借干细胞科技的神奇力量&#xff0c;为您点亮健康与活力的希望之光。 我们深知&#xff0c;细胞是生命的基石&#xff0c;而干细胞则是这基石中蕴含的无限潜能。华贝甄选精心打造的干细胞疗法&#xff0c;如同神奇的魔法&…

网络编程学习之tcp

按下*&#xff08;星号&#xff09;可以搜索当前光标下的单词。 Tcp编程的过程 打开网络设备 Bind&#xff1a;给服务地址把ip号和端口号连接进去 Tcp是有状态的 Listen是进入监听状态&#xff0c;看有没有客户端来连接服务器 Tcp比udp消耗过多资源 Upd类似于半双工&#…

Excel第30享:基于辅助列的条件求和

1、需求描述 如下图所示&#xff0c;现要统计2022年YTD&#xff08;Year To Date&#xff1a;年初至今日&#xff09;各个人员的“上班工时&#xff08;a2&#xff09;”。 下图为系统直接导出的工时数据明细样例。 2、解决思路 Step1&#xff1a;确定逻辑。“从日期中提取出…

工厂人员定位为何如此重要?它有怎样的方案优势?

在工厂中安全性是最重要的一项指标&#xff0c;因它安全问题涉及到很多方面&#xff0c;不仅有经济损失还又人员伤亡&#xff0c;所以为了解决厂区安全隐患问题&#xff0c;就必须要用到工厂人员定位系统。它不仅可以降低安全隐患而且方便了日常管理&#xff0c;提升了厂区工作…

如何理解内容营销?与传统营销对比,内容营销有哪些特点?

在数字化浪潮的推动下&#xff0c;内容营销已经从一种新兴的营销手段成长为企业与消费者沟通的重要桥梁。它不仅仅是一种策略&#xff0c;更是一种艺术&#xff0c;一种通过分享有价值的信息来吸引、教育并留住目标受众的艺术。在这个信息爆炸、注意力稀缺的时代&#xff0c;内…