SpringCloud之Eureka注册中心解读

news2025/1/15 22:36:21

目录

Eureka基础概念

概述

Eureka Serve

Eureka Client

@EnableEurekaServer

 @EnableEurekaClient

java代码实战

实战架构

父工程pom文件 

eureka-server服务

student-service服务

teacher-service服务

 测试


Eureka基础概念

概述

​ Eureka 又称 服务注册中心,全部服务都需要进行注册才能使用,也是微服务架构中必不可少的一个组件。

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理       在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。 ​

 Eureka采用了CS的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息 比如 服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用RPC远程调用框架,核心设计思想:在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何rpc远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))

Eureka Serve

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

注意:一个微服务,既可以是服务提供者,又可以是服务消费者,因此eureka将服务注册、服务发现等功能统一封装到了eureka-client端   

Eureka Client

EurekaClient通过注册中心进行访问,是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。

如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒) 


@EnableEurekaServer

在项目启动类上使用@EnableEurekaServer,可以将项目作为SpringCloud中的注册中心。

在SpringCloud中当你需要使用Eureka
Eureka注册中心的时候你在配置Eureka的服务端的时候需要在启动类上添加@EnableEurekaServer注解

 @EnableEurekaClient

在项目启动类上添加@EnableEurekaClient,本服务启动后会自动注册进eureka服务中。

没使用注解的时候,他们还是经过一个注册的方法,(注册到服务中心) 他们应该是根据配置文件来的。

java代码实战

实战架构

建立三个springboot工程,其中一个作为Eureka Server注册中心,其他俩个为俩个不同的端口的service端,客户端向8002端口的studentservice发送一个请求(/getInfo)以后,8002端口的studentservice需要往teacherservice发送一个请求(/getTeacher)返回数据。

父工程pom文件 

    <groupId>org.example</groupId>
    <artifactId>eurek-test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>eurek-serve</module>
        <module>student-service</module>
        <module>teacher-service</module>
    </modules>


    <packaging>pom</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR10</spring-cloud.version>
        <mysql.version>5.1.47</mysql.version>
        <mybatis.version>2.1.1</mybatis.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- springCloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--nacos的管理依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

eureka-server服务

pom文件

   <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--eureka服务端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

Application 程序 

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

yml配置文件 

server:
  port: 8001 # 服务端口
spring:
  application:
    name: eurekaserver # eureka的服务名称
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:8001/eureka

浏览器访问http://127.0.0.1:8001/ 可以看到web端

student-service服务

pom文件


    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
   <dependencies>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
   </dependencies>

Application 程序 

@SpringBootApplication
@EnableEurekaClient
public class StudentApplication {

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

    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。 

使用restTemplate访问restful接口非常的简单粗暴无脑。
(url, requestMap, ResponseBean.class)这三个参数分别代表 
REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。

yml配置文件 

server:
  port: 8002
spring:
  application:
    name: studentservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8001/eureka

 Teacher类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher implements Serializable {
    private  String name;
    private  String sex;
}

 StudentController

@RestController
public class StudentController implements Serializable {
    @Resource
    RestTemplate restTemplate;

    @GetMapping("/getInfo")
    public Teacher getInfo(){
        String url="http://teacherservice/getTeacher";
        Teacher teacher = restTemplate.getForObject(url, Teacher.class);

        return teacher;
    }
}

teacher-service服务

 pom文件

   <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

Application 程序 

@SpringBootApplication
public class TeacherApplication {

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

    }

}

yml配置文件 

server:
  port: 8003
spring:
  application:
    name: teacherservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8001/eureka

 Teacher类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher implements Serializable {
    private  String name;
    private  String sex;
}

 StudentController

@RestController
public class TeacherController {


    @GetMapping("/getTeacher")
    public Teacher getInfo(){
        return new Teacher("张三","男");
    }
}

 测试

浏览器访问:http://localhost:8002/getInfo

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

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

相关文章

WMS系统批次管理

一、定义 WMS系统的批次管理是指对物料和商品的生产批次进行跟踪、管理和控制的过程。批次是指一组具有共同特征的物料或商品&#xff0c;如生产日期、有效期、供应商、批号等。批次管理通过记录和追踪批次信息&#xff0c;确保物料和商品在供应链中的准确性、可追溯性和质量控…

基于ConvNeXt的跨模态特征融合模型用于RGB-D语义分割

A Cross-Modal Feature Fusion Model Based on ConvNeXt for RGB-D Semantic Segmentation 基于ConvNeXt的跨模态特征融合模型用于RGB-D语义分割 Tang X, Li B, Guo J, et al. A Cross-Modal Feature Fusion Model Based on ConvNeXt for RGB-D Semantic Segmentation[J]. Math…

自建应用-企业微信-侧边栏开发配置

企业微信侧边栏开发配置 配置侧边栏配置后效果图js-sdk 配置侧边栏 配置后效果图 js-sdk https://developer.work.weixin.qq.com/document/path/91789

【前端也要学算法系列】经典排序算法JS实现 —— 冒泡排序

一以贯之的努力&#xff0c;不得懈怠的人生。——长洱《天才基本法》 冒泡排序&#xff08;Bubble Sort&#xff09; 它会遍历 数据总个数减一 次需要排序的数列&#xff0c; 每次遍历时&#xff0c;它都会从前往后依次的比较相邻两个数的大小&#xff1b;如果前者比后者大&am…

antdv 锚点无滚动效果

背景&#xff1a;使用antd的锚点时&#xff0c;按照官方文档的用法配置之后发现锚点组件的锚点Title位置没办法随着我的页面滚动而变化&#xff0c;但是点击Title跳转具体锚定位置的功能却是没有问题的 解决方法&#xff1a;getContainer绑定滚动范围容器 <a-anchor class&q…

