1.@LoadBalanced使用问题
问题描述(1):当在springCloud中使用RestTemplate时当开启@LoadBalanced注解时
只能调用springcloud注册中心的服务并且请求url不是是ip形式,只能是通过服务名在来调用。
如果要通过RestTemplate调用远程应用如微信接口可以用@Bean注解。
RestTemplate使用@LoadBalanced报错:
Request URI does not contain a valid hostname以及中文乱码问题
问题所在:
发现在RestTemplate注册的时候,开启了客户端负载均衡功能,开启负载均衡很简单,只需要在RestTemplate的bean上再添加一个@LoadBalanced注解即可。代码如下
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
但是开启负载均和后,RestTemplate不能对远程IP发起请求.
问题解决:
所以在注册的时候可以注册两个不同的RestTemplate,比如:
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public RestTemplate commRestTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
return restTemplate;
}
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));这行代码是为了防止restTemplate在请求中出现中文乱码,把编码格式设置为UTF-8格式。
之后在对外部远程IP地址发起请求的时候,可以注入commRestTemplate:
@Autowired
private RestTemplate commRestTemplate;
再用commRestTemplate来发起请求,问题解决。