SpringCloud alibaba整合OpenFeign

目录

一、为什么使用OpenFeign

二、准备两个服务

三、最简单使用- 返回字符串

①引入openfeign依赖

②调用端在启动类上添加@EnableFeignClients注解

③在被调用端写一个简单的接口

④在调用端新建一个service类 专门用于远程调用 

​编辑 ⑤ 在调用端写一个conteoller 注入这个service,再调用这个方法

⑥ 访问,看看是否可以远程调用

四、返回一个对象(OderOKDTO)

①被调用的服务

②调用端 openservice

③controller

​编辑 五、返回对象结合有参使用

①被调用者

②远程调用

​编辑 ③ controller

六、条件查询(按id或者userId查询),不加注解会报405错误

七、日志配置(重点掌握配置文件形式)

7.1 全局配置

7.2 局部配置

7.3 在配置文件配置

八、 超时配置

8.1 全局配置

8.2 配置文件中配置

九、契约配置(了解)

十、源码参考


一、为什么使用OpenFeign

    OpenFeign 是一个Java语言编写的声明式服务客户端,它允许开发者通过编写接口和注解来定义对远程服务的调用,而无需关注底层HTTP请求的具体实现细节。通过集成到Spring Cloud环境中,它可以无缝结合服务发现、负载均衡以及Hystrix断路器等功能,从而大大简化了微服务间的相互调用。开发者只需对接口方法添加相应的HTTP注解,如@RequestMapping、@GetMapping等,OpenFeign就会依据这些注解生成并代理远程服务的接口,使得服务间调用就像调用本地方法一样直观和方便。

二、准备两个服务

一个是订单服务,一个是用户服务,用户服务去调用订单服务

三、最简单使用- 返回字符串

在服务调用方使用openfeign

①引入openfeign依赖

<!-- openfeign 远程调用 -->

<dependency>

   <groupId>org.springframework.cloud</groupId>

  <artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

②调用端在启动类上添加@EnableFeignClients注解

③在被调用端写一个简单的接口

④在调用端新建一个service类 专门用于远程调用 
 ⑤ 在调用端写一个conteoller 注入这个service,再调用这个方法

⑥ 访问,看看是否可以远程调用

四、返回一个对象(OderOKDTO)

①被调用的服务

②调用端 openservice

③controller

 五、返回对象结合有参使用

①被调用者

②远程调用
 ③ controller

六、条件查询(按id或者userId查询),不加注解会报405错误

  •   @SpringQueryMap 注解是Spring Cloud OpenFeign提供的一个扩展注解,用于处理HTTP GET请求中的查询参数。当我们在OpenFeign中定义一个接口方法,并且需要传递一组复杂的查询参数时,可以使用此注解来绑定一个POJO(Plain Old Java Object)对象或Map类型的数据结构,以便自动将其中的属性转换为请求URL中的查询参数。
  • 简单一句话,能将对象或者Map中的key-value自动拼接到get查询,拼接问号传参。

 ①被调用者

②远程调用

 ③ controller

七、日志配置(重点掌握配置文件形式)

有时候我们遇到 Bug,比如接口调用失败、参数没收到等问题,或者想看看调用性能,就需要配置 Feign 的日志了,以此让 Feign 把请求信息输出来。

Feign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解 Feign 中 Http 请求的细节。说白了就是对Feign接口的调用情况进行监控和输出

通过源码可以看到日志等级有 4 种,分别是:

  • NONE【性能最佳,适用于生产】:不记录任何日志(默认值)。

  • BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及执行时间。

  • HEADERS:记录BASIC级别的基础上,记录请求和响应的header。

  • FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body和元数据。

7.1 全局配置

注意一:此处配置@Configuration注解就会全局生效,如果想指定对应某一个服务生效,就不能配置.

注意二: 因为feign调试日志是debug级别输出,springboot默认的日志级别是info,所以feign的debug日志级别就不会输出,一定要结合

logging.level.com.beiyou = debug

@Configuration
public class FeignConfig
{
    @Bean
    Logger.Level feignLoggerLevel()
    {
        return Logger.Level.FULL;
    }
}

Java

7.2 局部配置

局部配置,让调用的微服务生效,在@FeignClient 注解中指定使用的配置类



7.3 在配置文件配置

logging.level.com.beiyou = debug开启日志
##配置feign 的日志级别
#-- default 全局配置
feign.client.config.default.loggerLevel=NONE
#-- nacos-a 具体服务名
feign.client.config.nacos-a.loggerLevel=FULL

CoffeeScript



八、 超时配置

通过 Options 可以配置连接超时时间和读取超时时间

8.1 全局配置

@Configurationpublic class FeignConfig {    @Bean    public Request.Options options() {      return new Request.Options(10L, TimeUnit.SECONDS, 60L,TimeUnit.SECONDS,true);    }}

Java



8.2 配置文件中配置

#全局配置feign.client.config.default.connectTimeout=5000
feign.client.config.default.readTimeout=10000
这里default 是一个特殊的客户端名称,用于表示全局配置。设置 connectTimeout 和 readTimeout 属性的值来定义全局的连接超时时间和读取超时时间。
#局部配置 请将 <clientName> 替换为实际的Feign客户端名称。feign.client.config.<clientName>.connectTimeout=5000
feign.client.config.<clientName>.readTimeout=10000
feign.client.config.order-service.connectTimeout=5000   # 连接超时时间,默认10s order-service:  #对应微服务feign.client.config.order-service.readTimeout=10000     # 请求处理超时时间,默认60s


Swift

补充说明: Feign的底层用的是Ribbon,但超时时间以Feign配置为准

http://https://blog.csdn.net/xcg340123/article/details/136021389

九、契约配置(了解)

Spring Cloud 在 Feign 的基础上做了扩展,使用 Spring MVC 的注解来完成Feign的功能。原生的 Feign 是不支持 Spring MVC 注解的,如果你想在 Spring Cloud 中使用原生的注解方式来定义客户端也是可以的,通过配置契约来改变这个配置,Spring Cloud 中默认的是 SpringMvcContract。

Spring Cloud 1 早期版本就是用的原生Fegin. 随着netflix的停更替换成了Open feign

1)修改契约配置,支持Feign原生的注解

注意:修改契约配置后,OrderFeignService 不再支持springmvc的注解,需要使用Feign原生的注解

/** * 修改契约配置,支持Feign原生的注解 * @return */@Beanpublic Contract feignContract() {    return new Contract.Default();}

Plain Text

2)OrderService 中配置使用Feign原生的注解

@FeignClient(value = "order-service")public interface OrderService {    @RequestLine("GET /hello")    public String hello();}

Java

3)也可以通过yml配置契约

feign:  client:    config:      order-service:  #对应微服务        loggerLevel: FULL        contract: feign.Contract.Default   #指定Feign原生注解契约配置

十、源码参考

源码已经放入云效

https://codeup.aliyun.com/62858d45487c500c27f5aab5/spring-cloud-alibaba-root.git

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Spring Cloud Alibaba 是阿里巴巴开发的一款基于 Spring Cloud 的微服务开发框架。它提供了一系列微服务开发所需的核心组件,如服务注册与发现、配置中心、消息总线、负载均衡、熔断器、数据存储等。而 Spring Cloud Gateway 则是 Spring Cloud 微服务架构的网关,它基于 Spring 5.0,使用了 Reactor 模式实现了非阻塞式的 API 服务路由代理。 下面是 Spring Cloud Alibaba 整合 Spring Cloud Gateway 的步骤: 1. 创建 Spring Boot 项目,并添加 Spring Cloud AlibabaSpring Cloud Gateway 依赖。 2. 编写配置文件,配置 Spring Cloud Alibaba Nacos 作为服务注册中心,并配置 Spring Cloud Gateway 的路由规则。 3. 在启动类上添加 @EnableDiscoveryClient 和 @EnableGateway 注解,启用服务注册和网关。 4. 编写过滤器,对请求进行处理。 5. 启动项目,访问网关地址进行测试。 参考示例代码: pom.xml 文件添加依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> </dependencies> ``` application.yml 文件配置: ```yaml server: port: 8080 spring: application: name: gateway cloud: nacos: discovery: server-addr: localhost:8848 gateway: routes: - id: test_route uri: http://localhost:8081 predicates: - Path=/test/** - id: demo_route uri: http://localhost:8082 predicates: - Path=/demo/** ``` 启动类 GatewayApplication.java 文件: ```java @SpringBootApplication @EnableDiscoveryClient @EnableGateway public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } } ``` 编写过滤器 GlobalFilter.java 文件: ```java @Component public class GlobalFilter implements GatewayFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 处理请求 return chain.filter(exchange); } @Override public int getOrder() { return 0; } } ``` 以上就是 Spring Cloud Alibaba 整合 Spring Cloud Gateway 的简单示例,希望可以帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今天的接口写完了吗?

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

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

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

打赏作者

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

抵扣说明:

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

余额充值