SpringCloudAlibaba整合Feign实现远程HTTP调用的简单示例

目录
  • 前言
    • 环境
  • 简单示例
  • Feign 的组成和支持的配置项
    • Feign 的组成
    • Feign 支持的配置项
  • Feign 的日志
    • Feign 的日志级别
    • 自定义配置 Feign 的日志级别
    • 全局配置 Feign 的日志级别
    • Feign 日志级别配置方式总结
  • 项目源码

前言

FeignNetflix开源的声明式HTTP客户端,致力于让编写http client更加简单,Feign可以通过声明接口自动构造请求的目标地址完成请求

环境

Spring Cloud Hoxton.SR9 + Spring Cloud Alibaba 2.2.6.RELEASE
FeignNetflix公司产品,目前已停止更新,文章中使用的是OpenFeign,是Spring社区开发的组件

简单示例

content-center pom.xml

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

启动类ContentCenterApplication.java

@EnableFeignClients
public class ContentCenterApplication {
}

TestController.java

import com.coisini.contentcenter.feignclient.TestFeignClient;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestController {

     private final TestFeignClient testFeignClient;

	/**
     * 整合Feign
     * @return
     */
    @GetMapping("test4")
    public String test4() {
        return testFeignClient.test("Coisini");
    }

}

TestFeignClient.java

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @FeignClient(name = "user-center")
 * name 要请求的微服务的名称
 */
@FeignClient(name = "user-center")
public interface TestFeignClient{

    /**
     * test接口被调用时,feign会构造出 url
     * http://user-center/test/{name} 完成请求
     * @param name
     * @return
     */
    @GetMapping("/test/{name}")
    String test(@PathVariable String name);

}

user-center TestController.java

@RestController
@Slf4j
public class TestController {

    @GetMapping("/test/{name}")
    public String test(@PathVariable String name) {
        log.info("请求...");
        return "hello " + name;
    }

}

示例测试结果



…至此,已完成Feign的整合

Feign 的组成和支持的配置项

Feign 的组成

接口 作用 默认值
Feign.Builder Feign的入口 Feign.Builder
Client Feign底层请求方式 和Ribbon配合时 LoadBalancerFeignClient
不和Ribbon配合时 feign.Client.Default
Contract 契约,注解支持 SpringMvcContract
Encoder 编码器,用于将对象转换成HTTP请求消息体 SpringEncoder
Decoder 解码器,将响应消息转换成对象 ResponseEntityDecoder
Logger 日志管理器 Slf4jLogger
RequestInterceptor 用于为每个请求添加通用逻辑

Feign 支持的配置项

配置项 作用
Logger.Level 指定日志级别
Retryer 指定重试策略
ErrorDecoder 指定错误解码器
Request.Options 超时时间
Collection< RequestInterceptor> 拦截器
SetterFactory 用于设置Hystrix的配置属性,整合Hystrix才会生效

配置属性支持的配置项

feign.client.config:
  <feignName>:
    connectTimeout: 5000 # 连接超时时间
    readTimeout: 5000 # 读取超时时间
    loggerLevel: full # 日志级别
    errorDecoder: com.example.SimpleErrorDecoder # 错误解码器
    retryer: com.example.SimpleRetryer # 重试策略
    requestInterceptors: com.example.FooRequestInterceptor # 拦截器
    decode404: false # 是否对404错误码解码
    encoder: com.example.SimpleEncoder # 编码器
    decoder: com.example.SimpleDecoder # 解码器
    contract: com.example.SimpleContract # 契约

Feign 的日志

Feign 的日志级别

feign默认不打印任何日志

级别 打印内容
NONE(默认值) 不记录任何日志
BASIC 仅记录请求方法、URL、响应状态代码以及执行时间
HEADERS BASIC级别的基础上,记录请求和响应的header
FULL 记录请求和响应的header、body和元数据

自定义配置 Feign 的日志级别

Java 代码配置方式 UserCenterFeignConfiguration.java

import feign.Logger;
import org.springframework.context.annotation.Bean;

/**
 * @Description 用户中心 Feign 配置类
 */
public class UserCenterFeignConfiguration {

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

}

UserCenterFeignClient.java

@FeignClient(name = "user-center", configuration = UserCenterFeignConfiguration.class)
public interface UserCenterFeignClient {
	...
}

application.yml

logging:
  level:
    # feign 的日志级别是建立在接口日志级别基础上的
    com.coisini.contentcenter.feignclient.UserCenterFeignClient: debug

访问接口查看feign日志

yml 属性配置方式

application.yml,实现效果同上

logging:
  level:
    com.coisini.contentcenter.feignclient.UserCenterFeignClient: debug

# 自定义配置 feign 日志级别
feign:
  client:
    config:
      # 调用的微服务名称
      user-center:
        loggerLevel: full

全局配置 Feign 的日志级别

Java 代码配置方式 GlobalFeignConfiguration.java

import feign.Logger;
import org.springframework.context.annotation.Bean;

/**
 * @Description Feign 全局配置类
 */
public class GlobalFeignConfiguration {

    @Bean
    public Logger.Level level() {
        // feign 日志级别 FULL
        return Logger.Level.FULL;
    }

}

启动类ContentCenterApplication.java

@EnableFeignClients(defaultConfiguration = GlobalFeignConfiguration.class)
@SpringBootApplication
public class ContentCenterApplication {
	...
}

application.yml

logging:
  level:
    com.coisini.contentcenter.feignclient.UserCenterFeignClient: debug

接口日志打印

yml 属性配置方式 application.yml

# 自定义配置 feign 日志级别
feign:
  client:
    config:
      # 全局配置
      default:
        loggerLevel: full

实现效果同上

Feign 日志级别配置方式总结

  • 配置方式优先级:全局代码配置 < 全局属性配置 < 自定义代码配置(细粒度) < 自定义属性配置(细粒度)
  • 建议尽量使用属性配置

项目源码

GitHub: https://github.com/Maggieq8324/coisini-cloud-alibaba

Gitee: https://gitee.com/maggieq8324/coisini-cloud-alibaba

