Feign简介和入门案例

目录

一、什么是feign

二、入门案例

1、启动consul

2、创建服务提供者Provider1、和Provider2

2.1 pom相关依赖

2.2 application.yml配置

2.3 启动类添加服务发现注解 @EnableDiscoveryClient

2.4 简单Controller类,测试用

2.5 创建第二个服务提供者

3、创建服务消费者FeignConfiguration项目

1、pom相关依赖

2、application.yml

3、添加一个feign的配置类,如日志配置可在这个类里面添加

4、feign调用接口

5、controller类

三、feign的压缩请求和响应

四、feign的请求参数

五、feign中记录日志


一、什么是feign

Feign是Netflix开发的声明式,模板化的HTTP客户端。简化了HTTP的远程服务的开发。

Feign是在RestTemplate和Ribbon的基础上进一步封装,使用RestTemplate实现Http调用,使用Ribbon实现负载均衡。我们可以看成 Feign = RestTemplate+Ribbon

关于什么是负载均衡,上一章有介绍。点这里查看

二、入门案例

客户端调用http://service-provider/hello 调用过程简要说明

大致流程如下

1、服务提供者(生产者)注册服务到注册中心Consul

2、客户端(服务调用者)从注册中心获取服务列表

3、客户端根据配置的负载均衡规则选择其中一个服务调用 (上图是调用:http://localhost:8082/hello)

4、服务提供者(生产者)返回调用结果

1、启动consul

这里在windows环境下进入到consul所在目录以dev模式启动

D:\JavaRevelant\software\consul>consul agent -dev -client=0.0.0.0

2、创建服务提供者Provider1、和Provider2

2.1 pom相关依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

2.2 application.yml配置

spring:application:name: service-providercloud:consul:discovery:register: trueservice-name: ${spring.application.name}prefer-ip-address: trueip-address: ${spring.cloud.client.ip-address}instance-id: ${spring.application.name}-01port: ${server.port}host: localhostport: 8500
server:port: 8081

2.3 启动类添加服务发现注解 @EnableDiscoveryClient

2.4 简单Controller类,测试用

至此,Provider1服务提供者创建成功

2.5 创建第二个服务提供者

根上边同样配置创建Provider2服务提供者,只需修改application.yml配置   (服务注册的instance-id和server.port端口号)

spring:application:name: service-providercloud:consul:discovery:register: trueservice-name: ${spring.application.name}prefer-ip-address: trueip-address: ${spring.cloud.client.ip-address}instance-id: ${spring.application.name}-02port: ${server.port}host: localhostport: 8500
server:port: 8082

3、创建服务消费者FeignConfiguration项目

项目结构

1、pom相关依赖

	<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

2、application.yml

spring:application:name: FeignConfigurationcloud:consul:host: localhostport: 8500discovery:register: false
logging:level:com.dolphin.feignconfiguration: DEBUG
server:port: 9005
service-provider:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  # 随机访问规则,这里配置跟Ribbon一致

3、添加一个feign的配置类,如日志配置可在这个类里面添加

package com.dolphin.feignconfiguration.config;
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FeignConfiguration {//    @Bean  //若使用原生feign配置放开此注解,一般默认使用openFeign
//    public Contract feignContract() {
//
//        return new feign.Contract.Default();
//
//    }@BeanLogger.Level feignLoggerLevel() {return Logger.Level.FULL;}
}

4、feign调用接口

package com.dolphin.feignconfiguration.feign;import com.dolphin.feignconfiguration.config.FeignConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;//@FeignClient(contextId = "feignClient",name = "service-provider",configuration = FeignConfiguration.class)
@FeignClient(name = "service-provider",configuration = FeignConfiguration.class)
public interface MyFeignClient {@RequestMapping("/hello")public String hello();
}

5、controller类

package com.dolphin.feignconfiguration.controller;import com.dolphin.feignconfiguration.feign.MyFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@AutowiredMyFeignClient myFeignClient;@RequestMappingpublic String hello() {return myFeignClient.hello();}
}

6、启动类开启feign调用

@EnableDiscoveryClient
@EnableFeignClients

package com.dolphin.feignconfiguration;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignConfigurationApplication {public static void main(String[] args) {SpringApplication.run(FeignConfigurationApplication.class, args);}}

启动项目可测试结果为随机访问2个服务

三、feign的压缩请求和响应

如果要对请求和响应进行压缩处理,则应在配置文件中配置一下代码:

feign:compression:request:enabled: true   #支持请求压缩mime-types: text/xml,application/xml,application/json #支持媒体类型列表min-request-size: 2048 #支持请求媒体文件大小response:enabled: true #支持响应压缩

四、feign的请求参数

如果在feign接口中添加请求参数,则跟我们Controller中参数格式是一致的

@FeignClient(name = "service-provider",configuration = FeignConfiguration.class)
public interface MyFeignClient {@RequestMapping("/hello")public String hello(@RequestParam String a);@RequestMapping("/hello2")public String hello2(@RequestBody User user);
}

五、feign中记录日志

日子等级说明
NONE不记录(默认)
BASIC只记录请求方法、URL、响应状态码和执行时间
HEADERS记录基本信息、请求和响应标题
FULL记录请求、响应的标题、正文和元数据

application.yml中添加如下配置开启日志配置

 
feign:client:config:service-provider: #此处写的是服务名称,针对我们feign微服务的配置,如果是default就是全局配置loggerLevel: full #配置Feign的日志级别,相当于代码配置方式中的Logger#在application.yml中使用 logging.level.<Feign客户端对应的接口的全限定名> 的参数配置格式来开启指定客户端日志
logging:level:com.bjpowernode.feign: debug

这里通过配置类的方式也可以,上边案例中就是通过配置类的方式,不过要注意的是,配置类方式指定的配置类需要放在@ComponentScan不能扫描到的地方。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/574045.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业微信知识库:从了解到搭建的全流程

你是否也有这样的疑惑&#xff1a;为什么现在的企业都爱创建企业微信知识库&#xff1f;企业微信知识库到底有什么用&#xff1f;如果想要使用企业微信知识库企业应该如何创建&#xff1f;这就是我今天要探讨的问题&#xff0c;感兴趣的话一起往下看吧&#xff01; | 为什么企业…

YOLOv9改进策略:block优化 | Transformer架构ConvNeXt 网络在检测中大放异彩

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;Transformer架构 ConvNeXt 网络在图像分类和识别、分割领域大放异彩&#xff0c;同时对比 Swin-T 模型&#xff0c;在多种任务中其模型的大小和准确率均有一些提升&#xff0c;模型的 FLOPs 较大的减小且 Acc …

离线数仓(八)【DWD 层开发】

前言 1、DWD 层开发 DWD层设计要点&#xff1a; &#xff08;1&#xff09;DWD层的设计依据是维度建模理论&#xff08;主体是事务型事实表&#xff08;选择业务过程 -> 声明粒度 -> 确定维度 -> 确定事实&#xff09;&#xff0c;另外两种周期型快照事实表和累积型…

一文教你学会用群晖NAS配置WebDAV服务结合内网穿透实现公网同步Zotero文献库

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件&#xff0c;能轻易的部署微服务。它支持多种后端 (D…

Electron+Vue构建项目时出错:Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT

问题&#xff1a;ElectronVue构建项目时出错&#xff1a;Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT URL:https://github.com/nklayman/vue-cli-plugin-electron-builder/issues/1701 一&#xff0c;构建时node版本要低 同时构建命令如下&#xff1a; "el…

信号量,sem_init/wait/post/destroy函数的使用

sem_init&#xff08;&#xff09;&#xff1b;--------------------------------------------------------------------------------------- 信号量的初始化函数定义在线程创建之前&#xff0c;资源变量定义为全局变量 一开始只有一个写资源&#xff0c;没有读资源 sem_wait(…

【Java程序设计】【C00402】基于(JavaWeb)Springboot的新冠物资管理(含论文)

基于&#xff08;JavaWeb&#xff09;Springboot的新冠物资管理&#xff08;含论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千…

Sodinokibi勒索病毒,BTC钱包地址被曝光

Sodinokibi勒索病毒在国内首次被发现于2019年4月份&#xff0c;2019年5月24日首次在意大利被发现&#xff0c;在意大利被发现使用RDP攻击的方式进行传播感染&#xff0c;这款病毒被称为GandCrab勒索病毒的接班人&#xff0c;从样本逆向分析的角度&#xff0c;可以看到Sodinokib…

7、鸿蒙学习-共享包概述

HarmonyOS提供了两种共享包&#xff0c;HAR&#xff08;Harmony Archive&#xff09;静态共享包&#xff0c;和HSP&#xff08;Harmony Shared Package&#xff09;动态共享包。 HAR与HSR都是为了实现代码和资源的共享&#xff0c;都可以包含代码、C库、资源和配置文件&#xf…

Nginx超详细讲解+实操

前言 nginx作为当今火爆的、高性能的http及反向代理服务&#xff0c;不管前端还是后端&#xff0c;都需要全面去了解&#xff0c;学习&#xff0c;实操。 nginx 介绍 为了有一个全面的认知&#xff0c;接下来我们先来看看nginx的架构以及一些特点。 nginx 特点 处理响应请…

图扑数字孪生智慧城市,综合治理一屏统览

现代城市作为一个复杂系统&#xff0c;牵一发而动全身&#xff0c;城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。领导曾在中央城市工作会议上指出&#xff0c;城市工作要树立系统思维&#xff0c;从构成城市诸多要素…

DFS:从递归去理解深度优先搜索

一、深入理解递归 二、递归vs迭代 三、深入理解搜索、回溯和剪枝 四、汉诺塔问题 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public: //笔试题&#xff0c;不讲武德&#xff0c;CAvoid move(int n,vector<int>& A, vector<int>& B, ve…