重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Feign❓Feign 是什么?
十年的河南网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整河南建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“河南网站设计”,“河南网站推广”以来,每个客户项目都认真落实执行。
🙊Feign 是一个声明式的 http 客户端, 其主要的作用就是帮助我们实现 http 的请求发送, 正如官网所说, Feign使编写Java http客户端更容易;
❓❓为什么要用 Feign?
🙊🙊如在未学习 Feign 之前, 我们利用的是 RestTemplate 进行发起远程的调用, 如下面的代码所示:String url = "http://providerservice/provider/" + consumer.getProviderId();
Provider provider = restTemplate.getForObject(url, Provider.class);
先写出 url 路径, 然后再利用 RestTemplate 发送 http 请求, 实现远程的调用; 通过代码也可以看出来这样的方式存在代码可读性比较差, 编程体验不是很好, 并且参数比较复杂, URL 不容易维护, 而 Feign 就是为了解决这个问题而生;
❓❓❓为什么选择 Feign?
🙊🙊🙊关于为什么要选择 Feign, 如下图官网所说: Feign 这个工具啊和 Jersey 和 CXF 一样都是利用了 ReST 或者 SOAP 工具, 但是呢 Feign 允许我们程序猿在 http 库里面自行写代码, 就像 Apache HC 一样, 通过可定制的解码器和错误处理方式将您的代码连接到http API,可以写入任何基于文本的http API, 并且开销和代码量是最少得.
步骤一: 引入 Feign 客户端依赖;
org.springframework.cloud spring-cloud-starter-openfeign
步骤二: 在 consumer-service 的启动类中添加注解 @EnableFeignClients 来开启 Feign 的功能;
步骤三: 开始编写 Feign 客户端;
我这里是新建了一个 feign 包, 然后在 clients 中声明远程调用的信息, 这里也是基于 Spring 的注解;
@FeignClient("providerservice") // 服务名称
public interface ProviderClient {@GetMapping("/provider/{id}") // 请求方式及路径
provider findById(@PathVariable("id") Long id);
}
步骤四: 使用 Feign 客户端来进行发送请求;
对比: 通过代码数量就可以看得出简单了很多!
@Service
public class ConsumerService {@Resource
private ConsumerMapper consumerMapper;
@Resource
private ConsumerClient consumerClient;
public Consumer queryOrderById(Long consumerId) {// 1. 查询订单
Consumer consumer = consumerMapper.findById(consumerId);
// 2. 用 Feign 远程调用
Provider provider = consumerClient.findById(consumer.getProviderId());
// 3. 封装 user 到 Order
consumer.setProvider(provider);
// 4.返回
return consumer;
}
}
2 自定义使用 Feign通常还会自定义一些配置来覆盖其默认的配置, 如常用的修改日志的配置; 如下图便是某些配置修改的类型及说明:
关于具体使用我们以配置 Feign 日志为例子进行说明.
方式一: 文件配置方式;
这里的 default 就是全局配置, 如果写的是 consumerservice 则就是对此服务的配置, FULL 为日志级别;
方式二: 使用 java 代码方式; 在 feign 包中加入 config 类, 添加相关的配置; 注意这里要声明一下 bean;
public class DefaultFeignConfiguration {@Bean
public Logger.Level logLevel() {return Logger.Level.BASIC;
}
}
如果是全局配置, 则放在 @EnableFeignClients 这个注解里面:
如果是局部配置, 就放在 @FeignClient 这个注解中;
@FeignClient(value = "providerservice", configuration = FeignClientsConfiguration.class)
public interface ProviderClient {@GetMapping("/provider/{id}")
Provider findById(@PathVariable("id") Long id);
}
3 Feign 性能优化关于 Feign 的优化主要体现在使用连接池代替默认的 URLConnection, 其次在日志设置要日志级别最好设置为 BASIC 或者是 NONE;
配置连接池方式:
步骤一: consumerservice 中引入 httpClient 依赖;
io.github.openfeign feign-httpclient
步骤二: 配置连接池;
方式一: 将消费者的 FeignClient 和 提供者的 controller 定义统一的父接口作为标准, 这样可以使得服务紧密耦合, 父接口参数列表中的映射也不会被继承; 如下图所示:
方式二 (推荐): 将 Feign 客户端当作业一个独立的模块, 并把所有的配置(如日志级别的配置) / 接口相关的信息等都放在这个模块中, 其实上面我们做的工作就是将 feign 当做一个模块来处理的, 这样可以提供给所有的消费者去使用;
具体步骤:
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