SpringCloud02

1.在项目中,服务之间的调用是怎么实现的?

  1. 1.1基于RestTemplate和@LoadBalanced注解

    • RestTemplate是Spring提供的用于访问RESTful服务的客户端。
    • 添加@LoadBalanced注解后,RestTemplate会成为一个负载均衡的HTTP客户端,它可以自动从服务注册中心(如Eureka、Zookeeper等)获取服务实例列表,并根据负载均衡策略选择一个实例进行调用。
    • 使用时,可以直接通过RestTemplate的模板方法来发送HTTP请求,服务调用代码对调用细节相对不透明。
  2. 1.2基于DiscoveryClient

    • DiscoveryClient是Spring Cloud提供的服务发现接口,可以获取注册到服务注册中心的所有服务实例信息。
    • 通过DiscoveryClient,应用程序可以手动选择服务实例并直接使用其URL进行调用。
    • 这种方式相比RestTemplate更加灵活,但需要更多的手动编码。
  3. 1.3基于Feign的声明式调用

    • Feign是一个声明式的伪HTTP客户端,它使得编写Web服务客户端变得更加简单。
    • 使用Feign时,开发者可以通过定义一个接口并添加Feign的注解来描述HTTP请求的细节(如URL、HTTP方法、参数等)。
    • Spring Cloud集成了Feign,可以通过@EnableFeignClients注解开启对Feign的支持。
    • Feign内部同样使用了LoadBalancerClient实现负载均衡,因此服务调用也会从服务注册中心获取可用的服务实例。

2.feign和openFeign的区别

2.1 什么是Feign

Netflix Feign 是 Netflix 公司发布的一种实现负载均衡和服务调用的开源组件。Spring Cloud 将其与 Netflix 中的其他开源服务组件(例如 Eureka、Ribbon 以及 Hystrix 等)一起整合进 Spring Cloud Netflix 模块中,整合后全称为 Spring Cloud Netflix FeignFeign 对 Ribbon 进行了集成,利用 Ribbon 维护了一份可用服务清单,并通过 Ribbon 实现了客户端的负载均衡。

Feign 是一种声明式服务调用组件,它在 RestTemplate 的基础上做了进一步的封装。通过 Feign,我们只需要声明一个接口并通过注解进行简单的配置(类似于 Dao 接口上面的 Mapper 注解一样)即可实现对 HTTP 接口的绑定。通过 Feign,我们可以像调用本地方法一样来调用远程服务,而完全感觉不到这是在进行远程调用。

Feign 支持多种注解,例如 Feign 自带的注解以及 JAX-RS 注解等,但遗憾的是 Feign 本身并不支持 Spring MVC 注解,这无疑会给广大 Spring 用户带来不便。

2.2 什么是OpenFeign

2019 年 Netflix 公司宣布 Feign 组件正式进入停更维护状态,于是 Spring 官方便推出了一个名为 OpenFeign 的组件作为 Feign 的替代方案。

OpenFeign 全称 Spring Cloud OpenFeign,它是 Spring 官方推出的一种声明式服务调用与负载均衡组件,它的出现就是为了替代进入停更维护状态的 Feign。

OpenFeign 是 Spring Cloud 对 Feign 的二次封装,它具有 Feign 的所有功能,并在 Feign 的基础上增加了对 Spring MVC 注解的支持,例如 @RequestMapping、@GetMapping 和 @PostMapping 等。

2.3 常用注解

注解说明
@FeignClient该注解用于通知 OpenFeign 组件对 @RequestMapping 注解下的接口进行解析,并通过动态代理的方式产生实现类,实现负载均衡和服务调用。
@EnableFeignClients该注解用于开启 OpenFeign 功能,当 Spring Cloud 应用启动时,OpenFeign 会扫描标有 @FeignClient 注解的接口,生成代理并注册到 Spring 容器中。
@RequestMappingSpring MVC 注解,在 Spring MVC 中使用该注解映射请求,通过它来指定控制器(Controller)可以处理哪些 URL 请求,相当于 Servlet 中 web.xml 的配置。
@GetMappingSpring MVC 注解,用来映射 GET 请求,它是一个组合注解,相当于 @RequestMapping(method = RequestMethod.GET) 。
@PostMappingSpring MVC 注解,用来映射 POST 请求,它是一个组合注解,相当于 @RequestMapping(method = RequestMethod.POST) 。

2.4 Feign和OpenFeign的相同点

  1. Feign 和 OpenFeign 都是 Spring Cloud 下的远程调用和负载均衡组件。

  2. Feign 和 OpenFeign 作用一样,都可以实现服务的远程调用和负载均衡。

  3. Feign 和 OpenFeign 都对 Ribbon 进行了集成,都利用 Ribbon 维护了可用服务清单,并通过 Ribbon 实现了客户端的负载均衡。

  4. Feign 和 OpenFeign 都是在服务消费者(客户端)定义服务绑定接口并通过注解的方式进行配置,以实现远程服务的调用。

2.5 Feign和OpenFeign的区别

官方已经宣布停止更新Feign组件,所以可以使用OpenFeign进行代替

FeignOpenFeign
Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务,Feign的使用方式是:使用Feign的注解定义接口,调用这个接口就可以调用服务注册中心的服务OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequesMapping等等。 OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务

Feign本身不支持SpringMVC的注解,它有一套自己的注解;

调用方式是通过@RequestLine指定HTTP协议及URL地址

@FeignClient("song-system")
public interface SystemRemoteService {@GetMapping("/emp/haha")public AjaxResult haha(@RequestParam("id") Integer id);@PostMapping("/role/aaa")public AjaxResult asd(@RequestBody People people);
}

3.openFeign原理

OpenFeign的原理主要涉及以下几个关键部分:

1. 接口定义与注解
   - 使用OpenFeign时,开发者需要定义一个接口,并在接口的方法上添加HTTP相关的注解,如`@GetMapping`、`@PostMapping`等。这些注解描述了HTTP请求的细节,包括URL、HTTP方法、参数等。

2. 动态代理
   - 当创建一个OpenFeign客户端实例时,OpenFeign会使用Java的动态代理机制为定义的接口生成一个代理对象。
   - 代理对象的方法对应于接口中定义的HTTP请求。当调用代理对象的方法时,实际上是在执行相应的HTTP请求。

3. 解析注解和构建请求
   - 在代理对象的方法被调用时,OpenFeign会解析接口方法上的注解,获取HTTP请求的相关信息。
   - 根据这些信息,OpenFeign会构建一个HTTP请求,包括请求方法、URL、 headers和请求体等。

4. 负载均衡和服务发现
   - OpenFeign集成了Spring Cloud的服务发现和负载均衡功能。
   - 在发送HTTP请求之前,OpenFeign会通过服务发现组件(如Eureka、Consul等)查找目标服务的可用实例,并根据负载均衡策略选择一个实例来发送请求。

5. 编码器和解码器
   - OpenFeign支持自定义的编码器和解码器,用于处理请求和响应的序列化和反序列化。
   - 默认情况下,OpenFeign集成了Spring的`HttpMessageConverters`,可以处理常见的数据格式,如JSON、XML等。

6. 异常处理
   - OpenFeign提供了统一的异常处理机制,当HTTP请求发生错误时,会抛出相应的异常,如`FeignException`及其子类。
   - 开发者可以通过捕获这些异常来处理服务调用失败的情况。

总的来说,OpenFeign通过接口定义和注解简化了服务间HTTP调用的编码工作,利用动态代理和注解解析技术实现了透明化的HTTP请求执行,同时整合了Spring Cloud的服务发现和负载均衡功能,为微服务架构中的服务间通信提供了一种高效、便捷的解决方案。

4.SpringBoot读取配置文件内容的方式

