使用RestTemplate和Feign通信

RestTemplate通信的三种方式

1、直接调用

 @RequestMapping("/hello")
    public String hello(){
        RestTemplate restTemplate = new RestTemplate();
        String url = "http://localhost:8081/index/hello";
        String response = restTemplate.getForObject(url, String.class);
        log.info("response is {}", response);
        return "hello world, I'm service-demo";
    }

缺点:再多台微服务部署的情况下,一般不知道ip和端口

2、使用LoadBalancerClient构建出ip和端口

    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @RequestMapping("/hello")
    public String hello(){
       RestTemplate restTemplate = new RestTemplate();
       ServiceInstance serviceInstance = loadBalancerClient.choose("service-demo"); //服务名
       String url = String.format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort());
       String response = restTemplate.getForObject(url, String.class);
       log.info("response is {}", response);
       return "hello world, I'm service-demo";
    }

3、使用config配置

@Component
public class RestTemplateConfig {

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


@Autowired
private RestTemplate restTemplate;

@RequestMapping("/hello")
public String hello(){
   String url = "http://SERVICE-DEMO/index/hello";
   String response = restTemplate.getForObject(url, String.class);
   log.info("response is {}", response);
   return "hello world, I'm service-demo";
}

Feign通信步骤

1、引用依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
    <version>1.4.5.RELEASE</version>
</dependency>

2、添加Feign注解

@EnableFeignClients
public class ServiceClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceClientApplication.class, args);
    }

}

3、编写远程通信接口

@FeignClient(name = "service-demo")
public interface ServiceClient {

    @GetMapping("/index/hello")
    String hello();
}

4、调用方法

 @Autowired
    private ServiceClient serviceClient;

    @RequestMapping("/hello")
    public String hello(){
        String response = serviceClient.hello();
        log.info("response is {}", response);
        return "hello world, I'm service-demo";
    }

猜你喜欢

转载自blog.csdn.net/zhonglunsheng/article/details/89115792
今日推荐