SpringCloud-使用RestTemplate实现跨服务调用(基于ouath2自定义消息头)

Ribbon简介

RibbonNetflix发布的负载均衡器,它有助于控制HTTPTCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。

Spring Cloud中,当RibbonEureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。展示了RibbonEureka配合使用时的架构。

RestTemplateRibbon相结合

首先,需要在启动类添加如下代码:

@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 typeRef = new ParameterizedTypeReference() {};
            HttpHeaders requestHeaders = new HttpHeaders();
            requestHeaders.setContentType(MediaType.APPLICATION_JSON);
            requestHeaders.add("Authorization", request.getHeader("Authorization"));
            HttpEntity requestEntity = new HttpEntity<>(null, requestHeaders);
            ResponseEntity 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

运行即可调用到服务

你可能感兴趣的:(SpringCloud-使用RestTemplate实现跨服务调用(基于ouath2自定义消息头))