当前位置: 首页 > news >正文

网站是空间备案南宁专业网站建设公司

网站是空间备案,南宁专业网站建设公司,全球推广,网站技术策划人员要求目录 微服务之间的相互调用的几种实现方式 一、HTTP HTTP/RESTful API调用工作原理 二、RPC 设计理念与实现方式 协议与传输层 RPC远程调用工作原理 应用场景与性能考量 特点 三、Feign 设计理念与实现方式 协议与传输层 Feign调用的基本流程 Feign调用的工作原理… 目录 微服务之间的相互调用的几种实现方式 一、HTTP HTTP/RESTful API调用工作原理 二、RPC 设计理念与实现方式 协议与传输层 RPC远程调用工作原理 应用场景与性能考量 特点 三、Feign 设计理念与实现方式 协议与传输层  Feign调用的基本流程 Feign调用的工作原理 特点 应用场景与性能考量 四、几种调用方式的区别与联系 Feign与HTTP的关系和区别 RPC与HTTP的关系和区别 RPC和openfeign的关系和区别 在微服务架构中远程调用、HTTP/RESTful API和Feign是实现微服务之间通信的不同方式。在构建分布式系统和微服务架构时选择合适的服务间通信技术至关重要。 微服务之间的相互调用的几种实现方式 在Java多模块项目中实现微服务架构时微服务之间的相互调用通常可以通过以下几种方式实现 根据具体的业务需求、性能要求、开发团队技术栈等因素可以选择合适的调用方式来进行微服务间的通信。通常情况下会根据项目的具体情况结合多种调用方式来实现不同的功能和需求。 一、HTTP 详情请移步我的另一篇博客HTTP协议简单介绍-CSDN博客 HTTP/RESTful API调用工作原理 HTTP/RESTful API调用是通过HTTP协议进行通信的一种方式它的工作原理是客户端发送HTTP请求到服务器服务器接收到请求后处理并返回HTTP响应。下面是HTTP/RESTful API调用的工作原理和代码示例。 工作原理 客户端发送请求客户端例如浏览器、移动应用、或其他服务器创建一个HTTP请求并指定请求方法例如GET、POST、PUT、DELETE等、URL地址、请求头、请求体等信息。服务器接收请求服务器接收到客户端发送的HTTP请求并根据请求中的信息确定要执行的操作。服务器处理请求服务器根据请求中的信息执行相应的操作可能包括查询数据库、处理业务逻辑、生成动态内容等。服务器返回响应服务器处理完请求后会生成一个HTTP响应包括状态码、响应头、响应体等信息。然后将该响应发送回客户端。客户端接收响应客户端接收到服务器发送的HTTP响应后根据响应中的信息进行相应的处理可能是渲染页面、解析响应体中的数据等。 代码示例下面是一个简单的使用Java进行HTTP GET请求的示例代码使用的是java.net.HttpURLConnection。这段代码发送一个HTTP GET请求到https://jsonplaceholder.typicode.com/posts/1并输出响应码和响应体。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL;public class HttpGetExample {public static void main(String[] args) {try {// 创建URL对象指定要请求的URL地址URL url new URL(https://jsonplaceholder.typicode.com/posts/1);// 打开连接HttpURLConnection connection (HttpURLConnection) url.openConnection();// 设置请求方法为GETconnection.setRequestMethod(GET);// 获取响应码int responseCode connection.getResponseCode();System.out.println(Response Code: responseCode);// 读取响应内容BufferedReader reader new BufferedReader(new InputStreamReader(connection.getInputStream()));StringBuilder response new StringBuilder();String line;while ((line reader.readLine()) ! null) {response.append(line);}reader.close();// 打印响应内容System.out.println(Response Body:);System.out.println(response.toString());// 关闭连接connection.disconnect();} catch (Exception e) {e.printStackTrace();}} }二、RPC RPC即 Remote Procedure Call远程过程调用是一个计算机通信协议是指一个服务通过网络向另一个服务发送请求以获得数据或执行操作。 RPC是一种跨网络进程间通信技术其目标是使远程服务调用如同本地调用一样透明。 该协议允许运行于一台计算机的程序调用另一台计算机的子程序而程序员无需额外地为这个交互作用编程。说得通俗一点就是A计算机提供一个服务B计算机可以像调用本地服务那样调用A计算机的服务。 远程调用的实现方式有多种包括但不限于HTTP REST API、gRPC、SOAP等。 传统的RPC实现基于自定义协议和传输层如TCP而现代RPC框架如gRPC则采用HTTP/2作为传输层支持更高效的数据交换。 RPC框架通常内置服务发现、负载均衡、序列化/反序列化等高级功能适用于高性能、低延迟的内部服务通信。 设计理念与实现方式 设计哲学追求透明的远程调用体验尽可能隐藏网络通信细节。 实现机制更灵活的协议选择支持自定义或标准协议如gRPC使用HTTP/2。通常包括序列化/反序列化层以高效传输数据。 协议与传输层 多样化既有基于TCP/UDP的自定义协议也有采用HTTP/2等现代网络协议的实现如gRPC以实现更高效的二进制数据传输。 RPC远程调用工作原理 远程过程调用RPC是一种通过网络在不同计算机之间进行通信的方式使得一个计算机程序可以调用另一个计算机上的函数或方法就像调用本地函数一样。下面是RPC的工作原理和一个简单的Java代码示例。 工作原理 定义接口首先在服务端和客户端都需要定义相同的接口接口中包含了需要远程调用的方法。序列化参数当客户端调用远程方法时客户端将方法名和参数序列化成字节流然后通过网络发送到服务端。网络传输服务端接收到客户端发送的请求后将请求反序列化成方法名和参数然后在服务端执行对应的方法。执行方法在服务端执行方法后将方法的返回值序列化成字节流然后通过网络发送给客户端。反序列化返回值客户端接收到服务端发送的返回值后将返回值反序列化成方法的返回值然后将其返回给调用方。 代码示例以下是一个简单的RPC示例包括服务端和客户端的代码 1服务端代码 import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket;public class RpcServer {public static void main(String[] args) {try {// 创建ServerSocket并指定端口号ServerSocket serverSocket new ServerSocket(8888);System.out.println(Server started...);while (true) {// 监听客户端连接Socket socket serverSocket.accept();System.out.println(Client connected: socket.getInetAddress());// 创建ObjectInputStream和ObjectOutputStreamObjectInputStream inputStream new ObjectInputStream(socket.getInputStream());ObjectOutputStream outputStream new ObjectOutputStream(socket.getOutputStream());// 读取客户端发送的方法名和参数String methodName inputStream.readUTF();int a inputStream.readInt();int b inputStream.readInt();// 调用方法int result 0;if (add.equals(methodName)) result add(a, b);// 将方法的返回值写回客户端outputStream.writeInt(result);outputStream.flush();// 关闭流和SocketinputStream.close();outputStream.close();socket.close();}} catch (IOException e) {e.printStackTrace();}}public static int add(int a, int b) {return a b;} }2客户端代码 import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket;public class RpcClient {public static void main(String[] args) {try {// 连接服务端的Socket并指定IP地址和端口号Socket socket new Socket(localhost, 8888);// 创建ObjectInputStream和ObjectOutputStreamObjectOutputStream outputStream new ObjectOutputStream(socket.getOutputStream());ObjectInputStream inputStream new ObjectInputStream(socket.getInputStream());// 发送方法名和参数到服务端outputStream.writeUTF(add);outputStream.writeInt(10);outputStream.writeInt(20);outputStream.flush();// 读取服务端发送的返回值int result inputStream.readInt();System.out.println(Result: result);// 关闭流和SocketoutputStream.close();inputStream.close();socket.close();} catch (IOException e) {e.printStackTrace();}} }应用场景与性能考量 在需要高性能、低延迟通信的场景中更为常见如内部服务间的密集通信特别是在游戏、金融等领域。现代RPC框架如gRPC凭借其高性能和跨语言特性也逐渐应用于更广泛的分布式系统中。 特点 直接调用服务通过网络协议如HTTP、gRPC等直接调用其他服务的API。灵活性可以使用不同的协议和库来实现比如使用RestTemplate、HttpClient等。手动管理开发者需要手动处理请求的构建、响应的解析以及异常处理等。 三、Feign Feign是一个轻量级的Java库专为简化HTTP API客户端调用而生。通过动态代理和接口注解Feign使得调用远程服务如同调用本地方法一样直观便捷。它常用于Spring Cloud等微服务框架中与服务发现、负载均衡等服务治理组件紧密集成提供了一种声明式的HTTP客户端解决方案用于简化微服务之间的HTTP调用。 OpenFeign是Spring Cloud提供的一个声明式的伪Htp客户端它使得调用远程服务就像调用本地服务一样简单只需要创建一个接口并添加一个注解即可。通过使用注解开发者可以轻松地定义调用其他服务的接口而不需要编写大量的底层代码。 设计理念与实现方式 设计哲学面向接口编程通过接口定义和服务注解抽象出简洁的调用逻辑。 实现机制利用JVM的动态代理机制生成客户端代理类自动处理请求构造、发送和响应解析。 协议与传输层  基于HTTP协议利用HTTP的标准化和易穿透网络特性支持RESTful风格的API交互。 Feign调用的基本流程 如果不了解 SpringCloud 中 Feign 核心原理不会真正的了解 SpringCloud 的性能优化和配置优化也就不可能做到真正掌握 SpringCloud。 Feign远程调用核心就是通过一系列的封装和处理将以JAVA注解的方式定义的远程调用API接口最终转换成HTTP的请求形式然后将HTTP的请求的响应结果解码成JAVA Bean放回给调用者。 Feign远程调用的基本流程大致如下图所示。 从上图可以看到Feign通过处理注解将请求模板化当实际调用的时候传入参数根据参数再应用到请求上进而转化成真正的 Request 请求。通过Feign以及JAVA的动态代理机制使得Java 开发人员可以不用通过HTTP框架去封装HTTP请求报文的方式完成远程服务的HTTP调用。 Feign调用的工作原理 Feign调用的工作原理是通过动态代理技术将接口方法的调用转换为HTTP请求并发送到远程服务。下面是Feign调用的一般工作流程 定义Feign客户端接口在客户端项目中定义一个Java接口该接口用于描述要调用的远程服务的API。接口的方法对应了远程服务的不同接口或资源路径。创建Feign客户端使用FeignClient注解标注接口指定要调用的远程服务的名称或URL。Feign根据该注解创建一个动态代理对象该代理对象实现了接口定义的方法。调用远程服务方法在客户端代码中直接调用Feign客户端接口的方法就像调用本地方法一样。Feign客户端会拦截这些方法调用并将它们转换为HTTP请求。HTTP请求转换当调用Feign客户端接口的方法时Feign会根据方法的注解如GetMapping、PostMapping等以及方法的参数构建对应的HTTP请求。 例如根据GetMapping注解指定的路径和方法参数生成一个GET请求。发送HTTP请求Feign客户端将生成的HTTP请求发送到远程服务的URL。这个URL通常是通过服务注册与发现机制获取的或者是在FeignClient注解中指定的硬编码URL。接收响应远程服务接收到HTTP请求后处理请求并返回响应。Feign客户端接收到响应后将其转换为Java对象如果有需要并返回给调用方。 总体来说Feign通过动态代理技术将接口方法调用转换为HTTP请求并将这些请求发送到远程服务。这种方式使得调用远程服务变得简单、直观并且隐藏了底层HTTP通信的细节提高了开发效率。 Feign是一个声明式的HTTP客户端它简化了使用HTTP API的调用。Feign的工作原理是通过动态代理技术将接口方法的调用转换为HTTP请求并发送到远程服务。以下是使用Feign调用远程服务的具体Java代码示例 假设有一个名为UserService的微服务其中包含了一些用户相关的接口我们希望在另一个微服务中调用这些接口。 1首先我们需要在调用方的项目中添加Feign的依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId /dependency2创建一个Feign客户端接口定义要调用的远程服务的API。假设UserService提供了一个获取用户信息的API我们可以定义一个Feign接口如下 import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam;FeignClient(name user-service) // 指定要调用的微服务名称 public interface UserFeignClient {GetMapping(/user/info) // 指定远程服务的URL路径String getUserInfo(RequestParam(userId) Long userId); // 定义要调用的远程方法 }3在调用方的代码中注入Feign客户端接口并使用该接口来调用远程服务的方法 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;Service public class UserService {Autowiredprivate UserFeignClient userFeignClient; // 注入Feign客户端接口public String getUserInfo(Long userId) {return userFeignClient.getUserInfo(userId); // 调用远程服务的方法} }在这个示例中UserFeignClient接口定义了一个名为getUserInfo的方法该方法对应了远程服务的/user/info接口。然后在UserService中注入了UserFeignClient接口的实例并在getUserInfo方法中调用了远程服务的方法。Feign会根据接口定义动态生成一个代理对象负责将方法调用转换为HTTP请求并发送到远程服务。 需要注意的是为了使Feign能够正常工作我们需要确保调用方项目中已经配置了Spring Cloud的相关组件例如服务注册与发现Eureka、Consul等和负载均衡Ribbon等等功能。 特点 声明式使用注解定义RESTful API调用减少了样板代码。自动处理OpenFeign自动处理请求的构建、响应的解析和错误处理等简化了开发过程。与Spring Cloud集成OpenFeign通常与Spring Cloud结合使用支持负载均衡、熔断、服务发现等特性。 应用场景与性能考量 非常适合RESTful风格的微服务架构特别是集成在Spring Cloud生态中提供服务治理能力的同时保持了与Web服务的良好兼容性。 四、几种调用方式的区别与联系 以下是Feign、HTTP/RESTful API调用、RPC调用它们三个之间的区别与联系。 区别 Feign Feign是一个声明式的HTTP客户端用于简化基于HTTP的RESTful服务调用。它通过接口的方式描述远程服务的API使得调用远程服务更加简单直观无需编写底层的HTTP通信代码。Feign通常与Spring Cloud等微服务框架集成可以与服务注册中心配合使用实现服务发现、负载均衡等功能。HTTP/RESTful API调用 HTTP/RESTful API调用是一种基于HTTP协议的通信方式每个微服务提供RESTful API其他微服务通过发送HTTP请求来调用服务。这是一种最基本的微服务间通信方式使用HTTP协议进行数据传输。RPC调用 RPC远程过程调用是一种实现微服务之间直接方法调用的方式无需处理HTTP协议的细节。通过RPC框架可以使得一个计算机程序可以调用另一个计算机上的函数或方法就像调用本地函数一样。 Feign与HTTP的关系和区别 Feign与HTTP之间的关系在于Feign是一个用于Java语言的声明式HTTP客户端库它简化了HTTP请求的编写过程特别适用于构建微服务架构中的服务间调用。简单来说Feign允许开发者通过定义接口的方式来实现HTTP请求的发送而不需要手动创建请求体、设置URL、处理响应等繁琐工作。 在技术层面Feign背后实际上是对HTTP协议的封装和抽象。当使用Feign定义一个接口并添加相应的HTTP注解如GetMapping, PostMapping等时Feign会根据这些注解和接口方法的定义动态生成实现类。这个实现类会在运行时执行HTTP请求与远程服务进行通信。Feign内部可以配置不同的HTTP客户端实现来进行实际的网络IO操作比如默认使用Java的HttpURLConnection也可以配置为使用Apache HttpClient或者OkHttp等其他库来执行这些请求。 因此可以说Feign与HTTP是工具与协议的关系Feign作为一种工具或框架基于HTTP协议实现了更高层次的抽象提供了更为便捷的服务调用方式。  总结就是Feign和HTTP/RESTful API调用都是基于HTTP协议进行通信的它们之间的联系是Feign实质上是在HTTP/RESTful API调用的基础上进行了封装和简化。Feign是一种更加高级、简化的HTTP/RESTful API调用方式隐藏了底层的HTTP通信细节提供了声明式的接口来描述远程服务的API让开发人员可以像调用本地方法一样来调用远程服务。 RPC与HTTP的关系和区别 相同点是底层通讯都是基于socket都可以实现远程调用都可以实现服务调用服务。 不同点 RPC调用虽然不直接依赖于HTTP协议但它也可以在HTTP协议的基础上实现。一些RPC框架例如gRPC可以使用HTTP/2作为底层传输协议从而具备更高的性能和效率。 RPC调用是一种更加底层、直接的远程方法调用方式无需处理HTTP协议的细节通常具有更高的性能和效率但需要引入RPC框架并在系统中进行服务治理和管理。 既然两种方式都可以实现远程调用我们该如何选择呢 速度来看RPC要比http更快虽然底层都是TCP但是http协议的信息往往比较臃肿。难度来看RPC实现较为复杂http相对比较简单。灵活性来看http更胜一筹因为它不关心实现细节跨平台、跨语言。 RPC和openfeign的关系和区别 联系 目的相同两者都是为了实现微服务之间的通信。可以结合使用OpenFeign可以看作是远程调用的一种实现方式使用OpenFeign可以简化远程调用的实现过程使开发者更加专注于业务逻辑。 区别 在微服务架构中远程调用是一个广义的概念而OpenFeign是实现远程调用的一种特定方式。OpenFeign通过声明式的方式简化了远程调用的复杂性适合用于需要频繁进行微服务调用的场景。开发者可以根据项目需求选择适合的方式进行服务间通信。 Feign和RPC各有千秋选择应基于项目的具体需求、性能指标、团队熟悉度以及生态系统的集成能力。在微服务架构中两者并非互斥甚至可根据不同服务的特点在同一系统中灵活搭配使用。理解它们的核心差异有助于做出更贴合实际的技术决策。
http://www.dnsts.com.cn/news/45147.html

