【3.2】Eureka-搭建注册中心/服务注册/服务发现

news2024/9/23 9:30:03

【3.2】Eureka-搭建注册中心/服务注册/服务发现

  • 1 搭建EurekaServer
    • 1.1 详细步骤
    • 1.2 搭建EurekaServer小结
  • 2 服务注册
    • 2.1 详细步骤(踩坑点!解决)
    • 2.2 模拟多实例部署
    • 2.3 服务注册小结
  • 3 服务发现
    • 3.1 详细步骤
  • 4 总结


在这里插入图片描述

1 搭建EurekaServer

搭建EurekaServer服务步骤如下:

  1. 创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖:
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

可以看到,依赖的后缀是eureka-server,也就说明它是eureka服务端的依赖。中间有一个starter,是springboot里面的自动装配。
也就是说在这个依赖里面已经帮我们把spring,eureka所有的配置都做好了。
当然,自动装配也是需要有开关的。

  1. 编写启动类,添加@EnableEurekaServer注解
    这个注解就是EurekaServer自动装配的开关。

  2. 添加application.yml文件,编写下面的配置:

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

1.1 详细步骤

在这里插入图片描述
在这里插入图片描述
接下来给项目里引入依赖:
在这里插入图片描述这里不用指定版本信息,原因是在父工程中已经把这些依赖的版本管理好了。
接下来去编写main函数:
在这里插入图片描述
补充图上内容:
在这里插入图片描述

@EnableEurekaServer
@SpringBootApplication
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:
    service-url:  #eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka/

这里可能有疑问:我自己就是eureka了为什么还要配置自己的地址信息呢?
因为eureka自己也是一个微服务,eureka在启动时,会将自己也注册到eureka上。这是为了将来eureka集群之间通信去用的。
这里的配置服务名称和服务地址是为了做服务注册。


接下来找到main函数,启动eureka:
Ctrl+Shift+F10
在这里插入图片描述
点击端口号:
在这里插入图片描述
可以看到
在这里插入图片描述
显示有System Status(系统状态),General Info(通用信息)等;
最重要的是中间的:
在这里插入图片描述
其中Instances currently registered with Eureka就是注册到Eureka的实例。
什么是实例?
一个服务,每部署一个/一份,就叫一个实例。 比如说user服务,将来部署10个,那就是10个实例。
Eureka会记录一个服务的所有实例。
刚刚提到Eureka会注册自己,图中的EUREKASERVER就是它自身的服务名称,后面就是它的端口和ip。
UP表示正常状态,DOWN表示挂了。


1.2 搭建EurekaServer小结

  1. 引入eureka-server依赖;
  2. 添加@EnableEurekaServer注解;
  3. 在application.yml中配置eureka地址。

2 服务注册

将user-service服务注册到EurekaServer步骤如下:

  1. 在user-service项目引入spring-cloud-starter-netflix-eureka-client的依赖
<!--eureka客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
  1. 在application.yml文件,编写下面的配置:
spring:
  application:
    name: userservice # user服务的服务名称
eureka:
  client:
    service-url:  #eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka/

2.1 详细步骤(踩坑点!解决)

打开user-service的pom.xml,添加依赖
在这里插入图片描述
打开user-service的application.yml:
添加:
在这里插入图片描述
一定要注意缩进的问题!还有冒号后面的空格!

将order-service注册到eureka中同理。
之后重启服务:
这里看到:
在这里插入图片描述
第一次启动我发现这里显示的是UNKNOWN,不是我配置的服务名称,这里寻求了一下百度~
大家可以参考这里
yml文件对大小写以及缩进对齐都比较严格,这里我仔细核对了一下我的yml文件,发现我的application多缩进了一点,大家也要注意这个问题。
在这里插入图片描述
之后重新启动:
在这里插入图片描述
UNKNOWN的问题成功解决。


2.2 模拟多实例部署

这里找到Services中的UserApplication,右键,点击Copy Configuration
在这里插入图片描述
在这里插入图片描述
在VM options中加
-Dserver.port=8082
也就是换个端口号,否则会冲突。
-D代表参数
点击Apply。然后启动它可以看到:
在这里插入图片描述
然后回到浏览器,刷新一下:
在这里插入图片描述
可以看到UP(2)也就是注册了两个实例。


2.3 服务注册小结

  • 引入eureka-client依赖;
  • 在application.yml中配置eureka地址。
  • 无论是消费者还是提供者,引入eureka-client依赖,知道eureka地址后,都可以完成服务注册。

3 服务发现

在order-service完成服务拉取:

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

  1. 修改OrderService的代码,修改访问的url路径,用服务名代替ip,端口:
String url = "http://userservice/user/"+order.getUserId();
  1. 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解:
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

