6.Feign远程调用工具

接着上一篇搭建springCloud框架,Feign作为springCloud框架中的一个组件,而不是一个服务。添加位置:服务消费方。

6.1 首先添加依赖:(pom工程,版本在父工程中已经设置。)
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
6.2 添加注解

在服务消费方的启动类CosumerApplication上添加@EnableFeignClients注解。Feign组件中包含了熔断器Hystrix(circuitBreaker)和负载均衡Ribbon器。

6.3 添加配置

同样在服务消费方的配置文件application.yml中。需要添加的不多,可以添加一下Feign的熔断功能:

feign:hystrix:enabled: true   #开启feign的熔断功能#Feign的请求压缩,响应压缩设置compression:request:enabled: true  #开启请求压缩mime-trpes: text/html, application/xml, application/json      #设置会被压缩的数据类型min-request-size: 2048   #设置触发压缩的大小下限response:enabled: true #开启响应压缩
6.4 使用Feign的熔断器
@GetMapping("{id}")
@HystrixCommand(commandProperties = {//几个请求失败后熔断器打开@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "20"),  //熔断器打开几毫秒后半打开@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "5000"), //放开的请求中成功的请求所占百分比@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50") })
public String queryById(@PathVariable("id") Long id){//Ribbon会对其中user-service转换为服务方ipString url = "http://user-service/user/ " + id;  String user = restTemplate.getForObject(url, String.class);return user;}

7.Zuul服务网关

Zuul作为整个springCloud项目的服务网关,自己也作为一个而单独的服务存在。

7.1 添加依赖
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency></dependencies>
7.2 添加注解

在该服务的启动类上方添加注解@EnableZuulProxy注解,即开启了Zuul服务网关的功能。(不选择@EnableZuulServer,因为其功能较少)

@EnableZuulProxy
@SpringBootApplication
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class);}
}
7.3 添加配置信息

application.yml

server:port: 10010
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka
spring:application:name: gateway
zuul:prefix: /apiroutes:user-service:path: /user/**serviceId: user-servicestrip-prefix: falseignored-services:- consumer-service
Hystrix:command:default:    #对该服务中所有方法的熔断时间设置execution:isolation:thread:timeoutInMilliseconds: 6000
ribbon:ConnectionTimeOut: 500ReadTimeOut: 2000MaxAutoRetriesNextServer: 0  #请求失败不重试不重试
7.4 使用Zuul服务网关

使用Zuul主要的就是使用一个拦截器(自己实现拦截器接口中的方法)ZuulFilter,有四个需要实现的方法:

@Component //该拦截器注入到spring容器中,否则该拦截器不起作用
public class LoginFilter extends ZuulFilter {@Override/**需要拦截的服务类型-前置拦截功能:处理请求参数和请求头等内容*/public String filterType() {return FilterConstants.PRE_TYPE;  //“pre”}@Override/*** 拦截顺序,*/public int filterOrder() {return FilterConstants.PRE_DECORATION_FILTER_ORDER - 1;}@Override/*** 是否需要拦截:我们应该设置为返回true,需要拦截请求*              否则我们写该拦截器就没有意义了。*/public boolean shouldFilter() {return true;}@Override/*** 拦截器要实现的功能就写在该run方法中,*  此次需要拦截请求参数中带有access_token的请求,*  如果次参数为null或"",就返回403,请求错误,驳回请求*/public Object run() throws ZuulException {//获取请求的上下文信息RequestContext ctx = RequestContext.getCurrentContext();//获取requestHttpServletRequest request = ctx.getRequest();//获取请求参数access_tokenString access_token = request.getParameter("access_token");//判断是否存在if(StringUtils.isBlank(access_token)){//不存在,未登录,则拦截ctx.setSendZuulResponse(false);//返回403ctx.setResponseStatusCode(HttpStatus.SC_FORBIDDEN);}return null;}
}

8.springCloud框架暂时搭建完毕

8.1 服务注册到eureka注册中心:

8.2 通过服务网关zuul访问项目:

8.3 该框架已经能够满足绝大部分的项目需求。

此外,还有可以了解一下配置中心config-server的功能。该服务的作用是将我们开发中每个微服务的配置信息都写入此服务中,并且需要上传至git上,配置中心直接连接git上的配置信息,提供给每个微服务使用时有两种方式:1.推送给每个微服务 (比较消耗资源的方式);2.每个微服务使用配置时去配置中心config-server去拉取其配置。

8.4 微服务整个项目的调用过程:

