springcloud ribbon 客戶端負載均衡用法
阿新 • • 發佈:2019-03-17
unknown failed nested charset ret for 主機名 coder ons
import org.springframework.http.HttpHeaders;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestConfig {
@Bean
public HttpHeaders getHeaders(){
// 進行一個Http頭信息配置
HttpHeaders headers = new HttpHeaders();
String auth = "wendy:wendy";
byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes(Charset.forName("US-ASCII")));
// 加密字符串要有空格
String authHeader = "Basic " + new String(encodedAuth);
headers.set("Authorization", authHeader);
return headers;
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://DEPT-8001/dept/get/1": DEPT-8001; nested exception is java.net.UnknownHostException: DEPT-8001
不識別主機名稱、則可能是主機名稱沒在系統文件hosts中配置,但檢查發現,已經配置,排除。
於是查了一下Ribbon的用法,發現使用Ribbon的時候,必須要在RestTemplate bean配置中添加負載均衡註解@LoadBalanced
於是加完如下:
package com.zemel.consumer.config;
import java.nio.charset.Charset;
import java.util.Base64;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestConfig {
@Bean
public HttpHeaders getHeaders(){
// 進行一個Http頭信息配置
HttpHeaders headers = new HttpHeaders();
String auth = "wendy:wendy";
byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes(Charset.forName("US-ASCII")));
String authHeader = "Basic " + new String(encodedAuth);
headers.set("Authorization", authHeader);
return headers;
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
springcloud ribbon 客戶端負載均衡用法