北京网站建设备案,网页设计的最佳尺寸,建站63年来第一次闭站?北京站辟谣,开发小程序需要哪些技术前言#xff1a;OpenFeign是可以跨服务、跨进程的调用方式。
什么是Feign
Feign是Netflix开发的声明式、模版化的HTTP客户端。 优势: Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验#xff0c;开发者完全感知不到这是远程方法#xff0c;更感知不到这…前言OpenFeign是可以跨服务、跨进程的调用方式。
什么是Feign
Feign是Netflix开发的声明式、模版化的HTTP客户端。 优势: Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验开发者完全感知不到这是远程方法更感知不到这是个 HTTP 请求开发者无需关注与远程的交互细节更无需关注分布式环境开发。
Spring Cloud Alibaba快速整合OpenFeign
1、引入依赖谁远程调用谁引入这个依赖
!-- openfeign 远程调用 --
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId
/dependency2、编写调用接口
package com.by.controller;import cn.by.moder.OrderDTO;
import cn.by.moder.OrderOkDTO;
import cn.by.moder.OrderQueryDTO;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;import org.springframework.web.bind.annotation.*;import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;RestController
RequestMapping(/api/order)
public class OrderController {GetMapping(/test)public String test() {return 咸蛋超人杨order;}GetMapping(/ordering)public String ordering() {return 咸蛋超人杨;}GetMapping(/ordering1)public OrderOkDTO ordering1() {OrderOkDTO build OrderOkDTO.builder().id(10086L).needPay(new BigDecimal(100)).build();return build;}PostMapping(/ordering2)public OrderOkDTO ordering2(RequestBody OrderDTO orderDTO) {ListString names orderDTO.getProducts().stream().map(item-item.getName()).collect(Collectors.toList());String join StrUtil.join(,, names);OrderOkDTO build OrderOkDTO.builder().id(10086L).needPay(new BigDecimal(100)).msg(join).build();return build;}GetMapping(/select)public String select(OrderQueryDTO queryDTO) {String empty StrUtil.EMPTY;if (queryDTO.getId() ! null) {empty 通过Id查询queryDTO.getId();}if (queryDTO.getUserId()! null) {empty 通过UserId查询queryDTO.getUserId();}return empty;}GetMapping(/sleep)public String sleep(RequestParam Integer time) {ThreadUtil.safeSleep(time*1000);return 你睡眠了time秒;}
}
3、在创建一个调用端调用端在启动类上添加EnableFeignClients注解并创建service接口FeignClient注解 接口
package com.by.service;import cn.by.moder.OrderDTO;
import cn.by.moder.OrderOkDTO;
import cn.by.moder.OrderQueryDTO;
import com.by.config.FeignConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*;//如果想单独配置某个服务的日志级别使用configuration单独配置
// FeignClient(name order-service-app,configuration FeignConfig.class)
FeignClient(name order-service-app)
RequestMapping(/api/order)
public interface OrderService {GetMapping(/ordering)String ordering();GetMapping(/ordering1)OrderOkDTO ordering1();PostMapping(/ordering2)OrderOkDTO ordering2(RequestBody OrderDTO orderDTO);GetMapping(/select)String select(SpringQueryMap OrderQueryDTO queryDTO);GetMapping(/sleep)String sleep(RequestParam Integer time);
}4、发起调用像调用本地方法一样调用远程服务
高级配置
1、全局配置 注意一此处配置Configuration注解就会全局生效如果想指定对应某一个服务生效就不能配置. 注意二 因为feign调试日志是debug级别输出,springboot默认的日志级别是info所以feign的debug日志级别就不会输出一定要结合
package com.by.config;import feign.Logger;
import feign.Request;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.concurrent.TimeUnit;Configuration //全局配置 结合properties中的logging.level.com.by debug使用
public class FeignConfig {// Bean// Logger.Level feignLoggerLevel(){// // 这里记录所有请求和响应的详细信息包括头信息等// return Logger.Level.FULL;// }Beanpublic Request.Options options(){return new Request.Options(10, TimeUnit.SECONDS,20, TimeUnit.SECONDS,true);}
}
2 、局部配置 局部配置让调用的微服务生效在FeignClient 注解中指定使用的配置类 3、 在配置文件配置
logging.level.com.beiyou debug
开启日志##配置feign 的日志级别
#-- default 全局配置
feign.client.config.default.loggerLevelNONE
#-- nacos-a 具体服务名
feign.client.config.nacos-a.loggerLevelFULL超时配置 全局配置 配置文件配置
#全局配置
feign.client.config.default.connectTimeout5000
feign.client.config.default.readTimeout10000这里default 是一个特殊的客户端名称用于表示全局配置。设置 connectTimeout 和 readTimeout 属性的值来定义全局的连接超时时间和读取超时时间。#局部配置 请将 clientName 替换为实际的Feign客户端名称。
feign.client.config.clientName.connectTimeout5000
feign.client.config.clientName.readTimeout10000feign.client.config.order-service.connectTimeout5000 # 连接超时时间默认10s order-service: #对应微服务
feign.client.config.order-service.readTimeout10000 # 请求处理超时时间默认60s