相关文章:

  • python做网站挣钱乐清市网站建设
  • 关于公司网站建设情况的汇报台州路桥做网站的公司有哪些
  • 建网站的流程和费用我要发布信息
  • 花万元请人做网站西安大网站建设公司排名
  • 台州网站排名优化价格领卷网站如何做代理
  • 做同款的网站搬瓦工暗转wordpress
  • 深圳网站设计是什么做简历好的网站
  • 做网站是要写代码的吗使用jquery的网站
  • wordpress多语言建站网站根目录下
  • wap卖料建站系统新网网站后台登陆
  • 网站建设教材下载上海资讯
  • 西部数码网站模板各种网站开发工具
  • 天津宏宇网站建设关于网站建设的广告语
  • 好用的网站推荐世界上网站做的好的例子
  • 成都网站建设服务密需湖南岚鸿案例青岛谁优化网站做的好
  • 石台做网站网站里的轮廓图 怎么做的
  • 会员可见的网站开发h5网站的好处
  • 百度 验证网站wordpress gzip压缩
  • 河北建设行业信息网站建设网站的主要流程图
  • 影响网站排名原因网站建设得多钱
  • 网站建设外包公司建站软件免费版下载
  • 哪个网站可以做加工重庆安全建设工程信息网
  • 站群系统源码山乙建设公司网站
  • 学校建设网站费用申请青岛市建设工程管理信息网
  • 邹带芽在成武建设局网站门户网站风格
  • 四川大学微服务官网如何做seo优化
  • 专业郑州做网站的公司wordpress博客支出
  • 网站的建设及发布步骤网站安全保障机制如何做
  • 上海 网站 备案中国电商公司100排名
  • 网站建设与管理心得体会和总结网站飘落怎么做