Ribbon简介
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。
在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。展示了Ribbon与Eureka配合使用时的架构。
RestTemplate和Ribbon相结合
首先,需要在启动类添加如下代码:
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
然后,将RestTemplate注入需要调用其他服务的类中,编写调用方法,设置消息头
@RestController
@RequestMapping(value = "/v1/HeatStress")
public class HeatStressController {
@Autowired
RestTemplate restTemplate;
@Permission(permissionLogin = true)
@RequestMapping(value = "/rest",method = RequestMethod.GET)
public DeliveryFailureTemp rest(HttpServletRequest request) {
try {
ParameterizedTypeReference<DeliveryFailureTemp> typeRef = new ParameterizedTypeReference<DeliveryFailureTemp>() {};
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
requestHeaders.add("Authorization", request.getHeader("Authorization"));
HttpEntity<DeliveryFailureTemp> requestEntity = new HttpEntity<>(null, requestHeaders);
ResponseEntity<DeliveryFailureTemp> responseEntity = restTemplate.exchange
( "http://serviceId/v1/MessageTemplate/supplierDelivery",
HttpMethod.GET, requestEntity, typeRef);
return responseEntity.getBody();
} catch (RestClientException e) {
throw new HapException(MessageTemplateExecption.ERROR_PARA_GH);
}
}
}
serviceId是你要调用的服务id,也就是注册在eureka上的服务的id
在swagger上先登录获取到token,然后通过request将token传入
通过requestHeaders.add("Authorization", request.getHeader("Authorization"))给消息头添加token
运行即可调用到服务