跟着老侯玩编程 跟着老侯玩编程
首页
  • 基础语法
  • 网络编程
  • 设计模式
  • 基础篇
  • 进阶篇
  • 框架篇
  • Redis
  • Alibaba
  • 课程目录
  • 码农宝典
留言
首页
  • 基础语法
  • 网络编程
  • 设计模式
  • 基础篇
  • 进阶篇
  • 框架篇
  • Redis
  • Alibaba
  • 课程目录
  • 码农宝典
留言
  • Redis

    • 基础环境
    • Redis详解
    • 快速列表
    • 链表
    • 跳跃表
    • 压缩列表
    • Redis配置文件详解
    • Ruby环境
  • SpringCloudAlibaba

    • 微服务-注册中心
    • 微服务-负载均衡
    • 微服务-微服务调用
      • 服务调用简述
      • 整合 OpenFeign
      • Feign 自定义配置
        • 日志配置
        • 超时时间配置
        • 契约配置
    • 微服务-Sentinel
    • 微服务-配置中心
    • 微服务-网关
  • 分布式
  • SpringCloudAlibaba
舞动的代码
2022-08-30
目录

微服务-微服务调用

# 服务调用简述

Feign 是 Netflix 开发的声明式、模板化的 HTTP 客户端,其灵感来自 Retrofit、JAXRS-2.0 以及 WebSocket。Feign 可帮助我们更加便捷、优雅地调用 HTTP API。 Feign 支持多种注解,例如 Feign 自带的注解或者 JAX-RS 注解等。

Feign 可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。它像 Dubbo 一样,consumer 直接调用接口方法调用 provider,而不需要通过常规的 Http Client 构造请求再解析返回数据。它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。

Spring Cloud openfeign 对 Feign 进行了增强,使其支持 Spring MVC 注解,另外还整合了 Ribbon 和 Nacos,从而使得 Feign 的使用更加方便

# 整合 OpenFeign

引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1
2
3
4

定义接口(不需要提供实现类)

@FeignClient(value="product-service",path="/product")
public interface ProductServiceFeign {
    @GetMapping(value = "/hello")
    public String product();

}
1
2
3
4
5
6

编写 Controller


@RestController
@RequestMapping(value = "/api/user")
public class UserController {

    @Autowired
    private ProductServiceFeign productService;

    @GetMapping(value = "/product")
    public String place(){


        return "接收到的响应的结果是:"+productService.product();
    }

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

启动类上启用

@SpringBootApplication
@EnableDiscoveryClient
//负载均衡策略
@LoadBalancerClients(value = {
        @LoadBalancerClient(configuration = {CustomLoadBalancerConfiguration.class})
})
@EnableFeignClients

public class UserApplication{
    public static void main( String[] args ){
        SpringApplication.run(UserApplication.class, args);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# Feign 自定义配置

Feign 提供了很多的扩展机制,让用户可以更加灵活的使用

# 日志配置

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

OpenFeign 日志等级有 4 种,分别是

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

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

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

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

JavaConfig 配置(需要注意的是这样所有的服务都会开启)


@Configuration
public class FeignConfig {

    @Bean
    public Logger.Level xxxx(){

        System.out.println("0000000000000");
        return Logger.Level.BASIC;
    }
}

1
2
3
4
5
6
7
8
9
10
11
12

让某一个微服务生效的话,可以进行如下配置

@FeignClient(value="product-service",path="/product",configuration = {FeignConfig.class})
public interface ProductServiceFeign {
    @GetMapping(value = "/hello")
    public String product();

}

1
2
3
4
5
6
7

开启 SpringBoot 指定目录下的日志

logging.level.com.example.service=debug
1

# 超时时间配置

通过 Options 可以配置连接超时时间和读取超时时间,Options 的第一个参数是连接的超时时间(ms),默认值是 2s;第二个是请求处理的超时时间(ms),默认值是 5s。


@Configuration
public class FeignConfig {
    @Bean
    public Request.Options options() {
        return new Request.Options(5000, 10000);
    }
}
1
2
3
4
5
6
7
8

# 契约配置

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

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

注意:不要使用全局的形式进行配置


public class FeignDefaultConfig {
    @Bean
    public Contract feignContract(){
        return new Contract.Default();
    }
}

1
2
3
4
5
6
7
8

对应服务的配置

@FeignClient(value="service-order",path="/api",configuration = {FeignDefaultConfig.class})
public interface OrderServiceFeign {

    @RequestLine(value = "GET /hello")
    public String hello();
}

1
2
3
4
5
6
7

单独对某个服务开启是可以编写到配置文件中的

feign.client.config.service-order.contract=feign.Contract.Default
1
微服务-负载均衡
微服务-Sentinel

← 微服务-负载均衡 微服务-Sentinel→

Theme by Vdoing | Copyright © 2013-2023 冀ICP备16006233号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×