Spring Cloud 远程调用方式

      目前很多公司业务调用开启web服务依赖于内部封装的tomcat容器,适应大流量的微服务,采用Tomcat处理HTTP请求,开发者编写Json作为资源传输,服务器做出相应的相应,可以灵活的处理业务数据,而HTTP协议是跨平台的,符合微服务B/C数据交互的方式,可以是一套服务器对应移动H5,APP,小程序提供服务。 

RPC基于TCP协议,客户端与服务端需要进行三次握手完成可靠连接,第四步行数据传输,因为TCP是数据传输层,传输协议需要服务器统一编码,进行二进制传输,依赖序列化和反序列规则,对于大部分应用需要灵活变动,数据变动则不能适应。RPC经常用于Socket连接或一些基本不变动的传输格式数据,减少数据变动带来的开发成本。建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket ,套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认

因此,SpringCloud远程调用采用HTTP而非RPC

                                                  一个简单HTTP请求处理

在Web应用中,浏览器请求一个URL,服务器就把生成的HTML网页发送给浏览器,而浏览器和服务器之间的传输协议是HTTP,那么接下来我们看下如何用Java来实现一个简单的HTTP服务器

             

Spring Cloud中用于远程调用的组件主要有以下几种: ### Feign Feign是一个声明式的HTTP客户端,它使得编写Web服务客户端变得更加简单。Feign通过将HTTP请求抽象为接口方法的调用,开发者只需定义接口并添加相关注解,Feign就会自动生成实现类来处理HTTP请求。它与Spring Cloud Netflix紧密集成,通常和Eureka等服务发现组件配合使用。使用Feign可以让代码更加简洁、易读和易于维护。以下是一个简单的Feign使用示例: ```java import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @FeignClient(name = "service-name") public interface MyFeignClient { @GetMapping("/api/resource") String getResource(); } ``` ### OpenFeign OpenFeign是Spring Cloud在Feign的基础上进行的扩展和增强,它支持Spring MVC注解,并且与Spring Cloud的其他组件(如Eureka、Ribbon等)无缝集成。OpenFeign在使用上和Feign类似,但提供了更多的功能和更好的兼容性,是目前Spring Cloud中推荐使用的远程调用组件。示例代码如下: ```java import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @FeignClient(name = "service-name", url = "http://service-url") public interface MyOpenFeignClient { @GetMapping("/api/data") String getData(); } ``` ### Spring Cloud Netflix Ribbon Ribbon是一个客户端负载均衡器,它为微服务架构中的服务间调用提供了负载均衡能力。Ribbon通常与Eureka等服务发现组件配合使用,能够自动从服务注册中心获取服务实例列表,并根据配置的规则分发请求。虽然Ribbon本身主要负责负载均衡,但它也可以和其他HTTP客户端(如RestTemplate)结合实现远程调用。示例代码如下: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.netflix.ribbon.RibbonClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController @RibbonClient(name = "service-name") public class RibbonController { @Autowired private RestTemplate restTemplate; @GetMapping("/call-service") public String callService() { return restTemplate.getForObject("http://service-name/api/endpoint", String.class); } } ``` ### Spring Cloud Alibaba Dubbo Dubbo是阿里巴巴开源的高性能、轻量级的Java RPC框架,Spring Cloud Alibaba Dubbo将Dubbo与Spring Cloud进行了集成,使其可以在Spring Cloud的生态中使用。Dubbo提供了丰富的服务治理功能,如负载均衡、集群容错、服务发现等。使用Dubbo可以实现高效的远程过程调用。以下是一个简单的Dubbo服务调用示例: ```java import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class DubboController { @DubboReference private MyDubboService myDubboService; @GetMapping("/dubbo-call") public String dubboCall() { return myDubboService.doSomething(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值