Spring Boot 中读取配置文件有以下 5 种方法:

  1. 使用 @Value 读取配置文件。

  2. 使用 @ConfigurationProperties 读取配置文件。

  3. 使用 Environment 读取配置文件。

  4. 使用 @PropertySource 读取配置文件。

  5. 使用原生方式读取配置文件。

    在Spring Boot中,读取配置文件内容主要有以下几种方式:1. **使用 `@Value` 注解**:- `@Value` 注解可以直接用于字段、方法或方法参数上,从配置文件中注入单个属性值。- 示例:```java@Value("${property.name}")private String propertyName;```2. **使用 `@ConfigurationProperties` 注解**:- `@ConfigurationProperties` 注解主要用于将配置文件中的多个相关属性绑定到一个Java对象中。- 首先,需要创建一个Java类来表示配置属性,并用 `@ConfigurationProperties` 注解标记。- 然后,可以通过 `@EnableConfigurationProperties` 注解或者将该类作为 `@Component` 或 `@Service` 等注解的bean来启用配置属性的绑定。- 示例:```java@ConfigurationProperties(prefix = "myapp")public class MyAppProperties {private String name;private int port;// getters and setters...}```在配置文件中:```yamlmyapp:name: My Applicationport: 8080```3. **使用 `Environment` 接口**:- Spring Boot提供了一个 `Environment` 接口,可以用来访问和操作所有的环境属性,包括配置文件中的属性。- 你可以通过 `@Autowired` 注入 `Environment` 对象,然后调用其 `getProperty` 方法来获取属性值。- 示例:```java@Autowiredprivate Environment env;public void readProperty() {String propertyName = env.getProperty("property.name");}```4. **使用 `@Configuration` 和 `@Bean` 注解**:- 如果你需要在配置类中读取配置文件并基于这些值创建bean,可以使用 `@Configuration` 和 `@Bean` 注解。- 在 `@Bean` 方法中,你可以注入 `Environment` 并读取配置文件中的值。- 示例:```java@Configurationpublic class AppConfig {@Autowiredprivate Environment env;@Beanpublic MyBean myBean() {String propertyName = env.getProperty("property.name");return new MyBean(propertyName);}}```5. **使用 `PropertySourcesPlaceholderConfigurer`**:- 虽然在大多数情况下不需要显式使用,但在某些场景下,你可能需要自定义 `PropertySourcesPlaceholderConfigurer` 来处理占位符替换。- 这种方式主要用于更复杂的属性解析和占位符替换。6. **使用 `ConfigurableEnvironment`**:- `ConfigurableEnvironment` 是 `Environment` 的一个扩展接口,提供了更多的配置选项和访问环境属性的方式。以上就是Spring Boot中常见的读取配置文件内容的方式。根据具体需求和项目结构,可以选择最适合你的方法。

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

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

相关文章

10.鸿蒙应用程序app创建第一个程序Helloworld

鸿蒙应用程序开发app_hap开发环境搭建 1.打开DevEco 2.创建项目 3.选择Empty Ability 4. 选择API6,支持java开发 5.点击Finish 6.启动本地模拟器参考方法 7.启动成功 8.运行程序 9.运行成功 其它文章点击专栏

HarmonyOS:Neural Network Runtime对接AI推理框架开发指导

场景介绍 Neural Network Runtime 作为 AI 推理引擎和加速芯片的桥梁,为 AI 推理引擎提供精简的 Native 接口,满足推理引擎通过加速芯片执行端到端推理的需求。 本文以图 1 展示的 Add 单算子模型为例,介绍 Neural Network Runtime 的开发流…

轻量封装WebGPU渲染系统示例<50>- Json数据描述材质等3D渲染场景信息

本示例中的3d渲染场景由Json数据来描述。 包含3个主要部分: 1. Json描述渲染器的基本信息。 2. Json描述渲染场景的环境信息,包括全局的灯光、阴影、雾等。 3. Json描述构成场景的各个可选人实体,包括几何信息、transform、材质、渲染状态等。 当前示例源码git…

开启创意之旅:免费、开源的噪波贴图(noise texture)生成网站——noisecreater.com详细介绍

在当今数字创意领域,噪波贴图(Noise Texture)是游戏渲染、游戏开发、美术设计以及影视制作等行业不可或缺的艺术素材之一。为了满足广大创作者的需求,noisecreater.com应运而生,成为一款免费、开源的噪波贴图生成工具。…

保护IP地址免受盗用的有效方法

IP地址是互联网通信的基础,然而,由于其重要性,IP地址的盗用成为一种潜在的网络威胁。本文将深入探讨防止IP地址被盗用的方法,以维护网络的安全性。 第一部分:IP地址盗用的威胁与风险 1.1 IP地址盗用的定义 IP地址盗…

数据可视化---离群值展示

内容导航 类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统…

操作系统系列:Unix进程系统调用fork,wait,exec

操作系统系列:Unix进程系统调用 fork系统调用fork()运用的小练习 wait系统调用Zombiesexec 系列系统调用 开发者可以查看创建新进程的系统调用,这个模块会讨论与进程相关的Unix系统调用,下一个模块会讨论Win32 APIs相关的进程。 fork系统调用…

