前言

该项目基于 SpringCloud整合Feign调用重构 环境上演示。

模块构建

引入公共模块 springcloud-common

image.png

  • BaseApiService
package com.baba.wlb.base;
import lombok.Data;
import org.springframework.stereotype.Component;
@Data
@Component
public class BaseApiService<T> {
   public BaseResponse<T> setResultError(Integer code, String msg) {
      return setResult(code, msg, null);
 }
   // 返回错误,可以传msg
 public BaseResponse<T> setResultError(String msg) {
      return setResult(500, msg, null);
 }
   // 返回成功,可以传data值
 public BaseResponse<T> setResultSuccess(T data) {
      return setResult(200, "success", data);
 }
   // 返回成功,沒有data值
 public BaseResponse<T> setResultSuccess() {
      return setResult(200, "success", null);
 }
   // 返回成功,沒有data值
 public BaseResponse<T> setResultSuccess(String msg) {
      return setResult(200, msg, null);
 }
   // 通用封装
 public BaseResponse<T> setResult(Integer code, String msg, T data) {
      return new BaseResponse<T>(code, msg, data);
 }
   //调用数据库封装
 public Boolean toDaoResult(int result){
      return result>0?true:false;
 }
}
  • BaseResponse
package com.baba.wlb.base;
import lombok.Data;
@Data
public class BaseResponse<T> {
    /**
 * 返回码
 */
 private Integer code;
 /**
 * 消息(最好用简写,不占用宽带)
 */ private String msg;
 /**
 * 数据
 */
 private T data;
 public BaseResponse() {
    }
    public BaseResponse(Integer code, String msg, T data) {
        super();
 this.code = code;
 this.msg = msg;
 this.data = data;
 }
}

同时在 springcloud-api-member-servicespringcloud-api-order-service 中都引入 springcloud-common模块maven依赖。

image.png

springcloud-api-member-service

新增测试接口 getUserInfo():

@RequestMapping("/getUserInfo")
BaseResponse getUserInfo();

image.png

springcloud-api-member-service-impl

实现类中对接口延迟1.5s操作:

@Override
public BaseResponse getUserInfo() {
    try {
        // 产生1.5s 的延迟
 Thread.sleep(1500);
 } catch (Exception e) {
        e.printStackTrace();
 }
    return setResultSuccess("订单服务接口调用会员服务接口成功!");
}

image.png

springcloud-api-order-service-impl

订单模块调用会员模块:

@Override
@RequestMapping("/getUserInfoByMember")
public BaseResponse getUserInfoByMember() {
    return memberServiceFeign.getUserInfo();
}

测试

启动 Eureka Server服务,以及订单和会员服务,并
浏览器访问 http://localhost:8200/getUserInfoByMember
image.png
查看后台日志:发现报超时错误。
image.png

解决方案

springcloud-api-order-service-impl 模块中加上如下配置配置 开启超时时间配置:

ribbon:
  ##指的是建立连接所用时间,适用于网络状态正常的情况下,两端连接所用的时间
 ReadTimeout: 5000
  ##指的是建立连接后从服务器读取到可用资源时间
 ConnectTimeout: 5000

image.png

重启order 服务再次访问
image.png


isWulongbo
228 声望26 粉丝

在人生的头三十年,你培养习惯,后三十年,习惯铸就你