热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2.springcloudAlibabaopenFeign

 1.springcloudAlibaba-nacos2.springcloudAlibaba-openFeign3.springcloudAlibaba-负载均衡器

 1.springcloudAlibaba-nacos

2.springcloudAlibaba-openFeign

3.springcloudAlibaba-负载均衡器Ribbon

4.springcloudAlibaba-nacos配置中心

5.springcloudAlibaba-Seata 分布式事务

6.springcloudAlibaba-sentinel

7.springcloudAlibaba-网关gateway


目录

什么是openFeign

springcloudAlibaba整合openFeign

 Spring Cloud Feign的自定义配置及使用

日志

自定义拦截器

配置超时时间


什么是openFeign

Feign是Netflix开发的声明式、模板化的HTTP客户端,其灵感来自Retrofit、JAXRS-2.0以及

WebSocket。Feign可帮助我们更加便捷、优雅地调用HTTP API Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。

Spring Cloud openfeign对Feign进行了增强,使其支持Spring MVC注解,另外还整合了

Ribbon和Nacos,从而使得Feign的使用更加方便

springcloudAlibaba整合openFeign

order module中创建controller

@RestController
@RequestMapping(value = "/orderController")
public class OrderController {
@RequestMapping(value = "/getInfo")
public String getInfo() {
return "获取成功:";
}
}

重新创建 module customer

resources 下创建 application.yml 端口9998

server:
port: 9998
spring:
application:
name: customer-service
cloud:
nacos:
server-addr: 49.232.193.91:8848
discovery:
username: nacos
password: nacos
namespace: public

在application中加入 @EnableFeignClients 注解

@EnableFeignClients
@SpringBootApplication
public class CustomerApplication {
public static void main(String[] args) {
SpringApplication.run(CustomerApplication.class);
}
}

创建controller

@RestController
public class CustomerController {
@Autowired
OrderService orderService;
@RequestMapping(value = "/getUserInfo")
public String getUserInfo() {
String result = orderService.getInfo();
return result;
}
}

创建 interface Service

@FeignClient(value= "order-service",path= "/orderController")
public interface OrderService {
@RequestMapping("/getInfo")
String getInfo();

/**
* 被调用方
* @RestController
* @RequestMapping(value = "/orderController")
* public class OrderController {
* @RequestMapping(value = "/getInfo")
* public String getInfo() {
* return "获取成功:";
* }
* }
* */
}

@FeignClient(value= "order-service",path= "/orderController") 中 value 对应调用服务名

path 对应 被调用controller 的RequestMapping

调用接口 localhost:9998/getUserInfo

 Spring Cloud Feign的自定义配置及使用

Feign 提供了很多的扩展机制,让用户可以更加灵活的使用

日志

全局配置

创建config类

@Configuration //如果全局配置加入Configuration 针对单个服务去掉
public class FeignConfig {
/**
* 通过源码可以看到日志等级有4种,分别是:
* NONE【性能最佳,适用于生产】:不记录任何日志(默认值)。
* BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及
* 执行时间。
* HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
* FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body
* 和元数据
*/
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}

在yml中加入 log日志级别

logging:
level:
com.customer.service: debug

将order module复制一份 yml 端口改为 9997 服务名改为 order-service2

customer 中 为order-service 创建 interface 接口 同时在controller中调用

@FeignClient(value= "order-service2",path= "/orderController")
public interface Order2Service {
@RequestMapping("/getInfo")
String getInfo();
/**
* 被调用方
* @RestController
* @RequestMapping(value = "/orderController")
* public class OrderController {
* @RequestMapping(value = "/getInfo")
* public String getInfo() {
* return "获取成功:";
* }
* }
* */
}

@RequestMapping(value = "/testLog")
public String testLog() {
String result = orderService.getInfo();
String result2 = order2Service.getInfo();
return result;
}

请求 http://localhost:9998/testLog

单个服务日志

在FeignClient中加入 configuration

去掉config中Configuration 注解

还有一种方式是通过配置文件的方式

logging:
level:
com.customer.service: debug
feign:
client:
config:
order-service: #对应微服务
loggerLevel: FULL

自定义拦截器

在config中增加拦截类

public class FeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
//可以做一些 验证 权限的拦截控制
System.out.println("拦截开始-----------------------");
String access_token = UUID.randomUUID().toString();
template.header("Authorization", access_token);
}
}

在feignConfig中 配置

@Bean
public FeignInterceptor feignAuthRequestInterceptor() {
return new FeignInterceptor();
}

配置超时时间

在feignConfig 配置

@Bean
public Request.Options options() {
//通过Options可以配置连接超时时间和读取超时时间,Options的第一个参数是连接的超时
//时间(ms),默认值是2s;第二个是请求处理的超时时间(ms),默认值是5s
return new Request.Options(5000, 10000);
}


版权声明:本文为weixin_42093813原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42093813/article/details/126567806
推荐阅读
author-avatar
mobiledu2502857147
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有