java参数校验

引入依赖 <!--参数效验--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><!--Length参数效验--><dependency><groupId>org.hib…

【python基础】-- yarn add 添加依赖的各种类型

目录 1、安装 yarn 1.1 使用npm安装 1.2 查看版本 1.3 yarn 淘宝源配置 2、安装命令说明 2.1 yarn add&#xff08;会更新package.json和yarn.lock&#xff09; 2.2 yarn install 2.3 一些操作 2.3.1 发布包 2.3.2 移除一个包 2.3.3 更新一个依赖 2.3.4 运行脚本 …

【设计模式--行为型--备忘录模式】

设计模式--行为型--备忘录模式 备忘录模式定义结构案例实现白箱备忘录模式黑箱备忘录模式 优缺点使用场景 备忘录模式 定义 又叫快照模式&#xff0c;在不破坏封装性的前提下&#xff0c;捕获一个对象的对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便…

Java 自定义注解

Java 自定义注解&#xff0c; 以及interface Target Retention Around Before After ProceedingJoinPoint JoinPoint 等用法 注解应用非常广泛&#xff0c;我们自定义注解能简化开发各种各种业务 一、关键字解释 (1) 定义注解时&#xff0c;关键字 interface 来表示注解类的类…

Spring Boot学习随笔- 实现AOP(JoinPoint、ProceedingJoinPoint、自定义注解类实现切面)

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第十一章、AOP 11.1 为什么要使用AOP 问题 现有业务层开发存在问题 额外功能代码存在大量冗余每个方法都需要书写一遍额外功能代码不利于项目维护 Spring中的AOP AOP&#xff1a;Aspect 切面 Oriented 面向…

竞赛保研 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…

【Python 基础】-- 在 mac OS 中安装 多个 python 版本

目录 1、需求 2、实现 2.1 安装 pyenv 2.2 安装 pyenv-virtualenv 2.3 配置环境变量 2.4 创建 python 3.9.9 的环境 2.5 激活环境&#xff0c;在当前项目目录中使用&#xff0c;即执行 python 1、需求 由于项目所依赖的 python 版本有多个&#xff0c;需要在不同的 pyth…

主从reactor多线程实现

现场模型图片&#xff0c;从网上找的 出于学习的目的实现的&#xff0c;如有不对的地方欢迎留言知道&#xff0c;简单实现了http的请求&#xff0c;可通过postman进行访问 启动项目&#xff1a; 返回数据示例 postman请求 附上源码&#xff0c;有问题直接看源码吧

智能优化算法应用:基于闪电连接过程算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于闪电连接过程算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于闪电连接过程算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.闪电连接过程算法4.实验参数设定…

Flink实时电商数仓(二)

GitLab的用户创建和推送 在root用户-密码界面重新设置密码添加Leader用户和自己使用的用户使用root用户创建相应的群组使用Leader用户创建对应的项目设置分支配置为“初始推送后完全保护”设置.gitignore文件&#xff0c;项目配置文件等其他非通用代码无需提交安装gitlab proj…

(JAVA)-创建多线程的方式

1.继承Thread类 1.创建一个继承字Thread类的子类 2.重写Thread类的run方法 public class MyThread extends Thread{Overridepublic void run() {for (int i 0; i < 100; i) {System.out.println(getName()"hello");}} }3.创建Thread类的子类对象 4.通过子类对象调…

HarmonyOS应用开发实战—开箱即用的应用首页页面【ArkTS】【鸿蒙专栏-34】

一.HarmonyOS应用开发实战—开箱即用的应用首页页面【ArkTS】【鸿蒙专栏-34】 1.1 项目背景 HarmonyOS(鸿蒙操作系统)是华为公司推出的一种分布式操作系统。它被设计为一种全场景、全连接的操作系统,旨在实现在各种设备之间的无缝协同和共享,包括智能手机、平板电脑、智能…

轻量级购物小程序H5产品设计经典样例

主要是看到这个产品设计的不错值得借鉴特记录如下&#xff1a; 不过大多数购物app都大致相同&#xff0c;这个算是经典样例&#xff0c;几乎都可以复制&#xff0c;我第一次使用&#xff0c;感觉和顺畅。看上去产品是经过打磨的&#xff0c;布局非常好。内容也很丰富。支持异业…