1. 程式人生 > 其它 >脫離eureka使用ribbon發生的錯誤Servlet.service() for servlet [dispatcherServlet] in context

脫離eureka使用ribbon發生的錯誤Servlet.service() for servlet [dispatcherServlet] in context

技術標籤:java

脫離eureka使用ribbon發生的錯誤Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed;

  在做微服務的時候,我們經常會用到eureka和robbit,來實現微服務之間的相互呼叫。但是對於有些老舊專案來說,可能在修改成eureka註冊來實現服務發下可能會比較困難,或者說有些專案根本就沒辦法來做eureka,這個時候就可以脫離eureka來使用ribbon。
  筆者也是處在學習的階段,自己搭建了一個簡單的微服務專案,然後遇到了一些問題。

問題如下:

2020-12-21 13:01:19.562 ERROR 19684 --- [nio-8893-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: No instances available for
microservice-porducer-user] with root cause java.lang.IllegalStateException: No instances available for microservice-porducer-user

  然後百度發現其他人的解釋是沒有使用正確的springboot註解,但是我檢查了一遍發現別人說的@Autowired,@RestController等的註解都正確使用了,但是也找到了一些原因,就是沒有寫負載均衡器
  我們都知道ribbon能夠實現客戶端的負載均衡,沒有寫這個就沒辦法實現ribbon的功能,所以就在啟動類上加上了這個程式碼

	@Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
         return new RestTemplate();
    }

  主要是**@LoadBalanced**這個註解。
  然後重啟程式碼,呼叫,發現還是報錯,這下就犯了難了,查閱了各種資料,仔細地檢查了程式碼,最後在配置檔案上發下了問題,我的配置檔案是這樣的

server:
  port: 8893
spring:
  application:
    name: microservice-consumer-movie-without-eureka
microservice-porducer-user:
  ribbon:
    list-of-servers: localhost:8890

  猛地一看好像並沒有什麼問題,但是仔細看會發現,list-of-servers這句話好像有點不對,然後就將中劃線的方式改成了駝峰式listOfServers,再重啟專案,呼叫,就沒問題了,至此問題解決。
  這個配合檔案中關於寫中劃線式還是駝峰式,好像是跟springBoot,springCloud的版本有關,所以在確定自己的程式碼沒有問題的情況下,修改一下配置檔案的寫法,可能就會解決掉問題,在此可以給大家一個解決問題的思路。