跟着視訊實作的過程中,突然出了問題:使用nacos注冊gateway網關時候報錯,apigateway服務無法啟動報錯:
Parameter 0 of method loadBalancerWebClientBuilderBeanPostProcessor in org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration required a bean of type 'org.spr
百度以後,在gateway的pom檔案添加loadbalancer依賴即可
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
成功啟動:接着測試接口:通過gateway通路edu的接口
http://localhost:8222/eduservice/teacher/findAll
:
報錯type=Service Unavailable, status=503:
gateway控制台報錯:
No servers available for service: service-edu
應該是調不到service-edu的服務,百度了一下,都說原因是:
由于springcloud2020棄用了Ribbon,是以Alibaba在2021版本nacos中删除了Ribbon的jar包,是以無法通過lb路由到指定微服務,出現了503情況。
是以隻需要引入springcloud loadbalancer包即可
問題是我一開始就引入了,明顯沒解決這個問題;在百度很久以後,我找到第一種解決方法:
一、
修改配置檔案中的uri,使用http://加調用服務的端口代替原來的lb,這種方法可以解決
二、
這就涉及到springcloudAlibaba和springcloud、springboot、nacos的版本問題,我的springboot版本是2.6.2,springcloud版本2021.0.1,首先把nacos從1.1.4更新到1.4.3,先修改guli_parent的pom檔案:
我就沒明白這個
0.2.2.RELEASE
是個什麼版本,現在查的springcloudAlibaba應該是用年份命名的了,後來看看,應該是 groupId 不一樣的問題,0.2.2的包存放的位址是:org.springframework.cloud
這裡我修改pom檔案,注釋掉上面的0.2.2與下面的引用,新增引用:2021.1版本的包存放在com.alibaba.cloud這裡
修改api_gateway的pon檔案:
<dependencies>
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>common_utils</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>
重新啟動服務,測試接口成功調用: