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 這個是路徑傳參時要用的

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM