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

Feign入门配置(7)

一前言前文我们使用过了使用restTemplate结合Ribbon实现了HTTP远程过程调用消费服务,由于使用直接使用RestTenplate进行服务调用

一 前言

前文我们使用过了使用restTemplate结合Ribbon实现了HTTP远程过程调用消费服务,由于使用直接使用RestTenplate进行服务调用不是很理想,所以我们选择更好方式使用Feign进行Web Service 调用;之前文章的学习jdk版本都是基于javaSE8.0,Feign也是如此,不支持8.0以下,如果是初学者,请看知识追寻者cloud系列文章从头开始看,否则会一头雾水;

本篇文章的Feign只是入门级别,主要讲解feign的工作流程,基本TTTP远程调用,相关基本配置等,后续会出主流高级配置;

二 Feign 简介

Feign的由来是基于retrofit , jax-rs,JSR 356, Java API for WebSocket;其内部对RestTemplate进行了封装,在使用过程中简化了HTTP远程过程调用过程,使开发人员使用更加简便;

Feign特色如下:

  1. 响应缓存支持,可多中类型选择;支持扩展的缓存,如EhCache, Google, Spring;
  2. 完整的URI 模板表达式语言支持;
  3. 类SLF4J 日志支持;

三 Feign的工作流

@EnableFeignClients 表示开启Feign功能,然后扫描 注解@FeignClient,程序启动后,会将这些类扫描进IOC容器;Feign会 对 RestTemplate 进行 封装,简化HTTP远程过程调用;RestTemplate使用Request 模板生成新的Requst 发送请求,其底层通常是基于URLConnection;

在这里插入图片描述

四 Eureka-Client

在之前的Eureka-Clinet 工程的表现层包创建新的controller层API用于服务提供;

/**
* @Author lsc
*

知识追寻者 Feign 服务消费


*/
@RestController
public class FeignProvoderController {
@GetMapping("zszxz/feign")
public String getFeign(){
return "the get method of feign test";
}
}

五 Feign-client

在父工程中创建新的 子工程 Feign-client;

5.1 pom.xml

添加openfeign 依赖;



org.springframework.cloud
spring-cloud-starter-netflix-eureka-client


org.springframework.cloud
spring-cloud-starter-openfeign

5.2 application.yml

这边我们使用新的端口8093,应用名称是 feign-client; 同样将服务注入peer1,peer2,peer3;并且设置feign的客户端属性,比如连接时间,读取时间,日志级别;

server:
port: 8093
spring:
application:
name: feign-client # 应用名称
eureka:
client:
service-url:
# 服务注册地址
defaultZone: http://peer1:10081/eureka/,http://peer2:10082/eureka/,http://peer3:10083/eureka/
feign:
client:
config:
default:
connectTimeout: 5000 # 连接超时时间
readTimeout: 5000 # 读超时时间
loggerLevel: full # 日志级别

5.3 service

在service 接口 上标明注解 @FeignClient表示 是 一个Feign的客户端类; 属性 name 表示 Feign客户端名称;value表示服务提供者的应用名称;由于 eureka-client 中 提供了表现层API,我们 在service接口中定义相应的方法并且使用@GetMapping注解,里面配上需要调用的path,表示我们具体要消费的服务;

/**
* @Author lsc
*


*/
@FeignClient( name = "eureka-client", value = "eureka-client")
public interface FeignService {
@GetMapping("zszxz/feign")
public String getFeign();
}

5.4 controller

controller层也就是平常的表现层,没什么特别之处,直接调用service接口提供的API;

/**
* @Author lsc
*

feign 表现层


*/
@RestController
public class FeignController {
@Autowired
FeignService feignService;
@GetMapping("zszxz/feign")
public String getFeign(){
// 调用 getFeign方法
return feignService.getFeign();
}
}

5.5 启动类

在启动类上方标明@EnableFeignClients,其表示启用feign功能,扫描@FeignClient 标明的类入IOC容器;

/**
* @Author lsc
*

feign启动类


*/
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients//表示启用feign
public class FeignApp {
public static void main(String[] args) {
SpringApplication.run(FeignApp.class,args);
}
}

六 调用结果

6.1 工程结构如下

在这里插入图片描述

6.2 结果

启动工程,访问地址 http://localhost:8093/zszxz/feign ; 结果如下如,表示使用Feign调用HTTP服务消费成功;

在这里插入图片描述

七 @FeignClient注解说明

当 IOC容器中有相同的实例,@Autowired 会不起作用,此时会报错,使用@Primary 标明哪一个实例是首要实例,会优先被IOC扫描注入;

属性说明
nameFeign Client的名称 支持占位符${}
serviceId服务id
value指定 serviceId
url指定调用的URl, 支持占位符${}
decode404404错误时,设置为true,会进行decode解码,否则FeignException
fallback容错处理
fallbackFactory生成fallback模板示例,减少重复代码
pathPath统一前缀
primary设置为 primary Bean
qualifier为Feign Client 新增注解@Qualifier

八 日志设置

每个 Feign client 都会创建日志,默认是接口的全类名作为日志名称,日志响应仅支持debug模式;日志的配置方式有两步骤,一是通过配置文件,二是通过JAVA注解配置类;

日志级别说明
NONE没有日志(默认)
BASIC请求和响应的状态码,时间
HEADERS基于Basic加上请求和响应头
FULL请求和响应的 head ,body 和元数据

8.1 application.yml

在 application.yml 中添加如下配置

logging:
level:
com.zszxz.feign.service: Debug

8.2 config

配置类如下

/**
* @Author lsc
*


*/
@Configuration
public class FeignConfiguration {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}

8.3 指定Config

在 @FeignClien 中可以指定具体使用Feign的配置类,此时会覆盖feign的默认配置;

@FeignClient( name = "eureka-client", value = "eureka-client",cOnfiguration= FeignConfiguration.class)

九参考文档

https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html


推荐阅读
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • PostgreSQL 最新动态 —— 2022年4月6日
    了解 PostgreSQL 社区的最新进展和技术分享 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
  • 收割机|篇幅_国内最牛逼的笔记,不接受反驳!!
    收割机|篇幅_国内最牛逼的笔记,不接受反驳!! ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
author-avatar
个信2602881723
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有