【微服务】1、一篇文章了解 Eureka 注册中心(理论加代码)

news2024/11/24 2:40:00

Eureka 的作用和案例使用

  • 一、Eureka 的作用(注册中心)
  • 二、Eureka 代码
    • (1) 搭建 Eureka 注册中心
      • ① 创建项目,引入 spring-cloud-starter-netflix-eureka-server 依赖【eureka 服务端依赖】
      • ② 编写 eureka 服务端启动类(启动类添加 @EnableEurekaServer 注解)
      • ③ 在项目的 application.yml 文件中配置如下信息
    • (2) 服务注册
      • ① 引入 spring-cloud-starter-netflix-eureka-client 依赖【eureka 服务端依赖】
      • ② 在项目的配置文件中配置微服务名称和地址信息
    • (3) 服务发现
      • ① 修改 order-service 项目的代码(用服务名代替 ip 和端口)
      • ② 给 order-service 项目的启动类OrderApplication 中的 RestTemplate 添加负载均衡注解 @LoadBalanced

一、Eureka 的作用(注册中心)

在这里插入图片描述
在这里插入图片描述

✏️ 【上图】服务器 127.0.0.0 部署了 order-service.jar 项目
✏️ 服务器 127.0.0.1 部署了 user-service.jar 项目
✏️ order-service.jar 项目的数据库中有一个订单表,订单表中有 user_id 字段。但该项目的数据库中是没有 user 数据的
✏️ 它只能向另一个服务器(127.0.0.1)的 order-service.jar 发送网络请求,进而获取用户数据

📝 服务提供者: 一次业务中,被其它微服务调用的服务(提供接口给其它微服务调用的服务)【如 user-service
📝 服务消费者: 一次业务中,调用其它微服务的服务(调用其它微服务提供的接口)【如 order-service


在这里插入图片描述

❓ 消费者该如何获取服务提供者的具体信息 ❓
📝 服务提供者启动时向 eureka 注册自己的地址信息
📝 eureka 保存这些信息
📝 消费者根据服务名称向 eureka 拉取提供者信息

❓ 如果有多个服务提供者,消费者该如何选择 ❓
📝 服务消费者利用负载均衡算法,从服务列表中挑选一个

❓ 消费者如何感知服务提供者健康状态 ❓
📝 服务提供者会每隔30秒向 eureka-server(Eureka 服务端) 发送心跳请求,报告健康状态
📝 eureka 会更新服务列表信息,心跳不正常会被剔除
📝 消费者可拉取到最新的服务提供者信息


📝 在 eureka 架构中,微服务角色有两类:
✏️ EurekaServer:服务端,注册中心
✒️ 记录服务信息
✒️ 心跳监控

✏️ EurekaClient:客户端
✒️ provider:服务提供者(如 user-service)

  • 注册自己的信息到 EurekaServer
  • 每隔30秒向 EurekaServer 发送心跳
    ✒️ consumer:服务消费者(如 order-service)
  • 根据服务名称从 EurekaServer 拉取服务列表信息
  • 基于服务列表做负载均衡,选一个微服务发起远程调用

二、Eureka 代码

(1) 搭建 Eureka 注册中心

🎨 需要创建一个全新的微服务
🎨 需要创建一个全新的项目

① 创建项目,引入 spring-cloud-starter-netflix-eureka-server 依赖【eureka 服务端依赖】

<project>

    <!-- 不加 parent 相等于没有 springboot 环境 -->
    <!-- 没有 springboot 配置的依赖版本信息 -->
    <!-- 进而会找不到 eureka 服务端依赖 -->
    <parent>
        <artifactId>cloud-demo</artifactId>
        <groupId>com.zgq</groupId>
        <version>1.0</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>eureka-server</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--eureka 服务端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
 
</project>

② 编写 eureka 服务端启动类(启动类添加 @EnableEurekaServer 注解)

@SpringBootApplication
@EnableEurekaServer // 启动 eureka 的服务端
public class EurekaApplication {

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

}

③ 在项目的 application.yml 文件中配置如下信息

server:
  port: 10086 # 服务的端口号

# 以下两个配置是在做服务的注册  
spring:
  application:
    name: eurekaserver # 微服务名称(Eureka 服务端本身也是一个微服务)
eureka:
  client: # eureka 客户端服务地址(eureka 也是微服务, eureka 也会把自己的地址信息添加进注册中心, 方便 eureka 集群)
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/ # eureka 地址信息(defaultZone 没有代码提示)

🔋 启动该项目,并访问可看到 eureka 服务默认的页面【http://localhost:10086/】

在这里插入图片描述

🔋 部署的一个微服务就是一个实例(Instance)

(2) 服务注册

🔋 将微服务注册到 Eureka 中

① 引入 spring-cloud-starter-netflix-eureka-client 依赖【eureka 服务端依赖】

 <dependencies>
	 <!--eureka 客户端依赖-->
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
     </dependency>
 </dependencies>

② 在项目的配置文件中配置微服务名称和地址信息

server:
  port: 8080
  
spring:
  application:
    name: orderservice
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka/

在这里插入图片描述


🔋 模拟一个服务(项目)在不同环境部署
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

🔋 无论是消费者还是提供者,引入 eureka-client 依赖,且知道 eureka 地址,即可完成服务注册

(3) 服务发现

🔋 服务拉取: 基于服务名称获取服务列表,然后对服务列表做负载均衡(根据负载均衡策略选择一个服务地址访问)

① 修改 order-service 项目的代码(用服务名代替 ip 和端口)

在这里插入图片描述

② 给 order-service 项目的启动类OrderApplication 中的 RestTemplate 添加负载均衡注解 @LoadBalanced

在这里插入图片描述

🔉 根据 Bilibili 黑马程序员学习
🔉 可一起讨论学习哦(私信我)
🔉 如有错误请不吝赐教

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

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

相关文章

WSO2使用Jenkins进行CI/CD

WSO2使用Jenkins进行CI/CD1. Tool Install1.0 Port 1.1 wso2 Install 1.2 Tool Install(git/vim/jenkins)2. Jenkins CI/CD2.1 Apictl Command2.1 Apictl Command5.2.1 Setting up the environment5.2.2 Setup repository5.2.3 Setup JFrog Artifactory5.2.4 Configure Jenkins…

计算机网络复习(四)

4-15.一个3200位长的TCP报文传到IP层&#xff0c;加上160位的首部后成为数据报。下面的互联网由两个局域网通过路由器连接起来。但第二个局域网所能传送的最长数据帧中的数据部分只有1200位。因此数据报在路由器必须进行分片。试问第二个局域网向其上层要传送多少比特的数据&am…

JavaScript进阶教程——原始类型与引用类型、对象拷贝(克隆)

文章目录序原始类型与引用类型基本概念两种类型的区别赋值比较函数传参对象拷贝对象克隆的使用场景&#xff1a;对象拷贝的分类&#xff1a;浅拷贝深拷贝序 解决JavaScript中比较烧脑的问题&#xff1a; 原始类型与引用类型闭包原型对象this关键字bind、apply、call异步编程 …

VMware Workstation 17.0 Pro SLIC Unlocker for Windows

VMware_Dell_2.6_BIOS-EFI64_Mod&#xff1b;macOS Unlocker&#xff0c;支持 macOS Ventura 请访问原文链接&#xff1a;VMware Workstation 17.0 Pro SLIC & Unlocker for Windows & Linux&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&…

Win11安装Linux子系统提示错误代码0x800701bc怎么办?

Win11安装Linux子系统提示错误代码0x800701bc怎么办&#xff1f;最近有用户想要在自己的电脑上安装一个Linux子系统来使用&#xff0c;但是在安装的过程中却出现了一些问题&#xff0c;提示错误代码0x800701bc。那么这个情况要怎么去处理&#xff0c;一起来看看解决的操作步骤吧…

GitHub 被超火的 ChatGPT 霸榜!

本期推荐开源项目目录&#xff1a;1. ChatGPT2. 基于 Node.js 的 ChatGPT3. Mac 版的 ChatGPT4. Chrome 插件的 ChatGPT最近 ChatGPT 火爆全球&#xff0c;估计各位的朋友圈都被这东西刷屏了吧。Chat GPT 是 OpenAI 推出的基于 GPT-3 技术的聊天机器人。它能自动理解用户发的消…

小度机器人3D数字勋章盲盒发售!抽盲盒,赢奖金!参与合成得稀有!

人气王小度机器人3D数字勋章盲盒来了&#xff01;玩法升级&#xff0c;福利更多&#xff01;参与活动&#xff0c;抽超限量稀有款&#xff0c;赢京东卡福利&#xff0c;更能合成珍藏款勋章&#xff01;【活动介绍】小度机器人是百度公司推出的智能交互机器人&#xff0c;依托百…

C++语法——详解智能指针的概念、实现原理、缺陷

目录 一.智能指针的概念 &#xff08;一&#xff09;.智能指针的历史 &#xff08;二&#xff09;.智能指针的使用 插曲.auto_ptr ①unique_ptr ②shared_ptr ③weak_ptr 二.智能指针的实现 三.智能指针的缺陷 &#xff08;一&#xff09;.循环引用 &#xff08;二&…

ChatGPT被玩坏了