3.1 详细步骤

首先修改order-service的业务代码:
原来是硬编码(ip+端口号),现在改为写user服务的名称,也就是上面注册了的user服务的服务名称。
在这里插入图片描述
第二步,找到OrderApplication,加上@LoadBalanced注解
在这里插入图片描述
最后重启OrderApplication;
然后把两个UserApplication的日志清空:
在这里插入图片描述
这是为了看清楚,当我们访问OrderService时,访问的究竟是UserService还是UserService2
接下来发起请求,多发几次:
在这里插入图片描述
在这里插入图片描述
然后打开idea看一下日志:
在UserApplication中:
在这里插入图片描述

在UserApplication2中:
在这里插入图片描述
可以看出来实现了负载均衡。
我们根本不用去关心服务的地址,只用把服务名称一放,就ok。剩下的事情就交给Eureka客户端工具去做。


4 总结

1.搭建EurekaServer:

  • 引入eureka-server依赖;
  • 添加@EnableEurekaServer注解;
  • 在application.yml中配置eureka地址。

2.服务注册:

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

3.服务发现

  • 引入eureka-client依赖;
  • 在application.yml中配置eureka地址;
  • 给RestTemplate添加@LoadBalanced注解;
  • 用服务提供者的服务名称远程调用。

By --Suki 2023/1/3

知识内容来自于黑马程序员视频教学和百度百科。博主仅作笔记整理便于回顾学习。如有侵权请私信我。

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

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

相关文章

2022年,我每天都会用的linux常用命令

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.Linux常用命令 1.Linux命令概述 2.Linux命令的分类 &#…

科研 | 学生研究方向指导 | 技术路线 | 相关学习资源

1. AI某领域 1.1 Python基础 慕课教程&#xff1a;Python 入门语法教程 哔哩哔哩&#xff1a;3小时快速入门Python 1.2 机器学习框架 sklearn框架&#xff1a;菜菜的机器学习sklearn 1.3 深度学习框架 慕课教程&#xff1a;TensorFlow 入门教程 PyTorch官方教程中文版 不…

【回答问题】ChatGPT上线了!给我推荐20个比较流行的AI作画模型!

目录给我推荐20个比较流行的AI作画模型给我推荐20个比较流行的AI作画模型代码给我推荐20个比较流行的AI作画模型 好的&#xff0c;下面是20个比较流行的AI作画模型&#xff1a; DALL-E GAN Deep Dream CycleGAN StyleGAN pix2pix SketchRNN BigGAN ProGAN ESRGAN SPADE BigVA…

Vue+Leaflet.PM插件实现创建和编辑几何图形(点、线、面、圆等)

场景VueLeaflet实现加载OSM显示地图&#xff1a;https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122317394在上面加载显示OSM的基础上&#xff0c;使用Leaflet.pm插件实现在页面上绘制、编辑、剪切、移动几何元素。Leaflet.pm插件用于创建和编辑几何图层的插件可绘…

如何避免无效外贸邮件营销?

如何避免无效的邮件营销&#xff0c;米贸搜为您整理如下&#xff0c;希望对您有所帮助:1 .和邮件正文一样重视主题主题对于电子邮件就像标题对于文章或博客一样重要。即使你有全宇宙最吸引人的散文诗&#xff0c;或者最吸引人的求婚&#xff0c;如果根本没有人打开这封邮件&…

CSS 中各种居中你真的玩明白了么

前言 页面布局中最常见的需求就是元素或者文字居中了&#xff0c;但是根据场景的不同&#xff0c;居中也有简单到复杂各种不同的实现方式&#xff0c;有的特定场景下可能还有一些稀奇古怪的bug&#xff0c;本篇就带大家一起了解下&#xff0c;各种场景下&#xff0c;该如何使用…

72、【哈希表】leetcode——454. 四数相加 II(C++版本)

题目描述 原题链接&#xff1a;454. 四数相加 II 解题思路 本题构建Hash表的关键是确定Value的含义&#xff0c;因为目标是找到四个集合中各种情况为0的情况之和&#xff0c;因此不需要对相同情况去重&#xff0c;Value设置为满足某种对应情况的出现次数。当找到一次满足nums…

实验室小分子PEG衍生物之Aminoxy-PEG2-azide 1043426-13-6异双功能PEG

Aminoxy-PEG2-azide异双功能PEG接头可交联官能团 中文名称&#xff1a;氨氧基-二聚乙二醇-叠氮化物 英文名称&#xff1a;Aminoxy-PEG2-azide 分子式&#xff1a;C6H14N4O3 分子量&#xff1a;190.2 CAS&#xff1a;1043426-13-6 外观&#xff1a;粘稠液体或者固体粉末&#x…

文件误删怎么办?恢复误删的数据,就靠这4种方法

现在是信息爆炸的时代&#xff0c;我们每天都会保存许多重要信息。这让我们的电脑保存了大量的文件、图片、视频等数据。为了保存电脑整洁&#xff0c;提高它的运行速度&#xff0c;我们必须要对它进行定期地清理。在清理的过程中&#xff0c;重要文件误删怎么办&#xff1f;恢…

ArcGIS基础实验操作100例--实验45按要素融合多边形

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验45 按要素融合多边形 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&…

概论_第2章_重点内容__随机变量函数的概率分布___定理法和分布函数法的应用

一 定义 概括地说&#xff1a; 随机变量Y是随机变量X的函数。 设g(x) 是一给定的连续函数&#xff0c; 称Yg(X) 为随机变量X的一个函数&#xff0c; Y也是一个随机变量。当X取值 时&#xff0c;Y取值 . ~~~~~~~~~~~~~~ 本文讨论连续型随机变量函数。 定理1: 设X为连续型…

chrony服务部署

一&#xff0c;要求 chrony服务部署&#xff1a;两台机器 a: 第一台机器从阿里云同步时间&#xff0c;第二台机器从第一台机器同步时间 b: 第一台服务器使用系统时间作为第二台服务器的时钟源&#xff0c; 第一台服务器层级设置为6 二&#xff0…

有关于Transformer 的max_seq_length (max_source_length)

Transformer 的最大输入长度&#xff0c;即max_seq_length / max_source_length是一个非常值得注意的参数。 Transformer的encoder大多是Auto-encoder的结构&#xff0c;不同于Auto-regressive encode&#xff0c;由于auto-encoder缺乏时序序列的位置信息&#xff0c;因此其需…

dom截图——探究长截图的极限

长截图问题 问题&#xff1a;使用dom-to-image和html2canvas来进行长截图会出现一个问题&#xff0c;如果图片非常长&#xff0c;一些图片会只加载一半&#xff0c;如果图片再长一些&#xff0c;截图就会为空。 目前我测试的结果&#xff1a;截图的大小在8mb出现图片缺了的情况…

Blender 编辑骨骼动画,重复动作,并导出动画为视频

文章目录制作动作动画.重复动作.导出动画为视频制作动作动画. 1 进入姿态模式。调整各个部位的位置。调整好后&#xff0c;A&#xff0c;全选&#xff0c;I 记录置和旋转并创建一个关键帧 2 如果回放时间轴上没有关键帧&#xff0c;可以去 动画时间表/动作编辑器 窗口查看。注…

CVE-2019-2725漏洞复现

前言 在学习内网过程中遇到了weblogic比较常见的漏洞&#xff0c;编号是cve-2019-2725,之前没有总结过&#xff0c;于是本篇文章给大家总结归纳一下该漏洞的利用方法与原理。 基础知识 cve-2019-2725漏洞的核心利用点是weblogic的xmldecoder反序列化漏洞&#xff0c;攻击步骤…

SpringBoot学习超详细 第三 实用开发篇

目录 一、启动热部署 二、配置高级 三、常用 计量单位 四、开启数据校验 五、测试 第一种web环境测试 第二种web环境测试 ​编辑 第三种web环境测试 第四种web环境测试 第五种web环境测试 六、数据层解决方案 1、SQL 七、NoSQL&#xff08;redis&#xff09; 1、Red…

ArcMap制图相关问题

ArcMap是一款我们常用的GIS桌面端应用&#xff0c;在完成一系列空间分析任务后&#xff0c;我们通常会选择用专题图来呈现结果。今天&#xff0c;我们就来聊一聊有关ArcMap成图的一些问题。注&#xff1a;此处演示使用版本为ArcGIS10.4.1如何实现“一幅多图”在绘制研究区区位图…

AC7811-PWDT脉冲宽度检测

PWDT是Pulse Width Detect Timer&#xff08;脉冲宽度检测定时器&#xff09;缩写。可作为测量脉冲宽度的工具或作为16位定时器。 功能 检测脉冲宽度 可编程起始测量触发沿 支持 3 个霍尔传感器的信号输入测量 支持来自模拟比较器的 3 个输入 定时器 在禁用定时器或在正…

【JavaScript】DOM 操作元素样式和元素类名

文章目录【JavaScript】DOM 操作元素样式和元素类名一. 操作元素样式(1)操作行内元素1. 获取元素的样式2. 设置元素的样式(2) 操作非行内元素和行内元素1. 获取元素的样式二. 操作元素类名(1) className1. 获取元素的类名2. 设置元素的类名3. 追加元素的类名(2) classList1. 获…