热门标签 | 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
推荐阅读
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 开源项目_一个国外开源项目描述中有中文“谢谢”,到底发生了什么?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了一个国外开源项目描述中有中文“谢谢”,到底发生了什么?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
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社区 版权所有