(三)Spring Cloud Alibaba 2023.x:OpenFeign 实现高效远程调用

目录

前言

准备

项目集成

消费者服务pom.xml引入依赖

消费者yml配置文件开启负载均衡

消费者启动类配置

生产者服务定义接口

消费者定义FeignService

消费者调用远程接口


前言

在现代微服务架构中,服务之间的通信至关重要。OpenFeign 是一个声明式的 Web 服务客户端,它让我们可以通过简洁的注解方式实现 HTTP 请求的远程调用。与传统的基于 RestTemplate HttpClient 的调用方式相比,OpenFeign 简化了开发过程,降低了代码复杂度,提高了开发效率。

HTTP :适用于跨语言和跨平台的场景

RPC :更适合高性能要求的服务间调用并且服务耦合度高,适合同一语言开发的项目

准备

  • jdk17+
  • maven3.9.4+
  • idea2023
  • spring cloud: 2023.0.1.0
  • spring cloud alibaba: 2023.0.1

源码获取:GitHub - RemainderTime/spring-cloud-alibaba-base-demo: 基于spring cloud alibaba生态快速构建微服务脚手架

项目集成

微服务模块

  • http-cloud-consumer 消费者服务
  • http-cloud-producer 生产者服务

消费者服务pom.xml引入依赖

<!-- 远程调用http openfeign-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--负载均衡 loadbalancer-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

Tips!

loadbalancer:

负载均衡组件loadbalancer, 是对 Ribbon 的一种升级和替代,提供了更加灵活、轻量的负载均衡功能。 它不再强依赖于 Eureka,支持与多种服务注册中心兼容。相较于 Ribbon,Spring Cloud LoadBalancer 更加模块化、定制化,适用于微服务架构中的各种负载均衡需求。

其实在注册中心nacos依赖内部中已经集成了LoadBalancer的依赖,但是在博主实际使用中发现,如果不在模块中单独引入LoadBalancer依赖,后面会使用到的@FeignClient(name = "http-cloud-producer")方式不生效,只能使用@FeignClient(name = "http:127.0.0.0.1:8080")方式

消费者yml配置文件开启负载均衡

上也说到loadbalancer其实已经集成到了nacos依赖中可以完全契合nacos作为注册中心实现服务间负载均衡

spring:
  cloud:
      loadbalancer: #开启负载均衡
        nacos:
          enabled: true
        retry:
          enabled: true # 启用负载均衡重试机制 负载均衡策略默认为轮询,想要修改策略新版本中需要手动java代码配置,新版本中配置文件的方式不支持了,更灵活但略复杂

消费者启动类配置

启动类添加注解启用Feign客户端 @EnableFeignClients

如果“生产者”微服务只是单一作为服务接口提供方,就不需要额外的远程调用配置。

生产者服务定义接口

和一般使用的接口没什么区别

@RestController
public class DemoController {
    
    @GetMapping(value = "/test/feign/{string}")
    public String test(@PathVariable String string) {
        return string;
    }
    
    @GetMapping(value = "/test/feign01")
    public String test01() {
        return "成功了~~~";
    }
}

消费者定义FeignService

定义的远程方法名称地址以及参数必须和生产者提供的接口一致

@FeignClient(name = "http-cloud-producer")
public interface FeignService {

    @GetMapping(value = "/test/feign/{str}")
    String feignInfo(@PathVariable("str") String str);

    @GetMapping(value = "/test/feign01")
    String feignInfo01();
}

注解中的 name = "http-cloud-producer" 参数内容为 生产者服务在 注册中心注册的服务名称,也可以使用 url = "http:127.0.0.0.1:8080" 设置服务真实地址

消费者调用远程接口

@RestController
public class FeignController {
    
    @Autowired
    private FeignService feignService;
    /**
     * 使用openFeign远程调用
     * @param str
     * @return
     */
    @GetMapping(value = "/feign/{str}")
    public String rest(@PathVariable String str) {
        return feignService.feignInfo(str);
    }
    
    /**
     * 使用openFeign远程调用  无参数
     * @return
     */
    @GetMapping(value = "/feign01")
    public String rest01() {
        return feignService.feignInfo01();
    }
}

启动生产者消费者服务,请求消费者接口正常返回则使用成功了


至此使用openFeign实现远程调用完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RemainderTime

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值