大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 体验了一下最近火出圈的 ChatGPT&#xff0c;聊聊使用感受。 ChatGPT让我下岗&#xff1f;原理就不展开说了&#xff0c;因为我也不懂&#xff0c;写出来估计大家也都看不懂&#xff0c;就简单复制一段网上的介绍&…

Unity 如何实现卡片循环滚动效果

文章目录简介定义卡片的摆放规则调整卡片的层级关系调整卡片的尺寸大小动态调整位置、层级和大小移动动画按钮事件简介 功能需求如图所示&#xff0c;点击下一个按钮&#xff0c;所有卡片向右滚动&#xff0c;其中最后一张需要变更为最前面的一张&#xff0c;点击上一个按钮&a…

案例:用户信息列表展示

1. 需求&#xff1a;用户信息的增删改查操作2. 设计&#xff1a;1. 技术选型&#xff1a;ServletJSPMySQLJDBCTempleatDuirdBeanUtilStomcat2. 数据库设计&#xff1a;create database day17; -- 创建数据库use day17; -- 使用数据库create table user( -- 创建表id in…

Java5分钟制作海报

一、需求背景我们经常在多终端应用开发中会遇到这样的需求&#xff1a;用户在浏览商品时觉得不错&#xff0c;希望分享给朋友。此时终端&#xff08;安卓、苹果、H5等&#xff09;生成一张精美的商品海报&#xff0c;通过微信或者其他途径分享给他人。也可能会遇到需求&#xf…

排课算法小记

输出&#xff1a; 在配置文件(config.txt)中配置:老师&#xff0c;课程&#xff0c;专业班级&#xff0c;课时的信息&#xff0c;运行test.py自动生成对应班级课程表 eg: 专业1&#xff0c;四门课&#xff0c;每门课每周2课时,共8门课 专业2&#xff0c;四门课&#xff0c;每…

springcloud(服务消费及熔断)

目录 1. 服务消费方式 1.1 RestTemplate1.2 feign2. 服务熔断&#xff08;降级&#xff09; 2.1 在微服务架构中服务熔断的必要性2.2 hystrix2.3 hystrix的使用 1. 服务消费方式 1.1 RestTemplate 传统情况下在java代码里访问restful服务&#xff0c;一般使用Apache的HttpClie…

[附源码]JAVA毕业设计田径运动会管理系统(系统+LW)

[附源码]JAVA毕业设计田径运动会管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技…

Vue项目实战 可视化 创建(vue2+Element ui)

Vue项目实战创建项目通过脚手架 创建项目 配置 vue 路由配置 element—ui 组件库配置 axios 库创建远程仓库初始化 git 远程仓库 将本地项目托管到 码云前端项目初始化步骤① 安装vue脚手架② 通过脚手架 创建项目③ 配置 vue 路由④ 配置 element—ui 组件库⑤ 配置 axios 库⑥…

基于小波变换的去噪,带GUI界面,可以设置小波变换层数

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 近年来&#xff0c;小波理论得到了非常迅速的发展&#xff0c;而且由于其具备良好的时频特性&#xff0c;因而实际应用也非常广泛。在去噪领域中&#xff0c;小波理论也同样受到了许多学者的重视…

关于我的Oracle Primavera P6/Unifier/Gateway离线帮助中心

目录 ​编辑 一、前序 二、路子 三、用途 四、最后 一、前序 经常到处飞&#xff0c;很多时候会又比较依赖于网页查看产品的帮助&#xff0c;而网页又比较依赖于网络 怎么办呢 有人提到通过官方提供的PDF&#xff0c;毕竟上面的内容和网页展现几乎完全一样&#xff0c;…

【ChatGPT】与ChatGPT聊天,了解世界杯的前世今生

文章目录&#x1f3c6; 前言&#x1f4ac; 什么是ChatGPT⚽ 与ChatGPT的快问快答&#x1f9e9; 总结&#x1f3c6; 前言 最近火爆全网的chatGPT&#xff0c;吸引一大批技术爱好者的疯狂围观。大家使用过后&#xff0c;纷纷发出惊叹&#xff0c;深陷其中&#xff0c;无法自拔。 …

数字信号处理用脉冲响应不变法和双线性变换法设计巴特沃斯滤波器MATLAB实现——实例

文章目录符号含义例题脉冲响应不变法双线性变换法画图完整代码符号含义 例题 脉冲响应不变法 clear close all clcfs1000;%采样频率 fc200;%通带截止频率 fr300;%阻带截止频率 T0.001; %采样周期%%%%%%%脉冲响应不变法 wp12*pi*fc;%通带截止频率 wr12*pi*fr;%阻带截止频率[N1,…