zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    美女程序员是如何将QQ转换成题目中那串数字的--读博文《找女神要QQ号码》
    C#微信开发-微信JS-SDK(1)之通过config接口注入权限验证配置
    AjaxUpload.3.5.js之ASP.NET 文件上传
    web开发常用的js验证,利用正则表达式验证邮箱、手机、身份证等输入
    HNU_结对项目_小初高数学学习软件_功能说明
    转载:alpha测试和beta测试的区别;黑盒测试和白盒测试的区别;
    HNU_个人项目_中小学数学卷子自动生成程序_简要分析HnuLyx代码
    文件与磁盘空间管理---外存分配方式、存储空间管理
    Java程序设计——不一样的开始 IP地址判定
    Java编程思想—八皇后问题(数组法、堆栈法)
  • 原文地址:https://www.cnblogs.com/brant/p/9864813.html
Copyright © 2011-2022 走看看