微服务学习之服务注册与发现(OpenFeign服务间调用)

微服务系列

1、Nacus 服务搭建及使用
2、Nacos 配置中心
3、Nacos 服务注册与发现之OpenFeign服务间调用
4、Spring Security & Oauth2 认证授权
5、网关(Gateway / Sentinel)路由及熔断限流
6、网关(Gateway自定义断言和过滤器)



前言

在 《Nacos服务搭建及使用》中,对Nacos的服务搭建与调用基本操作做了简单的介绍,服务调用也是用RestTemplate实现服务间的调用,这篇讲的是另一种调用方法,OpenFeign 的服务间调用的基本方式。

一、OpenFeign简介

在说 OpenFeign 介绍之前,必须先提一嘴 Feign,什么是 Feign?Feign 是Netflix 开发的声明式、模板化的 HTTP 客户端,可以帮助我们更便捷的调用 HTTP api,具有可插入的注解支持,使用起来方便。

OpenFeign 则是 Spring Cloud 下的一个组件,对 Feign 进行了增强,使其支持 Spring MVC注解,还整合了 Ribbon & Eureka 和 断路器,以在使用 Feign 时提供了负载均衡的 HTTP 客户端。

二、使用OpenFeign调用服务

OpenFeign 的使用特别简单,但是 OpenFeign 的功能非常强大,只需要映入 OpenFeign 的依赖,然后进行配置,通过 Spring Boot 的自动装配就可以在应用中起到作用了。

2.1 映入依赖

加入 OpenFeign 依赖,版本用父pom统一管理。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.2 配置 OpenFeign

启用 OpenFeign,是 OpenFeign 在项目中可用,启动方式只需要在启动类上加上注解 @EnableFeignClients 即可。
这样就可以在项目总使用 OpenFeign调用其他服务API 了。

@SpringBootApplication
@EnableFeignClients
public class HomeApplication {

    public static void main(String[] args) {
        SpringApplication.run(HomeApplication.class, args);
    }
}

2.2.1、Logger.Level 的配置

Logger.Level 总共有 4 个级别,分别是:
1、NONE:性能最佳,适用于生产
2、BASIC:使用与生产环境追踪问题
3、HEADERS:BASIC 之上,仅仅记录 请求头 响应头
4、FULL:适合开发测试,打印 请求 相应 body 信息
配置方式可在配置类中配置,也可在配置文件中配置,也可以支持局部配置,见 下面 调用服务 配置。

配置文件配置如下:

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

配置文件配置如下:

支持局部配置,针对某一个服务配置,home-server 是服务名称。

feign:
  client:
    config:
      home-server:
        loggerLevel: BASIC

2.2.2、契约配置

Spring Cloud 在 原生的 Feign 上面做了扩展,可以让 Feign 支持 Spring MVC 注解来调用,原生的 Feign 不支持 Spring MVC 注解,如果想用原生的 Feign 配置,可以通过配置契约来改变。
原生的 Feign 只支持 @RequestLine(“GET /list”) 的方式。

配置类方式如下:

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

配置文件配置如下:

feign:
  client:
    config:
      contract: feign.Contract.Default

2.2.3、超时时间配置

配置 超时 时间为,连接 5 秒超时,读取数据 10 秒超时,并且超时跳转。

配置类配置:

@Bean
public Request.Options feignOptions(){
    return new Request.Options(5, TimeUnit.SECONDS, 10, TimeUnit.SECONDS, true);
}

配置文件配置:

feign:
  client:
    config:
      home-server:
        loggerLevel: BASIC
        contract: feign.Contract.Default
        connectTimeout: 5000
        readTimeout: 10000

2.2.4、拦截器配置

配置一个基本权限过滤器,调用的时候需要带上 username,password 才可以访问成功,这里是BasicAuthRequestInterceptor 内置的 拦截器。
此拦截器作用是向请求头添加 Authorization 参数,值是由 username,password 生成的编码。

配置类配置:

@Bean
public BasicAuthRequestInterceptor basicAuthRequestInterceptor(){
    return new BasicAuthRequestInterceptor("yphen", "132456");
}

在被调用方打印请求头参数:
Basic Token

2.2.5 自定义拦截器配置

也可以自定义,只需要 实现 RequestInterceptor 接口然后配置即可。

public class FeignUserInfoRequestInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {
        String access_token = UUID.randomUUID().toString();
        template.header("Authorization",access_token);
    }
}

配置文件配置:

feign:
  client:
    config:
      home-server:
        connectTimeout: 5000
        readTimeout: 10000
		requestInterceptors[0]: com.home.interceptors.FeignUserInfoRequestInterceptor

2.3 调用服务

使用注解 @FeignClient 加上 Spring MVC 的注解 @RequestMapping 就可以方便的调用其他服务的 API 了。
configuration 针对此调用服务配置 OpenFeign 配置,局部配置。
实例中调用了 user-server 服务中的 /user/uMessage 接口。

@FeignClient(value = "user-server", path = "/user", configuration = OpenFeignConfig.class)
public interface MessageService {

    @RequestMapping(value = "uMessages", method = RequestMethod.GET)
    String list();

}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值