启动springcloud项目远程调用时的问题

 

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来发起请求,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值