Eureka注册中心的使用
1、Eureka的作用
1.1、消费者该如何获取服务提供者具体信息?
- 服务提供者启动时向eureka注册自己的信息
- eureka保存这些信息
- 消费者根据服务名称向eureka拉取提供者信息
1.2、如果有多个服务提供者,消费者该如何选择?
- 服务消费者利用负载均衡算法,从服务列表中挑选一个
1.3、消费者如何感知服务提供者健康状态?
- 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
- eureka会更新记录服务列表信息,心跳不正常会被剔除
- 消费者就可以拉取到最新的信息
2、Euraka的角色
2.1 EurekaServer:服务端,注册中心
- 记录服务信息
- 心跳监控
2.2 EurekaClient:客户端
2.2.1 Provider:服务提供者
- 注册自己的信息到EurekaServer
- 每隔30秒向EurekaServer发送心跳
2.2.2 consumer:服务消费者
- 根据服务名称从EurekaServer拉取服务列表
- 基于服务列表做负载均衡,选中一个微服务后发起远程调用
3、Eureka注册中心动手实践
3.1 搭建注册中心
3.1.1 创建项目,引入Eureka服务端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
3.1.2 在启动类上加注解 @EnableEurekaServer
/**
* @EnableEurekaServer: 自动装配的开关
*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
3.1.3 编写 application.yml文件
server:
port: 10086 # 服务端口
spring:
application:
name: eureka-server # 微服务名称
eureka:
client:
service-url: # eureka 的地址信息, 如果有多个用 逗号 隔开
defaultZone: http://127.0.0.1:10086/eureka/
3.1.4 启动
3.2 服务注册
3.2.1 在需要注册进Eureka的服务中,引入eureka客户端的依赖
<!-- eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.2.2 在application.yml 编写 服务名称和 eureka地址
spring:
application:
name: userserver # 微服务名称
eureka:
client:
service-url: # eureka 的地址信息, 如果有多个用 逗号 隔开
defaultZone: http://127.0.0.1:10086/eureka/
3.2.3 启动 查看 eureka 注册中心页面即可
3.2.4 多实例启动
我们可以将user-service多次启动, 模拟多实例部署,但为了避免端口冲突,需要修改端口设置
3.3 服务发现
前提: 当前服务已经注册进 eureka 注册中心
3.3.1 在order-service完成服务拉取
- 服务拉取是基于服务名称获取服务列表
- 在对服务列表做负载均衡
3.3.2 修改OrderService的代码,修改访问的url路径,用服务名
代替ip、端口:
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.利用 restTemplate 发起 http请求,查询用户信息
// 硬编码
//String url = "http://localhost:8081/user/" + order.getUserId();
// Eureka 实现
String url = "http://USERSERVICE/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);
// 3. 封装到order
order.setUser(user);
// 4.返回
return order;
}
3.3.3 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解:【默认是:Ribbon的负载均衡】
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
/**
* 创建restTemplate对象,并注入
* @return
*/
@Bean
@LoadBalanced // 负载均衡配置注解
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
本文来自博客园,作者:CoderTL,转载请注明原文链接:https://www.cnblogs.com/codertl/p/15440830.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix