• springcloud 实战 feign使用中遇到的相关问题


     springcloud 实战 feign使用中遇到的相关问题


    1.使用feign客户端调用其他微服务时,session没有传递成功,sessionId不一样。

    /**
     * @author xbchenf
     * @date 2018-10-27 16:35:52
     * @description 通过拦截器,将head补上,避免session丢失
     */
    @Configuration
    public class FeignConfiguration implements RequestInterceptor{
        private final Logger logger = LoggerFactory.getLogger(FeignConfiguration.class);
        @Override
        public void apply(RequestTemplate template) {
    
            RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
            if (requestAttributes == null) {
                return;
            }
            HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
            Enumeration<String> headerNames = request.getHeaderNames();
            if (headerNames != null) {
                while (headerNames.hasMoreElements()) {
                    String name = headerNames.nextElement();
                    Enumeration<String> values = request.getHeaders(name);
                    while (values.hasMoreElements()) {
                        String value = values.nextElement();
                        logger.warn("name:"+name+";value:"+value);
                        template.header(name, value);
                    }
                }
            }
    
        }
    }
    

      


    2.使用feign客户端调用其他微服务时,发送POST请求时,对象信息没有传递成功。

    关键在于加上注解:@RequestBody

    feign客户端:

    @FeignClient(name = "mpmt-user")
    public interface PersonFeignClient {
    
      @GetMapping("/feign/testGet/{id}")
      public ResponseEntity<JsonResult> testGet(@PathVariable(value = "id") Integer id);
    
      @PostMapping("/feign/testPost")
      public ResponseEntity<JsonResult> testPost(@RequestBody Person person);
    }
    

      

    微服务服务端:mpmt-user

    @RestController
    @RequestMapping("/feign")
    public class FeignController {
    
        private final Logger logger = Logger.getLogger(FeignController.class);
    
        @GetMapping("/testGet/{id}")
        public ResponseEntity<JsonResult> testGet(@PathVariable(value = "id") Integer id,HttpServletRequest request) {
            JsonResult r = new JsonResult();
            try {
                logger.info("sessionid:"+request.getSession().getId());
                User user = (User)request.getSession().getAttribute("sessionUser");
                logger.info("userId:"+user.getId());
                r.setResult(user);
                r.setStatus("200");
            } catch (Exception e) {
                r.setResult(e.getClass().getName() + ":" + e.getMessage());
                r.setStatus("error");
                e.printStackTrace();
            }
            return ResponseEntity.ok(r);
        }
    
        /**
         * 添加用户
         * 提供给后端feign调用的接口,post请求都要使用@RequestBody ,包括feign中定义的接口
         * @param person
         * @return
         */
        @PostMapping("/testPost")
        public ResponseEntity<JsonResult> testPost(@RequestBody Person person,HttpServletRequest request) {
            JsonResult r = new JsonResult();
            try {
                logger.info("sessionid:"+request.getSession().getId());
                User user = (User)request.getSession().getAttribute("sessionUser");
                logger.info("userId:"+user.getId());
                r.setResult(person);
            } catch (Exception e) {
                r.setResult(e.getClass().getName() + ":" + e.getMessage());
                r.setStatus("error");
    
                e.printStackTrace();
            }
            return ResponseEntity.ok(r);
        }
    
    }


    3.使用feign客户端调用其他微服务时,报错超时:e=feign.RetryableException: Read timed out executing POST

    ribbon.ReadTimeout=60000
    ribbon.ConnectTimeout=60000
  • 相关阅读:
    智能安全实验室-全能优化(Guardio) 3.8.0.493:系统默认字体大小
    智能安全实验室-杀马(Defendio) 2.6.0.453 :系统整合/增强隔离
    智能安全实验室-全能优化(Guardio) 3.8.0.498:新增3种恶意软件的清理
    智能安全实验室-杀马(Defendio) 2.5.0.425-自定义快捷方式
    智能安全实验室-全能优化(Guardio) 3.9.0.523:大量改进!
    智能安全实验室-全能优化(Guardio) 3.9.0.525:进程管理树状显示
    智能安全实验室-杀马(Defendio) 2.5.0.435 :改进系统扫描
    智能安全实验室-全能优化(Guardio) 3.8.0.495:新增15种恶意软件的清理
    智能安全实验室-杀马(Defendio) 2.6.0.466 :行为分析
    智能安全实验室-杀马(Defendio) 2.5.0.430 :自定义上报威胁
  • 原文地址:https://www.cnblogs.com/brant/p/9864813.html
Copyright © 2020-2023  润新知