热门标签 | 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


推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringCloudRibbon部分源码相关的知识,希望对你有一定的参考价值。1:ribbon是提供通过servi ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 本文介绍了自学Vue的第01天的内容,包括学习目标、学习资料的收集和学习方法的选择。作者解释了为什么要学习Vue以及选择Vue的原因,包括完善的中文文档、较低的学习曲线、使用人数众多等。作者还列举了自己选择的学习资料,包括全新vue2.5核心技术全方位讲解+实战精讲教程、全新vue2.5项目实战全家桶单页面仿京东电商等。最后,作者提出了学习方法,包括简单的入门课程和实战课程。 ... [详细]
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社区 版权所有