Spring Cloud 利用restTemplate&ribbon进行服务间通信
(一)配置好注册中心:
http://localhost:8761/eureka
(二)配置好服务端(配置两个服务端,供负载均衡):
@RestController
public class ServerController {
@GetMapping("/msg")
public String msg() {
// http:locahost:8081/msg
//return "this is product's msg 1";
// http:locahost:8082/msg
//return "this is product's msg 2";
}
}
(三)开始配置客户端:
@RestController
@Slf4j
public class ClientController {
@Autowired
private LoadBalancerClient loadBalancerClient;
private ServiceInstance serviceInstance;
@GetMapping("/getServerMsg")
public String getServerMsg() {
//第一种方式(直接使用restTemplate,url写死)
//RestTemplate restTemplate = new RestTemplate();
//String response = restTemplate.getForObject("http://localhost:8081/msg",String.class);
//第二种方式(使用loadBalancerClient,然后在使用restTemplate)
RestTemplate restTemplate = new RestTemplate();
ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT");
String msgUrl = String.format("http://%s:%s/%s", serviceInstance.getHost(), serviceInstance.getPort(), "msg");
String response = restTemplate.getForObject(msgUrl, String.class);
log.info("msgUrl = {}, response = {}", msgUrl, response);
return response;
}
}
第三种方式:利用@LoadBalanced注解与服务名【PRODUCT】
@Component
public class LoadConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
@Autowired
private RestTemplate restTemplate;
@GetMapping("/getServerMsg")
public String getServerMsg() {
String response = restTemplate.getForObject("http://PRODUCT/msg", String.class);
return response;
}
注意:配置负载均衡规则–>原文地址–>http://cloud.spring.io/spring-cloud-static/Finchley.RC2/single/spring-cloud.html#_customizing_the_ribbon_client_by_setting_properties
使用配置文件修改:
users:
ribbon:
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
PRODUCT:
ribbon:
# NIWSServerListClassName: com.netflix.loadbalancer.
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
IDEA补全代码快捷键:
ctrl + alt +v : 自动补全返回类型与返回属性名称;
ctrl + alt + f :自动补全返回属性名称;
ctrl + shift + u: 转换大小写;
ctrl + alt +B:查找接口的实现类;
ctrl + h:查看类或接口的继承关系.