zoukankan      html  css  js  c++  java
  • Feign涨姿势的机会

      已经对SpringCloud和熟悉了,但是今天在用Feign去调用其他微服务的时候遇到了两个问题:

      1.把其他微服务当做service层来调用时,怎样传递一个对象参数,而不是基本类型的参数;

      2.当我传递基本类型的参数时,服务总是启动不起来;

    问题再现1

      @RequestMapping(value = "/callLog/saveCallLog",method = RequestMethod.POST)
        ResultVO<Boolean> saveCallLog(BuTaskCallLogDTO buTaskCallLogDTO,@RequestParam("companyCode")Long companyCode);

    对方的微服务里需要传递一个对象BuTaskCallLogDTO 

    其实这种问题需要对方的微服务处理一下即可

      @ApiOperation(value = "添加呼叫记录")
            @PostMapping("/saveCallLog")
            public  ResultVO saveCallLog(@RequestBody BuTaskCallLogDTO buTaskCallLogDTO,@RequestParam("companyCode")Long companyCode){
                String date=getThisMonth();
                String tableName=tableStart+companyCode+"_"+date.replace("-","_");
                buTaskCallLogDTO.setTableName(tableName);
                /**  添加呼叫记录   */
               callLogService.saveOrUpdateCallLog(buTaskCallLogDTO);
                return  ResultVOUtil.success(true);
            }

     标红的地方就是需要注意的点

    问题再现2

      

        @GetMapping("/user/testUserTimeOut")
        ResultVO<Boolean> testUserTimeOut(Long mills,String token);

    服务启动时报错:

    2018-11-27 14:11:22,387 [localhost-startStop-1] WARN  org.apache.catalina.loader.WebappClassLoaderBase - The web application [ROOT] appears to have started a thread named [RxIoScheduler-1 (Evictor)] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
     sun.misc.Unsafe.park(Native Method)
     java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
     java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
     java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
     java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
     java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
     java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
     java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
     java.lang.Thread.run(Thread.java:745)
    Disconnected from the target VM, address: '127.0.0.1:61806', transport: 'socket'

    其实对于这种错,很懵逼的。。。你不知道具体错误出现在哪里,只是报内存泄露!

    对于这种错,那就用一个方法:排除法

    case1: 把自己刚才写的代码注释掉,运行项目能起来那就是以前的问题,需要继续排除。。。

    case2: 代码注释掉之后程序能正常运行,那就说明是自己刚写的bug。。。

    我刚才就注释掉自己的代码,发现项目能正常运行,哈哈哈,找到问题的所在之处:

    反复对比之前写的代码,竟然发现自己没有加参数的注解 

      

     @GetMapping("/user/testUserTimeOut")
        ResultVO<Boolean> testUserTimeOut(@RequestParam(value = "mills")Long mills,@RequestParam(value = "token")String token);

    结论:Feign调用其他微服务时,必须有必要的参数注解 

    @RequestParam 这个是默认的参数注解
    @PathVariable 这个是路径传参时要用的

      

  • 相关阅读:
    图像检索(image retrieval)- 11
    图像检索(image retrieval)- 10相关
    Mock.js简易教程,脱离后端独立开发,实现增删改查功能
    Azure Monitor (3) 对虚拟机磁盘设置自定义监控
    Azure Monitor (1) 概述
    Azure SQL Managed Instance (2) 备份SQL MI
    Azure Virtual Network (17) Private Link演示
    Azure Virtual Network (16) Private Link
    Azure Virtual Network (15) Service Endpoint演示
    Azure Virtual Network (14) Service Endpoint服务终结点
  • 原文地址:https://www.cnblogs.com/pangyangqi/p/10026200.html
Copyright © 2011-2022 走看看