服務間的通信 RestTemplate和Feign


1.RestTemplate

   Spring RestTemplate 是 Spring 提供的用於訪問 Rest 服務的客戶端,RestTemplate 提供了多種便捷訪問遠程Http服務的方法,能夠大大提高客戶端的編寫效率,所以很多客戶端比如 Android或者第三方服務商都是使用 RestTemplate 請求 restful 服務。

  定義一個RestTemplate的Bean,設置成LoadBalanced

  

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

調用時注入這個bean

@Autowired
private RestTemplate restTemplate;

public String getProduct(string productId) {
    String response=restTemplate.getForObject("http://Product/getProduct/" + productId, String.class); //Product為應用名字

    return response;

}

2.Fegin

  

Feign是一種負載均衡的HTTP客戶端, 使用Feign調用API就像調用本地方法一樣,從避免了 調用目標微服務時,需要不斷的解析/封裝json 數據的繁瑣。
Fegin是一個聲明似的web服務客戶端,它使得編寫web服務客戶端變得更加容易。使用Fegin創建一個接口並對它進行注解。它具有可插拔的注解支持包括Feign注解與JAX-RS注解,Feign還支持可插拔的編碼器與解碼器,Spring Cloud 增加了對 Spring MVC的注解,Spring Web 默認使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的負載均衡的HTTP客戶端 Feign。
 

引入依賴 

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

 啟動類上添加注解  @EnableFeignClients

@EnableFeignClients(basePackages = "cn.qin.client") //掃描包

定義接口 

 

@FeignClient(name= "Product")  //應用名稱
public interface ProductClient {

    @GetMapping("/getProduct")
    public String getProduct(String productId);

}

在調用的地方 注入

 @Autowired
   private ProductClient client;

 @GetMapping(value = "getProduct")
  public String getProduct(String productId) {
        return client.getProduct(productId);
  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM