SpringCloud (Eureka服务注册、发现)

news2025/7/16 4:36:37

本章导学:

  • 微服务各个服务如何调用?
  • 服务直接调用出现的问题
  • Eureka的引出及其作用
  • 搭建单机Eureka
    • 注册
    • 发现

一、微服务各个服务之间的调用

很简单,我们只需要在SpringBoot的配置类里把RestTemplate类加载到容器,利用RestTemplate的getForObject方法调用即可

比如order服务调用user服务,需要在orderApplication加载restTeplate 

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

 接着再你需要调用别的服务的业务部分添加使用getForObject方法即可

这里提及一个概念:

服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)

服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

像上述案例,order就是消费者,消费了user服务。

 


二、 服务直接调用出现的问题

上述案例中,我们order调用user服务时的url是固定写死的硬编码

如果user服务的地址改变了,或者把user服务做成集群,显然硬编码是行不通的

但我们不采用硬编码,我们需要考虑几个问题

  • 服务消费者该如何拿到服务提供者的地址信息呢?
  • 如果有多个服务提供者,该选取哪一个消费呢?
  • 服务消费者如何得知服务提供者的健康状态?

三、Eureka的作用

Eureka完美的解决了上述三个问题

Eureka把服务消费者和服务提供者统一为Eureka-Client(客户端) 注册中心称为Eureka-Server(服务端)

服务消费者该如何拿到服务提供者的地址信息呢?

它将服务提供者的信息全部注册到Eureka注册中心,当服务消费者需要消费时,只用向注册中心拉取所有的提供者信息即可

如果有多个服务提供者,该选取哪一个消费呢?

服务消费者拉取到提供者的信息后,通过负载均衡的轮循方案调用提供者

服务消费者如何得知服务提供者的健康状态?

服务提供者将每隔30秒持续的向注册中心发起一次心跳续约,当一个服务超过30秒后仍未做出心跳反应,注册中心就会剔除掉当前服务

总结一下Eureka的作用:

  • 消费者该如何获取服务提供者具体信息?
    • 服务提供者启动时向eureka注册自己的信息
    • eureka保存这些信息
  • 消费者根据服务名称向eureka拉取提供者信息
    • 如果有多个服务提供者,消费者该如何选择?
    • 服务消费者利用负载均衡算法,从服务列表中挑选一个
  • 消费者如何感知服务提供者健康状态?
    • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态 eureka会更新记录服务列表信息,
    • 心跳不正常会被剔除
    • 消费者就可以拉取到最新的信息

四、搭建单机Eureka-注册

  1. 引入Eureka依赖
  2. 编写启动类,添加@EnableEurekaServer注解
  3. 配置yaml文件

4.1、引入依赖

Eureka注册中心本身也是一个微服务,所以我们需要新创建一个项目

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

4.2、编写启动类,添加@EnableEurekaServer注解

新建一个启动类

package cn.brrbaii.eureka;

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

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

4.3、配置yaml文件 

server:
  port: 10086
spring:
  application:
    name: eurekaServer  #服务名称
eureka:
  client:
    service-url:  #eureka地址信息
      defauleZone: http://127.0.0.1:10086/eureka

配置完后启动一下主启动类即可

我们访问一下


接下来我们把order服务和user服务都注册到注册中心去

步骤后上面一样,只是依赖有所区别(client端)。 

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

另外,我们可以将user-service多次启动, 模拟多实例部署,但为了避免端口冲突,需要修改端口设置:-Dserver.port=(不冲突的端口) 

查看注册好的服务

总结:

服务注册

  • 引入eureka-client依赖
  • 在application.yml中配置eureka地址

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


 五、搭建单机Eureka-发现

服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡

  1. 修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口:
  2. 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解:

添加@loadBalance注解

调用4次user服务,查看是否启用了轮询模式的负载均衡

 很明显,user的两个服务各调用了两次。实现了负载均衡


最后总结一下:

  • 搭建EurekaServer
    • 引入eureka-server依赖
    • 添加@EnableEurekaServer注解
    • 在application.yml中配置eureka地址
  • 服务注册
    • 引入eureka-client依赖
    • 在application.yml中配置eureka地址
  • 服务发现
    • 引入eureka-client依赖
    • 在application.yml中配置eureka地址
    • 用服务提供者的服务名称远程调用
    • 给RestTemplate添加@LoadBalanced注解 用服务提供者的服务名称远程调用 

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

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

相关文章

【目标检测 DETR】通俗理解 End-to-End Object Detection with Transformers,值得一品。

文章目录DETR1. 亮点工作1.1 E to E1.2 self-attention1.3 引入位置嵌入向量1.4 消除了候选框生成阶段2. Set Prediction2.1 N个对象2.2 Hungarian algorithm3. 实例剖析4. 代码4.1 配置文件4.1.1 数据集的类别数4.1.2 训练集和验证集的路径4.1.3 图片的大小4.1.4 训练时的批量…

idea 2022.2.4 导入依赖警告的问题

在我导入依赖的时候&#xff0c;pom文件提示警告如下信息 Provides transitive vulnerable dependency commons-collections:commons-collections:3.2.2 Cx78f40514-81ff 7.5 Uncontrolled Recursion vulnerability pending CVSS allocation Results powered by Checkmarx(c) …

第十二章:网络编程

第十二章&#xff1a;网络编程 12.1&#xff1a;网络编程概述 ​ Java是Internet上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&#xff0c;程序员能够很容易开发常见的网络应用程序。 ​ Java提供的网络类库&#xff0c;可以实现无痛的网络连接&#xff0c;…

【项目精选】基于struts+hibernate的采购管理系统

点击下载 javaEE采购管理系统 本系统是一个独立的系统&#xff0c;用来解决企业采购信息的管理问题。采用JSP技术构建了一个有效而且实用的企业采购信息管理平台&#xff0c;目的是为高效地完成对企业采购信息的管理。经过 对课题的深入分析&#xff0c;采购系统需实现以下功能…

秒懂算法 | DP概述和常见DP面试题

动态(DP)是一种算法技术,它将大问题分解为更简单的子问题,对整体问题的最优解决方案取决于子问题的最优解决方案。本篇内容介绍了DP的概念和基本操作;DP的设计、方程推导、记忆化编码、递推编码、滚动数组以及常见的DP面试题。 01、DP概述 1. DP问题的特征 下面以斐波那…

在找docker命令和部署?看这一篇文章就够了。

一、docker 常用命令 docker ps -a #查看所有容器 docker images #查看所有images docker search rabbitmq #搜索rabbitmq docker pull rabbitmq #拉去rabbitmq docker run -id --namemy_rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq # 创建一个容器并启动 docker exec -it…

数据结构算法学习记录——线性表之单链表(上)-初始单链表及其头插函数(顺序表缺陷、单链表优点、链表打印)

单链表的概念单链表是一种链式存取的数据结构&#xff0c;链表中的数据是以结点来表示的。每个结点的构成&#xff1a;元素(数据元素的映象) 指针(指示后继元素存储位置)。元素就是存储数据的存储单元&#xff0c;指针就是连接每个结点的地址数据。以“结点的序列”表示的线性…

Ubuntu安装Docker

一、安装条件1.操作系统要求需要以下 Ubuntu 版本之一的 64 位版本&#xff1a;Ubuntu Kinetic 22.10Ubuntu Jammy 22.04 (LTS)Ubuntu Focal 20.04 (LTS)Ubuntu Bionic 18.04 (LTS)二、安装1.要是之前安装过&#xff0c;可以进行卸载然后再安装&#xff0c;旧版本的 Docker 的名…

_Linux (传输层一版本)

文章目录0. 传输层作用1. 再谈端口号1-1 端口号范围划分1-2 认识知名端口号(Well-Know Port Number)1-3 两个问题1-4 netstat1-5 pidof2. UDP协议2-1 UDP协议端格式1. UDP协议如何分离&#xff08;封装&#xff09;&#xff1f;2. UDP协议如何交付&#xff08;应用层- - 客户&a…

什么蓝牙耳机佩戴舒适?2023长时间佩戴最舒适的蓝牙耳机

现如今&#xff0c;很多蓝牙耳机的产品都在不断地更新&#xff0c;市面上的耳机也是越来越普及&#xff0c;可以说是成为我们日常生活中不可或缺的一类电子设备&#xff0c;下面介绍一些佩戴舒适性好的蓝牙耳机。 一、南卡小音舱蓝牙耳机 音质推荐指数&#xff1a;★★★★★…

[ 网络 ] 应用层协议——HTTPS协议原理

目录 1.HTTPS是什么 2.加密技术 2.1什么是加密 2.2为什么要加密 2.3加密处理防止被窃听 3.常见的加密方式 对称加密 非对称加密 4.数据摘要&&数据指纹 5.数字签名 6.HTTPS的工作过程探究 方案1——只是用对称加密 方案2——只进行非对称加密 方案3——双方…

JavaEE——简单介绍Thread类以及线程的基本操作

文章目录一、Thread 类中的常见构造方法二、Thread 的一些常见属性三、线程的启动——start()isAlive() 方法的解释四、线程中断五、线程等待-join()了解六、简单解释线程休眠一、Thread 类中的常见构造方法 我们已知&#xff0c;Thread 类是Java中多线程中的一个关键类&#…

MATLAB的快速入门

第一部分&#xff1a;基础知识常用命令&#xff1a;clc %清除命令行窗口 clear %清空工作区数据 cd %显示或改变工作目录 clf %清除图形窗口 help %打开帮助文档 save %保存内存变量到指定文件 hold %保持图形 close %关闭当前图窗 quit %退出变量&#x…

sentry权限控制

sentry权限控制 文章目录sentry权限控制前言1. 安装2. hive内得配置4. hdfs配置5. Hue 授权6. 连接hive配置权限7. 验证前言 Apache Sentry是一个可以对Hadoop集群中的数据及元数据进行细粒度管理的权限管理系统。Sentry目前可以与ApacheHive&#xff0c;HiveMetastore / HCat…

前端基础(十四)_Math对象

Math对象 1.Math对象 对象.方法名 (1)Math.floor() 向下取整 去掉小数部分 等同于parseInt Math.floor(1.222) //1(2)Math.ceil() 向上取整 去掉小数部分 向上进一 Math.ceil(1.222) //2(3)Math.round() 四舍五入 4.5 5 针对小数点后面第一位数字 Math.round(1.272) //1 Ma…

嵌入式安防监控项目——exynos4412主框架搭建

目录 一、模块化编程思维 二、安防监控项目主框架搭建 一、模块化编程思维 其实我们以前学习32使用keil的时候就是再用模块化的思维。每个硬件都单独有一个实现功能的C文件和声明函数&#xff0c;进行宏定义以及引用需要使用头文件的h文件。 比如简单的加减乘除取余操作我们…

Spark Standalone 部署

Spark Standalone 部署解压缩文件修改配置文件启动集群Web UI 界面提交应用提交参数说明配置历史服务配置日志存储路径添加日志配置重启重新执行任务查看历史服务配置高可用&#xff08;HA&#xff09;集群规划停止集群启动 Zookeeper启动集群关闭集群关闭历史服务解压缩文件 …

Go语言使用Playwright自动化测试、录屏、执行js

Go版本的Playwright支持Chromium、Firefox和WebKit的Web自动化测试&#xff0c;兼容Windows、Linux和MacOS&#xff0c;默认支持headless无头模式&#xff0c;安装方便、绿色高效、兼容性强、运行速度快。 支持的主要功能有&#xff1a; 跨多个页面、域名和iframe的场景&#x…

什么led灯性价比高?家用led灯选哪种最好

人造灯具经过多年的发展&#xff0c;现在最为成熟的工艺就是led灯了&#xff0c;不仅有荧光灯高效节能、省电高亮的特点&#xff0c;而且光线可控性非常高&#xff0c;对于调光、提高光线柔和度等方面非常方便&#xff0c;保护眼睛更有效。 那么什么led灯性价比高呢&#xff0c…

JavaScript 高级5 :ES6

JavaScript 高级5 &#xff1a;ES6 Date: January 19, 2023 Sum&#xff1a;ES6新增语法、ES6内置对象扩展&#xff08;Array、String扩展方法、set数据结构&#xff09; 目标 能够说出使用let关键字声明变量的特点 能够使用解构赋值从数组中提取值 能够说出箭头函数拥有的…