文章目录
- spring cloud alibaba 整合OpenFeign
- 整合流程
- 1.导入依赖
- 2. 编写调用接口
- 2.1 service(这里写的是clients)
- 2.2 controller
- 3.设置其最大链接时间
- 3.1 配置文件
- 3.2 client
- 3.3 接口
- 3.4 被访问的controller
spring cloud alibaba 整合OpenFeign
- Foreign
- Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
- 在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
- -Feign是一个声明式的Web服务客户端,让编写Web服务客户端变的更加容易。只需要创建一个接口并添加注解即可 openfeign
-
OpenForeign
Spring Cloud openfeign对Feign进行了增强,使其支持Spring MVC注解,另外还整合了Ribbon和Nacos,从而使得Feign的使用更加方便 -
Feign和OpenFeign的区别:
Feign是Spring Cloud组件中一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。Feign的使用方式是:使用Feign的注解定义接口,调用接口,就可以调用服务注册中心的服务。
OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并且 低耦合调用其他服务。
整合流程
直接采用最简单的方式
1.导入依赖
<!-- openfeign 远程调用 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2. 编写调用接口
无参
2.1 service(这里写的是clients)
@FeignClient("nacos-a")
public interface OrderClients {@GetMapping("/port")String order();
}
2.2 controller
@GetMapping("/order")public String feignAClient(){String order = orderClients.order();return order;}
3.设置其最大链接时间
配置类
@Configuration
public class FeignConfig
{//配置日志@BeanLogger.Level feignLoggerLevel(){return Logger.Level.FULL;}//配置最大链接时间 如果 使用 Request.Options 则默认
// Connect Timeout: 10 seconds 链接时间
// Read Timeout: 60 seconds 读取时间
// Follow all 3xx redirects
// 不配置这个@Beanpublic Request.Options options() {return new Request.Options(5L,TimeUnit.SECONDS,10L,TimeUnit.SECONDS,true);}
}
也可使用配置文件 选择一个即可
# 这里设置order-service,应使用自己的
feign.client.config.order-service.connectTimeout=5000
# 连接超时时间,默认10s order-service: #对应微服务
feign.client.config.order-service.readTimeout=10000
# 请求处理超时时间,默认60s
3.1 配置文件
#配置name
spring.application.name=nacos-a
server.port = 3030
#Nacos服务发现注册中心
spring.cloud.nacos.discovery.server-addr=192.168.14.58:8848
#spring.cloud.nacos.discovery.register-enabled=true
logging.level.com.hb = debug
#配置具体某一个服务个性化规则
spring.cloud.nacos.discovery.ip=192.168.14.53
spring.cloud.nacos.discovery.metadata.name=lihaibo
#nacos-a.ribbon.NFLoadBalancerRuleClassName=com.hb.rule.MyRule
3.2 client
@FeignClient("nacos-a")
public interface OrderClients {@GetMapping("/port")String order();@GetMapping("/sleep")String sleep(@RequestParam("second") Integer second);
}
3.3 接口
@GetMapping(“/sleep”)
public String sleep(@RequestParam(“s”) Integer s){
String order = orderClients.sleep(s);
return order;
}
3.4 被访问的controller
@GetMapping("/sleep")
public String sleep(Integer second){ThreadUtil.safeSleep(second * 1000);return "睡了"+second+"s";
}