✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏: 微服务
✨特色专栏: 知识分享
🥭本文内容:【1.4】Java微服务:服务注册和调用(Eureka+Ribbon)
📚 ** ps ** : 阅读这篇文章如果有问题或者疑惑,欢迎各位在评论区提问或指出!
----------------------------------------------------- 目录 ----------------------------------------------------------
目录
--------------------------------------------------------------------------------------------------------------------------------
一、介绍
1. 问题
在介绍Eureka与Ribbon实现服务注册和调用功能之前,我们需要先回答一些问题:
1)微服务的远程调用,在使用注册中心之前,是怎么实现的?
一种比较多的方式是通过HTTP请求实现,像前端一样访问另一个服务的接口。
而具体的实现方式,像通过通过SpringBoot框架内的RestTemplate组件,发送HTTP请求到其他接口,实现代码如下:
@Autowired private RestTemplate restTemplate; public Order queryOrderById(Long orderId) { // 1.查询订单 Order order = orderMapper.findById(orderId); // 2.利用RestTemplate发起http请求,查询用户 // 2.1.url路径 String url = "http://localhost:8081/user/" + order.getUserId(); // 2.2.发送http请求,实现远程调用 User user = restTemplate.getForObject(url, User.class); // 3.封装user到Order order.setUser(user); // 4.返回 return order; }
j结果截图:
2)使用restTemplate的方式进行微服务的远程调用,会哪些缺点?
- 首先,使用restTemplate不能解决许多微服务的许多问题。如服务的管理,服务调用的的负载均衡实现、发生故障或下线的即时处理
2.关于Eureka的介绍
介绍:
- Eureka是Netflix开源的一个用于服务发现和注册中心的组件。它是基于RESTful风格的微服务框架,主要用于在分布式系统中管理和监控服务实例的状态。
- 服务管理:Eureka允许服务在启动时向注册中心注册自己的信息,并周期性地发送心跳来更新状态。
- 其他服务可以通过查询注册中心来获取可用服务的信息,以实现服务的调用和负载均衡。
组成:
- EurekaServe:服务端,注册中心
- 记录服务信息
- 心跳监控
- EurekaClient:客户端
- Provider:服务提供这,例如案例中的user-service
- 注册自己的信息到EurekaServe
- 每隔20秒向EurekaServer发送心跳请求
- consumer:服务消费者,例如案例中的order-server
- 根据服务名称从EureksServer拉取服务列表
- 基于服务列表做负载均衡,选中一个微服务后发起远程调用
3. 关于Ribbon的介绍
介绍
- Ribbon 是SpringCloud的其中一个组件,用于实现客户端负载均衡。它提供了负载均衡、故障转移和重试等功能,可以与服务注册中心(如 Eureka)集成使用。
- 通过使用 Ribbon,可以实现负载均衡的客户端,使服务消费者能够可靠高效的访问多个服务提供者
- Ribbon 提供了各种负载均衡策略,如轮询、随机、加权随机等,开发者可以根据需求选择合适的策略。
常见的Ribbon负载均衡策略
- RoundRobinRule:简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡策略。
- AvailabilityFilteringRule:对两种服务器进行忽略:
- 在默认情况下。这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态持续20秒,如果再次连接失败,短路的持续时间就会几何级地增加。
- 并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数上限,可以由客户端的<clientName><clientConfigNameSpace>.ActiveConnectionsLimit属性进行设置。
- WeightedResponseTimeRule:为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
- ZoneAvoidanceRule:以区域可用的服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内多个服务做轮询。
- BestAvailableRule:忽略哪些短路的服务器,并选择并发数较低的服务器。
- RandomRule:随机选择一个可用的服务器。
- RetryRule:重试机制的选择逻辑
二、相关代码的实现
1. 搭建Eureka服务
1) 导入依赖
<!--eureka服务端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
2)在主函数内开启Eureka注解
3)编写yml文件
server: port: 10086 # 服务端口 spring: application: name: eurekaserver # eureka的服务名称 eureka: client: service-url: # eureka的地址信息 defaultZone: http://127.0.0.1:10086/eureka
4)进入服务中心
5)页面说明
2. Eureka服务注册
1)导入服务端依赖
在服务模块(如userServiece)的pom文件中导入:
<!--eureka客户端依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
2)在yml文件中,添加配置
userService的配置文件中:
orderService的配置文件中:
3)添加多个服务
4)简单的使用
3.Ribbon的使用
1. 使用
在服务中自定义负载均衡注解:
2. 负载均衡测试
1)调用两次101的orderService接口(orderService接口会默认调用userService的接口):
2)查看后端服务被调用情况:
最后,
后续文章会陆续更新,希望文章对你有所帮助..!
参考文献: