【1.4】Java微服务:服务注册和调用(Eureka和Ribbon实现)

news/2024/12/1 20:25:35/

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏: 微服务
✨特色专栏: 知识分享
🥭本文内容:【1.4】Java微服务:服务注册和调用(Eureka+Ribbon)
📚 ** ps **  : 阅读这篇文章如果有问题或者疑惑,欢迎各位在评论区提问或指出!


-----------------------------------------------------       目录       ----------------------------------------------------------

 

目录

一、介绍

1. 问题

2.关于Eureka的介绍

介绍:

组成:

3. 关于Ribbon的介绍

介绍

常见的Ribbon负载均衡策略

二、相关代码的实现

1. 搭建Eureka服务

1) 导入依赖

 2)在主函数内开启Eureka注解​编辑

3)编写yml文件

 4)进入服务中心

 5)页面说明

 2. Eureka服务注册

1)导入服务端依赖

2)在yml文件中,添加配置

3)添加多个服务

4)简单的使用

 3.Ribbon的使用


-------------------------------------------------------------------------------------------------------------------------------- 

一、介绍

1. 问题

在介绍Eureka与Ribbon实现服务注册和调用功能之前,我们需要先回答一些问题:

1)微服务的远程调用,在使用注册中心之前,是怎么实现的?

一种比较多的方式是通过HTTP请求实现,像前端一样访问另一个服务的接口。

而具体的实现方式,像通过通过SpringBoot框架内的RestTemplate组件,发送HTTP请求到其他接口,实现代码如下:

    @Autowiredprivate 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到Orderorder.setUser(user);// 4.返回return order;}

j结果截图:

2)使用restTemplate的方式进行微服务的远程调用,会哪些缺点?

  1. 首先,使用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负载均衡策略

  1. RoundRobinRule:简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡策略。
  2. AvailabilityFilteringRule:对两种服务器进行忽略:
    1. 在默认情况下。这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态持续20秒,如果再次连接失败,短路的持续时间就会几何级地增加。
    2. 并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数上限,可以由客户端的<clientName><clientConfigNameSpace>.ActiveConnectionsLimit属性进行设置。
  3. WeightedResponseTimeRule:为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
  4. ZoneAvoidanceRule:以区域可用的服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内多个服务做轮询。
  5. BestAvailableRule:忽略哪些短路的服务器,并选择并发数较低的服务器。
  6. RandomRule:随机选择一个可用的服务器。
  7. 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的使用

在服务中自定义负载均衡注解:

 最后,

后续文章会陆续更新,希望文章对你有所帮助..!

参考文献:

Spring CloudLevel up your Java code and explore what Spring can do for you.https://spring.io/projects/spring-cloud/

09-Eureka-搭建eureka服务_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p=11&spm_id_from=pageDriver&vd_source=d0dc59eeb02e4e4b81ee32c868da3cfe


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

相关文章

C#基于OpenCv(OpenCvSharp) 的 fftshift, ifftshift 函数的实现

本文实现基于OpenCv(OpenCvSharp) 的 fftshift, ifftshift 函数。 fftshift 函数将信号频谱的零频分量移动到数组中心, 本质是分别对调一三象限数据。 ifftshift完成相反的操作,本质是二四象限的数据块。 OpenCV中没有这两个函数如果使用需要自己实现。 实现代码如下: …

120、@SpringBootApplication注解有什么用?为什么一定要写它?

@SpringBootApplication注解有什么用?为什么一定要写它? @SpringBootApplication是一个复合注解: @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan public @interface SpringBootApplication {}是以上三个注解的整合,在一个类上只要加了@SpringBootApp…

05 http连接处理(中)

05 http连接处理&#xff08;中&#xff09; 流程图与状态机 从状态机负责读取报文的一行&#xff0c;主状态机负责对该行数据进行解析&#xff0c;主状态机内部调用从状态机&#xff0c;从状态机驱动主状态机 主状态机 三种状态&#xff0c;标识解析位置 CHECK_STATE_RE…

【算法题】2790. 长度递增组的最大数目

题目&#xff1a; 给你一个下标从 0 开始、长度为 n 的数组 usageLimits 。 你的任务是使用从 0 到 n - 1 的数字创建若干组&#xff0c;并确保每个数字 i 在 所有组 中使用的次数总共不超过 usageLimits[i] 次。此外&#xff0c;还必须满足以下条件&#xff1a; 每个组必须…

Qt信号与槽机制的本质

引入 对象与对象之间的通信有多个方式&#xff0c;如果我们要提供一种对象之间的通信机制。这种机制&#xff0c;要能够给两个不同对象中的函数建立映射关系&#xff0c;前者被调用时后者也能被自动调用。 再深入一些&#xff0c;两个对象如果都互相不知道对方的存在&#xff…

HTML5+CSS3小实例:带标题的3D多米诺人物卡片

实例:带标题的3D多米诺人物卡片 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content…

IDEA中连接虚拟机 管理Docker

IDEA中连接虚拟机 管理Docker &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有帮…

【Linux命令200例】paste一个用于合并文件的命令行实用工具

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…