到此这篇关于SpringCloudAlibaba 整合 Feign 实现远程 HTTP 调用的文章就介绍到这了,更多相关SpringCloudAlibaba远程 HTTP 调用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringCloud-Alibaba-Sentinel-配置持久化策略详解

    前言: Sentinel的如果没有配置持久化的话配置一些 流控 和服务降级 从启项目就会置空所以需要持久化的操作 动态规则扩展 拉模式:客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS.文件,甚至是 VCS 等.这样做的方式是简单,缺点是无法及时获取变更: 推模式:规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos.Zookeeper 等配置中心.这种方式有更好的实时性和一致性保证 案例用Nacos 步奏: pom 添加nacos 对sen

  • SpringCloud-Alibaba-Sentinel服务降级,热点限流,服务熔断

    前言: 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一.一个服务常常会调用别的模块,可能是另外的一个远程服务.数据库,或者第三方 API 等.例如,支付的时候,可能需要远程调用银联提供的 API:查询某个商品的价格,可能需要进行数据库查询.然而,这个被依赖服务的稳定性是不能保证的.如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用 熔断策略 Sentin

  • SpringCloud Alibaba使用Seata处理分布式事务的技巧

    Seata简介 在传统的单体项目中,我们使用@Transactional注解就能实现基本的ACID事务了. 但是前提是: 1) 数据库支持事务(如:MySQL的innoDB引擎) 2) 所有业务都在同一个数据库中执行 随着微服务架构的引入,需要对数据库进行分库分表,每个服务拥有自己的数据库,这样传统的事务就不起作用了,那么我们如何保证多个服务中数据的一致性呢? 这样就出现了分布式事务,而Seata就是为微服务架构而生的一种高性能.易于使用的分布式事务解决方案. Seata 中有三个基础组件: T

  • SpringCloud-Alibaba-Nacos启动失败解决方案

    下载及启动 Nacos 下载地址:https://github.com/alibaba/nacos/releases 在Windows下,进入bin目录,双击 startup.cmd 即可运行 启动出现问题 问题:双击 startup.cmd 启动失败,窗口一闪而过 你需要先去试试你的 Tomcat 能否启动:进入 Tomcat 安装目录 bin 文件夹,双击 startup.bat 如果能正常启动,出门右转,下面的不用看了

  • SpringCloud Alibaba 基本开发框架搭建过程

    在上一节,我们已经完成了项目的整体技术架构设计和具体的数据库设计,接下来,我们搭建整体的开发框架. 开发工具选用Idea. 开发工具只是为了提高效率,如果不习惯Idea的话,STS使用起来也是OK的. 1.创建多Module工程 1.1.创建父工程 创建一个父项目,项目命名为eshop-project,用于管理子模块功能. 新建Project 选择Maven工程,next 填写GroupId和ArtifactID 填写项目名,选择项目位置 删除src,添加maven配置 <!--设置为pom,管

  • SpringCloudAlibaba整合Feign实现远程HTTP调用的简单示例

    目录 前言 环境 简单示例 Feign 的组成和支持的配置项 Feign 的组成 Feign 支持的配置项 Feign 的日志 Feign 的日志级别 自定义配置 Feign 的日志级别 全局配置 Feign 的日志级别 Feign 日志级别配置方式总结 项目源码 前言 Feign是Netflix开源的声明式HTTP客户端,致力于让编写http client更加简单,Feign可以通过声明接口自动构造请求的目标地址完成请求 环境 Spring Cloud Hoxton.SR9 + Spring

  • SpringBoot如何使用feign实现远程接口调用和错误熔断

    这篇文章主要介绍了SpringBoot如何使用feign实现远程接口调用和错误熔断,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.第一步,新建两个简单的springboot项目并创建rest接口 demo系统的rest接口 plus系统的调用接口 2.在项目pom文件里导入feign和hystrix的pom依赖包 <properties> <java.version>1.8</java.version> <s

  • C# 创建、部署和调用WebService简单示例

    webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互. 概念性的东西就不说太多,下面开始创建一个简单的webservice的例子.这里我用的是Visual Studio 2015开发工具. 首先创建一个空的Web应用程序. 然后鼠标右键点击项目,选择 添加>新建项. 选择Web服务,点击添加.一个简单的webservice就创建完成了,接下来编写两个简单的方法. PS:如果方法需要通过webservice的地址进行调用,那就必须在方法上面打上 [WebMethod] 的特

  • 从零开始学springboot整合feign跨服务调用的方法

    介绍 微服务横行的互联网世界, 跨服务调用显得很平凡, 我们除了采用传统的http方式接口调用, 有没有更为优雅方便的方法呢? 答案是肯定的,feign就提供了轻便的方式! 如果你的服务都注册了注册中心,比如nacos, 那么调用会显得很轻松, 只需一个注解, 带上需要调用的服务名即可,**feign + nacos**会帮你做剩余的事. 如果没有注册中心, 也无需担心, feign一样可以以传统的 ip:port 方式进行调用~ 下面,我们来实践下吧 springboot整合feign 引入依

  • 使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务的方法(推荐)

    在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnection.Apache的Http Client.Netty的异步HTTP Client, Spring的RestTemplate.但是,用起来最方便.最优雅的还是要属Feign了. Feign简介 Feign是一种声明式.模板化的HTTP客户端.在Spring Cloud中使用Feign, 我们可以做到使用HTT

  • SpringCloud使用Feign实现远程调用流程详细介绍

    目录 前言 1. 导入依赖坐标 2. 开启Feign自动装配 3. 声明远程调用 4. 替代RestTemplate 5. 测试 前言 本次示例代码的文件结构如下图所示. 1. 导入依赖坐标 在 order-service 的 pom.xml 文件中导入 Feign 的依赖坐标. <!-- Feign远程调用客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifa

  • 使用SpringCloudAlibaba整合Dubbo

    目录 SpringCloudAlibaba整合Dubbo 构建服务接口 构建服务接口提供方 构建服务接口消费方法 SpringCloudAlibaba之Dubbo总结 Dubbo概述 Dubbo配置方式 其他一些有意思的地方 SpringCloudAlibaba整合Dubbo Spring Cloud是一套较为完整的架构方案,而Dubbo只是服务治理与RPC实现方案. Dubbo的注册中心采用了ZooKeeper,而Spring Cloud体系中的注册中心并不支持ZooKeeper.直到Spri

  • SpringCloud实战之Feign声明式服务调用

    在前面的文章中可以发现当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下,并且显得好傻. 那么有没有更好的解决方案呢?答案是确定的有,Netflix已经为我们提供了一个框架:Feign. Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单.Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义

  • SpringCloud超详细讲解Feign声明式服务调用

    目录 入门案例 @FeignClient注解详解 Feign Client的配置 Feign请求添加headers 负载均衡 (Ribbon) 容错机制 Hystrix支持 Sentinel支持 Feign开启容错机制支持后的使用方式 请求压缩feign.compression 日志级别 入门案例 在服务消费者导入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>

  • Sentinel整合Feign流程详细讲解

    修改84模块 84消费者调用提供者9003 Feign组件一般是消费侧 重点依赖 <!--SpringCloud openfeign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 激活Sentinel对Fei

随机推荐