负载均衡组件 -loadBalancer 无法获取服务端信息问题

客户端出现以上截图问题,可以考虑以下方案
-
负载均衡是否开启配置
java@Configuration public class RestTemplateConfig { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } } -
用了
@Controller而不是@RestController@Controller是返回视图的,不会把方法返回值直接作为 HTTP 响应即使接口注册了,也会返回 404(找不到视图),需要搭配
@ResponseBody修正方法:直接用
@RestController(等价于@Controller + @ResponseBody) -
@GetMapping路径拼写错误比如代码里写的是
/api/consumer/call-provider,但你访问的是/api/consum/call-provider(少了e)或者多了空格、大小写错误(Spring Boot 路径默认大小写敏感)
修正方法:严格核对代码路径和浏览器访问路径,完全一致
-
端口 / 服务启动错误
你以为启动的是 8081 端口的 consumer 服务,但实际启动的是其他服务,或者服务没启动成功
验证:访问
localhost:8081,看是否返回 Spring Boot 的默认错误页(确认服务正常运行在 8081)修正方法:在 IDEA 的 Run 窗口确认
Started ConsumerApplication日志,端口是8081 -
包路径不匹配

你的启动类 ConsumerApplication 所在包:
com.example.consumer你的配置类 RestTemplateConfig 所在包:
net.togogo.controller(和启动类完全不在同一个包,也不是子包)Spring Boot 默认只扫描启动类所在包及其子包 ,所以
RestTemplateConfig完全被忽略了,@LoadBalanced修饰的RestTemplateBean 根本没被创建!而
ConsumerControllerTest在net.togogo.controller包下,虽然加了@RestController,但因为RestTemplateBean 不存在,注入失败,服务直接启动报错(exit code 1)RestTemplateConfig上标了no usages,就是因为 Spring 根本没加载这个类,IDEA 也识别到它没被使用。修正方法:
- 调整包路径 让其在统一路径或统一路径子包下
A 也识别到它没被使用。
修正方法:
- 调整包路径 让其在统一路径或统一路径子包下
- 给启动类加
@ComponentScan手动指定扫描包
- 调整包路径 让其在统一路径或统一路径子包下