【SpringCloud微服务实践】注册与发现(Eureka)

news/2025/2/12 18:33:29/

注册与发现(Eureka)

注册与发现初实践,注册中心采用SpringCloud全家桶中的Eureka,并配合RestTemplate从Euraka调用微服务。

在前置章节的电影票-用户服务组的基础上升级,摒弃硬编码微服务地址的方案,使用eureka实现微服务的动态发现与调用。

创建注册中心

  1. 引入Eureka Server依赖

新建一个SpringCloud项目,并预装Eureka Server工具包,当然也可以手动在pom文件中引入,记得一定要是带starter的(基于本文采用的2021.0.6版本的spring-cloud):

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. 在启动类上添加@EnableEurekaServer,声明是Eureka服务器
  2. 在配置文件中配置Eureka信息
    • server.port:配置服务器端口
    • eureka.instance:实例配置(单体可以不配)
      • appname:实例名称
      • app-group-name:实例组名,通常为同一个服务下的不同实例所共享
      • hostname:域名,不设置时默认为主机名
      • prefer-ip-address:展示ip地址
    • euraka.client:客户端配置
      • service-url:注册中心的服务地址
      • fetch-registry:获取注册表,作为注册中心无需开启
      • register-with-eureka:是否注册,不做集群可以不注册
server:port: 8848
eureka:instance:appname: eureka-serverapp-group-name: example-1hostname: localhostprefer-ip-address: trueclient:service-url:defaultZone: http://localhost:8848/eurekafetch-registry: falseregister-with-eureka: true

一个简单的Eureka注册中心到这里就完成了,接着我们把用户微服务注册道 Eureka中

微服务注册

  1. 引入Eureka Client依赖,记得要带starter的:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 在启动类上添加@EnableEurekaClient,声明是Eureka客户端
  2. 配置文件中配置客户端信息:
    • spring应用名一定要配,它将作为登记在Eureka中的服务名,到时候是根据服务名解析网络地址
    • 实例名建议配,一个注册多个实例的时候方便区分
    • 其它前头提过了不再赘述
spring:application:name: user-serviceeureka:client:register-with-eureka: trueservice-url:defaultZone: http://localhost:8848/eurekainstance:appname: user-service-1  # 不定义的话默认为应用名application.nameprefer-ip-address: true

单单作为Eureka的服务提供者到此也完成,接着升级服务消费者ticket

调用微服务

  1. 和提供者一样,引入Eureka Client依赖
  2. eureka相关的配置类似,不再复述;此外把待调用的user服务的信息也写进配置文件吧
api:user-service:name: user-service  # 服务名url: http://127:0:0:1:8081/user/  # 之前章节用的直接调用地址
  1. 重点在于服务发现和调用

获取服务列表

一个服务注册到Eureka中后,Eureka会在自己的注册表中,按服务的名称与服务的真实域名+端口做一一映射,即user-service运行在http://localhost:8081上,登记的是服务名user-service,RestTemplate拿到Eureka的服务注册表后,调用user-service时,请求的是http://user-service,此时会根据注册表把实际的请求路径中user-service解析为查到的实际的localhost:8080,相当于做了一个代理;如果这个服务并未注册或者RestTemplate没有拿到注册表,就只能原路请求,自然请求不到。

获取注册表很简单,在我们的ResTemplate的Bean上加个@LoadBalanced注解即可:

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

@LoadBalanced加了之后,即做到了服务发现又做到了负载均衡

调用远程服务

此时调整我们UserApi中的baseUrl即可:

//@Value("${api.user-service.url}")
@Value("http://${api.user-service.name}/user/")
private String baseUrl;

到这一步,作为消费者的ticket也就完成了,接下来运行三个项目

成果

浏览器访问Eureka服务器的地址http://localhost:8848
此时可以看到包括Eureka在内(之前让Eureka把自己也注册了),总共有3个健康的服务实例:
在这里插入图片描述

此时请求之前的http://localhost:8080/ticket/canibuy?price=200&id=3接口

{"code": 200,"msg": "余额充足","data": {"id": 3,"username": "user3","name": "用户3","age": 23,"balance": 300.0}
}

成功拿到结果!我们通过Eureka+Restemplate成功的实现了微服务的动态发现和调用,至此我们已经正式入门微服务架构。


入门章节采用了Restempl ate+eureka,是因为它们足够经典。在本系列后面,将主要采用openFeign+nacos构建微服务。


http://www.ppmy.cn/news/67264.html

相关文章

【C++入门攻略】和【编程常见问题】

常见问题 vsstudio快捷键 快速注释组合键 ctrlk ctrlc 取消注释快捷键 ctrlk ctrl u 支持垃圾回收机制 大多数面向对象编程语言具有垃圾回收机制。早期的C语言不具备垃圾回收机制&#xff0c;这意味着申请的内存资源在使用完成后&#xff0c;需要程序员自己释放。直到C11标…

系统移植(2023-5-10)

1.进入linux内核源码目录下&#xff0c;打开Makefile文件&#xff0c;搜索vmlinux&#xff0c;找到cmd_link-vmlinux命令&#xff0c; 1179 cmd_link-vmlinux \ 1180 $(CONFIG_SHELL) $< "$(LD)" "…

MySQL-图形化界面工具 (上)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

常见概率分布及图像

概率分布 文章目录 概率分布[toc]1 离散概率分布1.1 伯努利分布1.2 二项分布1.3 泊松分布 2 连续概率分布2.1 均匀分布2.2 指数分布2.3 正态分布2.4 卡方分布2.5 Student分布3.5 F分布 1 离散概率分布 1.1 伯努利分布 随机变量 X X X仅取两个值&#xff0c; X 0 , 1 X0,1 X0…

毕业答辩只答不辩道歉攻略❗

1.当老师提出问题你完全不会时:感谢老师的提问&#xff0c;对于老师您提的这个问题&#xff0c;确实是我没有考虑到的地方。对于该问题的研究我还并不是特别了解&#xff0c;感谢老师的指正让我意识到我在这一问题上的缺漏。接下来我会继续查阅相关期刊文献&#xff0c;对论文内…

第5课 弹性之城--创意卡--听我说

上一次&#xff0c;我们简单构建了一个穿越到弹性之城的故事&#xff0c;你都有想到哪些奇思妙想的创意呢&#xff1f; 今天&#xff0c;让我们把能想到的创意全都梳理一下&#xff0c;看看都有哪些有趣的玩意儿。 1. 弹性桌椅 2. 弹性讲台 3. 弹性课桌 4. 弹性公交车 5. 弹性书…

python深度学习 -- 训练的数据集中出现NaN值应该怎么办?Filling gaps in a numpy array

python&深度学习 – 训练的数据集中出现NaN值应该怎么办&#xff1f; 在深度学习的一些应用场景中&#xff0c;如海洋气象要素的预测、纠正等等。对于训练数据往往需要进行前处理&#xff0c;如处理缺测值、归一化等等。 特别是存在缺测值的情况&#xff0c;如果在深度学…

15 KVM虚拟机配置-体系架构相关配置

文章目录 15 KVM虚拟机配置-体系架构相关配置15.1 概述15.2 元素介绍15.3 AArch64架构配置示例15.4 x86_64架构配置示例 15 KVM虚拟机配置-体系架构相关配置 15.1 概述 XML中还有一部分体系架构相关的配置&#xff0c;这部分配置包括主板&#xff0c;CPU&#xff0c;一些与体…