爱生活,爱分享


SpringCloud - 应用通信

haiten 2020-12-11 454浏览 0条评论
首页/正文
分享到: / / / /

一、RestTemplate

1、第一种方式(直接使用 restTemplate,url 写死)

    @GetMapping("/getProductMsg")
    public String getProductMsg() {
        // 1、第一种方式(直接使用 restTemplate,url 写死)
        RestTemplate restTemplate = new RestTemplate();
        String response = restTemplate.getForObject(
                "http://127.0.0.1:8080/msg",
                String.class
        );
        log.info("response={}", response);
        return response;
    }

2、第二种方式(利用 loadBalancerClient 通过应用名获取 url, 然后再使用 restTemplate)

    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @GetMapping("/getProductMsg")
    public String getProductMsg() {
        // 2、第二种方式(利用 loadBalancerClient 通过应用名获取 url, 然后再使用 restTemplate)
        ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT");
        log.info("host={}", serviceInstance.getHost());
        log.info("port={}", serviceInstance.getPort());
        log.info("uri={}", serviceInstance.getUri());
        String url = String.format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort()) + "/msg";
        RestTemplate restTemplate = new RestTemplate();
        String response = restTemplate.getForObject(
                url,
                String.class
        );
        log.info("response={}", response);
        return serviceInstance.getUri() + " " + response;
    }

3、第三种方式(利用 @LoadBalanced,可在 restTemplate 里面使用应用名字)

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

    @GetMapping("/getProductMsg")
    public String getProductMsg() {
        // 3、第三种方式(利用 @LoadBalanced,可在 restTemplate 里面使用应用名字)
        String response = restTemplate.getForObject(
                "http://PRODUCT/msg",
                String.class
        );
        log.info("response={}", response);
        return response;
    }

二、Feign

@FeignClient(name = "product")
public interface ProductClient {
    @GetMapping("/msg")
    String productMsg();
}
    @Autowired
    private ProductClient productClient;

    @GetMapping("/getProductMsg")
    public String getProductMsg() {
        String response = productClient.productMsg();
        log.info("response={}", response);
        return response;
    }
最后修改:2020-12-11 12:48:41 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

说点什么吧~

评论列表

还没有人评论哦~赶快抢占沙发吧~