1 Star 1 Fork 1

hanxiaozhang / srpingcloud_demo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

srpingcloud_demo

介绍

srpingcloud项目

软件架构

srpingcloud项目组件的使用方法

安装教程

  1. xxxx
  2. xxxx
  3. xxxx

使用说明

  1. xxxx
  2. xxxx
  3. xxxx

Spring Cloud组件超时问题:

RestTemplate的超时

  @Bean
  @LoadBalanced 
  public RestTemplate restTemplate(){
    SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
    requestFactory.setReadTimeout(15000);//读取超时
    requestFactory.setConnectTimeout(5000);//连接超时
    return new RestTemplate(requestFactory);
  }

Ribbon的超时

  1. 全局配置
ribbon:
  ReadTime: 1000         # 单位是ms
  ConnectTimeout: 1000   # 单位是ms
  1. 局部配置
service-id:  # 一般和Eureka Server上注册的服务名称一致,即与spring.application.name一致
  ribbon:
    ReadTime: 1000         # 单位是ms
    ConnectTimeout: 1000   # 单位是ms

Feign的超时:

feign:
  client:
    config:
      #  如果写成default,则表示通用配置
      feignName:
        connectTimeout: 5000  # 单位是ms
        readTimeout: 5000     # 单位是ms

Hystrix的超时:

hystrix:
  command:
    <HystrixCommandKey>:
      execution:
        timeout:
          enable: true
        isolation:
          thread:
            timeoutMilliseconds: 1000

其中可在Hystrix Dashboard上看到,若设为default,则表示对所有Hystrix Command统一设置

Zuul的超时:

两种情况:使用URL配置的路由和使用Ribbon

  1. 使用URL配置的路由:
    它是基于httpclient来发送请求,可以直接设置socket的连接时间。
zuul.host.max-per-route-connections=500
zuul.host.socket-timeout-millis=3000
zuul.host.connect-timeout-millis=500 
  1. 使用Ribbon 可以配置ribbon超时时间,也可以配置hystrix超时时间,两者取配置最小者 https://www.jianshu.com/p/eadbc3188a98

Spring Cloud组件重试问题:

https://www.cnblogs.com/zhangjianbin/p/7228606.html

应用安全:

认证(Authentication)和授权(Authorization),即你是谁,以及你能做什么。 在单体应用中,开发者可以通过简单的拦截器以及会话(Session)机制对用户的访问进行控制和记录。 在分布式系统中,由于业务逻辑封装各个微服务中,每个微服务都系统需要对用户的行为进行认证和许可, 于是就产生了两种可能方式: 第一种:通过一个中心化的权限管理系统,对用户的身份和权限进行统一的管理,可以做到一次授权,多次多点使用, 但是这个独立的安全微服务需要聚合各个微服务中权限控制逻辑,当添加一个新的基于不同业务逻辑实现的微服务就可能需要 在安全微服务中添加新的实现。 第二种:将安全控制分散到各个微服务中,有各个微服务根据自身的业务对用户的访问进行管理和控制。

JWT(Json Web Token)

概念:

它是一个开发的标准,通过紧凑或自包含的方式,定义了用于在各方之间发送的安全JSON对象。它是访问令牌和刷新令牌的载体

组成:

它由三部分组成,每部分通过.分割开,分别是: Header(头部)、Payload(有效负荷)、Signature(签名)

  1. Header:
    组成: typ(类型):一般为JWT alg(加密算法):通常是HMAC SHA256 或者 RSA Tips: 这部分Json会由Base64Url编码,构成JWT的第一部分。
  2. Payload:
    作用:用来携带有效信息的载体,主要是关于用户实体和附加元数据的声明 组成:
    Registered claims(注册声明):这是一组预订的声明,但并不强制要求。它提供了一套有用的、能共同使用的声明。主要有iss(JWT签发者)、exp(JWT过期时间)、 sub(JWT面向的用户)、aud(结束JWT的一方)等。 Public claims(公开声明):公开声明中可以添加任何信息,一般是用户信息或者业务拓展信息等。 Private claims(私有声明): 由JWT提供者和消费者共同定义的声明,既不属于注册者也不属于公开声明。 Tips: 不建议在PayLoad中添加任何敏感信息,因为Base64是对称解密
  3. *Signature: 创建签名,需要编码后的头部、编码后的Payload、一个密钥,最后通过在头部alg键值定义的加密算法加密生成签名。

整体的异常处理思路

一、服务提供者出现异常:

思路一:

提供者不对异常做处理(特殊异常也可以捕获处理),消费者处理服务者的异常,消费者通过Hystrix熔断器来处理。

实现:

(1) 重写Feign的错误解码器decode()方法(ErrorDecoder.decode(String methodKey, Response response)):
先导知识:

  • ErrorDecoder.decode(String methodKey, Response response):实现此方法,对Response#status()在不在2xx范围内HTTP进行解码
  • decode()方法response的body(响应正文)如下:
{"timestamp":1595296761081,"status":500,"error":"Internal Server Error",
"exception":"com.hanxiaozhang.exception.InternalServerException",
"message":"系统繁忙,请稍后重试","path":"/order/1"}

处理: 使用"exception"对应类全限定名反射出该异常类,实例化该异常对象;然后返回该异常对象(详见:FeignClientErrorDecoder.java)。
(2) 在Hystrix的FallbackFactory中,将异常转换成Result类(对外统一响应格式),返回给用户(详见:OrderFeignClientFallbackFactory.java)

思路二:

使用全局异常处理,详见GlobalExceptionHandler.java。启用时,在Controller上加@EnableGlobalException自定义注解

二、服务消费者出现异常:

使用全局异常处理,详见GlobalExceptionHandler.java。启用时,在Controller上加@EnableGlobalException自定义注解

三、Zuul网关出现异常:

两种方式

1.自定义error错误页面(ErrorHandlerController.java) 2.禁用zuul默认的异常处理filter(SendErrorFilter),自定义ErrorFilter

四、自定义业务异常系统:

参考:https://blog.csdn.net/aiyaya_/article/details/78989226

空文件

简介

srpingcloud_demo 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/hanxiaozhang2018/srpingcloud_demo.git
git@gitee.com:hanxiaozhang2018/srpingcloud_demo.git
hanxiaozhang2018
srpingcloud_demo
srpingcloud_demo
master

搜索帮助