当前位置: 首页 > news >正文

SpringCloud-Feign

Spring Cloud中集成Feign

        (只是笔记而已 其中有点命名啥的不对应,搜到了就划走吧)

        Feign--[feɪn]:Web 服务客户端,能够简化 HTTP 接口的调用。

        没有Feign的之前服务提供者

package com.springcloudprovide.controller;import com.springcloudprovide.service.UserName;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@Autowiredprivate UserName userName;@RequestMapping("username")public String getUserName(){return userName.getUsername();}
}

        服务消费者,通过RestTemplate来调用服务提供者的服务接口

package com.springcloudconsumer.tempalte;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class RestTemplateConfiguration {@Bean@LoadBalancedpublic RestTemplate getRestTmplate(){return new RestTemplate();}
}
package com.springcloudconsumer.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@RestController
public class UserBeanController {@Autowiredprivate RestTemplate restTemplate;@RequestMapping("/showName")public String getUserName(){System.out.println("123");return restTemplate.getForObject("http://localhost:8081/username", String.class);}
}

Feign的使用

创建基于Eureka模块的注册中心和服务提供者

基于Feign的服务消费者

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><version>3.0.2</version></dependency><!--  openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>3.0.2</version></dependency>

定义Feign的客户端接口

package com.springcloud.feign.service;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;@FeignClient(value = "eurekaprovider")
public interface UserServiceFeign {@RequestMapping("username")public String getUserName();
}

这个注解@FeignClient标识当前是一个 Feign 的客户端,value 属性是对应的服务名称,也就是你需要调用哪个服务中的接口。

创建服务消费者的控制类

package com.wangxing.eurekacomsumer.eurekacomsumerdemo.controller;
import com.wangxing.eurekacomsumer.eurekacomsumerdemo.serviceclient.UserFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;=
@RestController
public class UserBeanController {//注入一个Feign的客户端对象@Autowiredprivate UserFeignClient  userFeignClient;@RequestMapping("/showName.do")public  String  getUserName(){return  userFeignClient.getUserName();}
}

配置主类

package com.springcloud.feign;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableHystrix
@EnableFeignClients
public class SpringcloudFeignApplication {public static void main(String[] args) {SpringApplication.run(SpringcloudFeignApplication.class, args);}}

如果你的 Feign 接口定义跟你的启动类不在同一个包名下,还需要制定扫描的包名 @EnableFeignClients(basePackages=“com.fangjia.api.client”)

通过跟之前的代码相比可以发现,我们的调用方式变得越来越简单了,从最开始的指定地址,到后面通过 Eureka 中的服务名称来调用,再到现在直接通过定义接口来调用。

Feign 提供了很多的扩展机制,让用户可以更加灵活的使用,这节我们来学习 Feign 的一些自定义配置。
使用配置自定义 Feign 的配置
除了使用代码的方式来对 Feign 进行配置,我们还可以通过配置文件的方式来指定 Feign 的配置。
# 链接超时时间
feign.client.config.feignName.connectTimeout=5000
# 读取超时时间
feign.client.config.feignName.readTimeout=5000
# 日志等级
feign.client.config.feignName.loggerLevel=full
# 重试
feign.client.config.feignName.retryer=com.example.SimpleRetryer
# 拦截器
feign.client.config.feignName.requestInterceptors[0]=com.example.FooRequestInterceptor
feign.client.config.feignName.requestInterceptors[1]=com.example.BarRequestInterceptor
# 编码器
feign.client.config.feignName.encoder=com.example.SimpleEncoder
# 解码器
feign.client.config.feignName.decoder=com.example.SimpleDecoder
# 契约
feign.client.config.feignName.contract=com.example.SimpleContract

http://www.lryc.cn/news/514.html

相关文章:

  • XCP实战系列介绍08-基于Vehicle Spy进行XCP测量的工程配置详解
  • JVM调优几款好用的内存分析工具
  • Vue中路由缓存及activated与deactivated的详解
  • 【漏洞复现】phpStudy 小皮 Windows面板 RCE漏洞
  • 跨域小样本系列2:常用数据集与任务设定详解
  • HTML浪漫动态表白代码+音乐(附源码)
  • The last packet sent successfully to the server was 0 milliseconds ago. 解决办法
  • 分布式高级篇1 —— 全文检索
  • 集成电路开发及应用-模拟数字部分专栏目录
  • ios使用SARUnArchiveANY 解压rar文件(oc和swift版本)
  • 【Python学习笔记】21.Python3 函数(2)
  • day57回文子串_最长回文子序列
  • Element UI框架学习篇(二)
  • 【C++】类与对象(上)
  • Leetcode.1797 设计一个验证系统
  • Kaldi - 数据文件准备
  • 91.【SpringBoot-03】
  • 【本地项目】上传到【GitLab】流程详解
  • 初阶指针C
  • 云原生安全2.X 进化论系列|揭秘云原生安全2.X的五大特征
  • json文件在faster_rcnn中从测试到训练 可行性
  • golang 1.20正式发布,更好更易更强
  • 图片显示一半怎么回事?
  • 102-并发编程详解(中篇)
  • jsp羽毛球场馆管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • CacheLib 原理说明
  • 【dapr】服务调用(Service Invokation) - app id的解析
  • Odoo丨5步轻松实现在Odoo中打开企微会话框
  • python读取.stl文件
  • vue2.0项目第一部分