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<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

运行即可调用到服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值