springCloud框架搭建,添加feign和Zuul相关推荐

  1. SpringCloud框架搭建+实际例子+讲解+系列五

    (4)服务消费者,面向前端或者用户的服务 本模块涉及到很多知识点:比如Swagger的应用,SpringCloud断路器的使用,服务API的检查.token的校验,feign消费者的使用.大致代码框架 ...

  2. IDEA下Springcloud框架搭建(一)之服务注册与发现

    首先,创建一个 Maven 主工程,主工程的 pom.xml 添加如下内容: <parent><groupId>org.springframework.boot</gro ...

  3. No6-6.从零搭建spring-cloud-alibaba微服务框架,添加用户鉴权逻辑,动态数据权限(使用AOP实现)等(六,no6-6)

    代码地址与接口看总目录:[学习笔记]记录冷冷-pig项目的学习过程,大概包括Authorization Server.springcloud.Mybatis Plus~~~_清晨敲代码的博客-CSDN ...

  4. Day3-Mybatis基本框架搭建(添加用户)

    Day3-Mybatis基本框架搭建(添加用户) 二. Mybatis-JDBC Mybatis的介绍 Mybatis的入门 使用jdbc操作数据库存在的问题 (回顾jdbc) Mybatis的架构 ...

  5. Dubbo与SpringCloud框架详解

    一.互联网架构演进 1.互联网项目架构 1. 互联网项目与传统项目 互联网项目架构的特点: 用户多 流量大,并发高 海量数据 易受攻击 功能繁琐 变更快 传统项目和互联网项目的不同: 用户体验: 美观 ...

  6. SpringCloud(第 025 篇)Zuul 路由后面的微服务挂了后,Zuul 提供了一种回退机制来应对熔断处理...

    2019独角兽企业重金招聘Python工程师标准>>> SpringCloud(第 025 篇)Zuul 路由后面的微服务挂了后,Zuul 提供了一种回退机制来应对熔断处理 一.大致 ...

  7. 微服务框架搭建个人总结(避坑专用)

    SpringCloud微服务框架搭建个人总结(避坑专用) 搭建springcloud微服务框架(基础) 踩坑记录 搭建框架 Eureka服务注册中心 Gateway网关 路由配置 Feign服务通信 ...

  8. 电商项目的介绍及其框架搭建

    文章目录 电商项目的介绍及其框架搭建 一.项目介绍 二.项目架构缩略图 三.系统架构说明 四.项目搭建 4.1 技术选型 4.2 开发环境 4.3 域名 五.后台环境的搭建 5.1 创建统一的父工程: ...

  9. Spring Cloud中五大神兽总结(Eureka/Ribbon/Feign/Hystrix/zuul)

    一.常用的模块 1.Eureka Eureka是Netflix的一个子模块,也是核心模块之一.Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移.服务注册与发现对于 ...

最新文章

  1. java整数的反转_反转Java中的整数
  2. 零起点学算法82——数组中查找数
  3. ajax如何实现、readyState五中状态的含义
  4. jquery通过数值改变球大小
  5. spring中用到哪些设计模式
  6. 全硬盘安装Win Vista 6000 RTM方法(转)
  7. CAN笔记(3) 错误状态
  8. Array.prototype.slice Array.prototype.splice 用法阐述
  9. 风云的银光志Silverlight4.0教程之遍历访问客户端用户的本地文件
  10. CodeSmith生成Model、Dal、IDal、BLL
  11. 【笔试/面试】—— 序列全排列(递归版)
  12. 百度核心技术:详解百度富媒体检索比对系统的关键技术
  13. 什么是私有ip 、A类地址、B类地址和C类地址?
  14. 百度Java面试题及答案(2022最新版)
  15. mac vs 返回上一步_mac 后退一步 快捷键
  16. 计算机色彩知识调研(一):色域
  17. BD-rate计算原理
  18. ios正式包ipa,发布苹果应用商店App Store
  19. trie树模板(前缀树)
  20. Java PDF数字签名(五)—Java 给PDF签名时添加可信时间戳

热门文章

  1. 苹果笔记本开机问号白色问号?
  2. 单片机概述习题以及答案
  3. c1报考驾驶证网站php删除,c1驾驶证有违章,c1驾驶证免三种违章
  4. 计算机网络原理知识点之ISO模型解析
  5. RuntimeError: CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling `cublasSgemm( handle, opa, opb
  6. 微信自动邀请加群!!!
  7. PicPick软件免费版与正式版区别
  8. shell in find exclude
  9. 前端面试知识梳理(高级前端开发工程师)
  10. 干货 | 这是一份详细的用户成长体系总结笔记