RestTemplate在Spring Cloud中的三种用法

第一种,直接new一个RestTemplate实例将url写死

@RestController
@Slf4j
public class ClientController {
    @GetMapping("/getProductMsg")
    public String getProductMsg() {
        // 第一种,直接使用restTemplate url写死
        RestTemplate restTemplate = new RestTemplate();
        String resp = restTemplate.getForObject("http://localhost:8080/msg", String.class);
        log.info("resp={}", resp);
        return resp;
    }
}

第二种,利用Spring Cloud提供的LoadBalancerClient来获取应用的hostport

@RestController
@Slf4j
public class ClientController {
    // spring cloud 提供的
    @Autowired
    private LoadBalancerClient loadBalancerClient;
    @GetMapping("/getProductMsg")
    public String getProductMsg() {
        RestTemplate restTemplate = new RestTemplate();
        // 第二种 利用loadBalancerClient 通过应用名获取url,然后再使用restTemplate
        ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT");
         String url = String.format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort()) +           "/msg";
        String resp = restTemplate.getForObject(url, String.class);
        log.info("resp={}", resp);
        return resp;
    }
}

第三种,使用了Ribbon,利用@LoadBalanced注解可在RestTemplate中使用应用的名字

先注册一个RestTemplatebean

@Component
public class RestTemplateConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

再注入使用

@RestController
@Slf4j
public class ClientController {
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("/getProductMsg")
    public String getProductMsg() {
        // 第三种 利用@LoadBalanced 可在restTemplate中使用应用的名字
        String resp = restTemplate.getForObject("http://PRODUCT/msg", String.class);
        log.info("resp={}", resp);
        return resp;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容