springboot时间管理系统springboot47

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

web前端面试-- http的各个版本的区别(HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0)

本人是一个web前端开发工程师&#xff0c;主要是vue框架&#xff0c;整理了一些面试题&#xff0c;今后也会一直更新&#xff0c;有好题目的同学欢迎评论区分享 ;-&#xff09; web面试题专栏&#xff1a;点击此处 http的各个版本的区别 HTTP&#xff08;超文本传输协议&…

ICC2: 限制指定net绕线区域

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 有些net有特殊绕线需求&#xff0c;只能在固定区域绕线&#xff0c;这时候就需要用到route corridor命令&#xff0c;参考用法如下: create_routing_corridor -name corridor_b…

【QT开发(9)】QT 中使用CUDA 代码

在之前的文章【CUDA编程&#xff08;1&#xff09;】 初识CUDA编程 写了CUDA相关的知识。最近也在研究 并行异构的课程&#xff0c;在QT里面加入相关的cuda 代码试一下&#xff01; 首先需要 在camke 中开启cuda&#xff0c;参考之前的文章【cmake开发&#xff08;12&#xff…

echarts-liquidfill水球图教程

接到了一个水球图的需求&#xff0c;如上图所示&#xff0c;点击不同的水球&#xff0c;下面的进度条呈现不同维度的百分比情况 。 第一步&#xff0c;安装插件 npm install echarts npm install echarts-liquidfill注意在这里需要查看echarts版本是4还是5&#xff0c;echart…

基于深度学习的地铁客流预测架构

导读 论文题目为&#xff1a;《DeepPF: A deep learning based architecture for metro passenger flow prediction》。是一篇2019年发表于《Transportation Research Part C》的文章&#xff0c;介绍了一种新型的基于深度学习的地铁客流预测架构&#xff0c;通过采取模块化的方…

代码随想录算法训练营第23期day25| 216.组合总和III 、17.电话号码的字母组合

目录 一、&#xff08;leetcode 216&#xff09;组合总和III 剪枝 二、&#xff08;leetcode 17&#xff09;电话号码的字母组合 思路 一、&#xff08;leetcode 216&#xff09;组合总和III 力扣题目链接 状态&#xff1a;已AC&#xff0c;就是在77题的前提下&#xff0c…

【23真题】130分送分!剩下20谁也别拿满!

今天分享的是23年武汉工程大学834的信号与系统试题及解析。 填空涉及到概念题&#xff0c;和简答题&#xff01;这种题型非常少见&#xff01;很像我们的梦马全程班6月模考&#xff0c;也考了简答概念&#xff0c;但是我们只是为了帮助大家理解知识点&#xff0c;他玩真的&…

使用流量管理工具保护 Kubernetes 的六种方法

原文作者&#xff1a;Jenn Gile - F5 NGINX 产品营销经理 原文链接&#xff1a;使用流量管理工具保护 Kubernetes 的六种方法 转载来源&#xff1a;NGINX 中文官网 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn 编者按 —— 本文是以下系列博文中的一篇&#xff08;共…

云服务器快速搭建网站

目录 安装Apache Docker 安装 Mysql 安装 Docker 依赖包 添加 Docker 官方仓库 安装 Docker 引擎 启动 Docker 服务并设置开机自启 验证 Docker 是否成功安装 拉取 MySQL 镜像 查看本地镜像 运行容器 停止和启动容器 列出正在运行的容器 安装PHP环境 搭建网站 安装…

前端刷新token,判断token是否过期(jwt鉴权)

4.1 什么是 JWT JWT 是 Auth0 提出的通过 对 JSON 进行加密签名来实现授权验证的方案&#xff1b; 就是登录成功后将相关用户信息组成 JSON 对象&#xff0c;然后对这个对象进行某种方式的加密&#xff0c;返回给客户端&#xff1b; 客户端在下次请求时带上这个 Token&#xff…

Python网络编程改良版服务端

在《Python中套接字实现服务端和客户端3-1》中提到服务端可以接收来自客户端的连接&#xff0c;并且创造新的套接字与客户端进行数据通信。此时的服务端只能与一个客户端进行数据通信&#xff0c;如果有多个客户端连接服务端&#xff0c;该怎么对服务端进行改良呢&#xff1f; …

全流程TOUGH系列软件应用丨入门丨基础丨进阶丨实操

TOUGH系列软件是由美国劳伦斯伯克利实验室开发的&#xff0c;旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同&#xff0c;TOUGH系列软件采用模块化设计和有限积分差网格剖分方法&#xff0c;通过配合不同状态方程&#xff08;EOS模…

100.一个linux内核选项对ssh的影响

&#xff08;从这开始给文章编号&#xff0c;编号从100开始&#xff09; 平台&#xff1a;rk3399&#xff08;f4932-r2h&#xff09; 内核&#xff1a;linux5.10 文件系统&#xff1a;firefly ssh&#xff1a;有线网卡 串口终端打印正常&#xff0c; 但是ssh登录却出现如下…

Xshell7试用期过了,打开就显示评估期已过,想继续或者不能删除怎么办?详细说明解决步骤

文章目录 1、问题说明2、解决办法2.1 重新安装2.2 卸载 1、问题说明 多长时间没用 Xshell 远程连接服务器&#xff0c;发现之前没有使用魔法工具处理&#xff08;正版&#xff09;&#xff0c;现在过期了。 2、解决办法 想继续使用Xshell的话&#xff0c;有两种方式&#xff…