SpringCloud服務呼叫
阿新 • • 發佈:2021-01-23
技術標籤:SpringCloud學習筆記spring cloudspring cloud alibaba
SpringCloud服務呼叫
文章目錄
一、服務呼叫
微服務之間的呼叫(普通方式)
1、通過DiscoveryClient的getInstances(服務名)獲取服務的例項列表
2、獲取例項列表中的某一個服務
3、利用例項中的getUri()方法獲取服務的uri
4、利用RestTemplate的遠端呼叫方法呼叫其他微服務
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private RestTemplate restTemplate;
@GetMapping("/{id}")
public String test (@PathVariable("id") String id){
ServiceInstance serviceInstance = discoveryClient
.getInstances("cloud-provider")
.get(0);
return restTemplate.getForObject(
serviceInstance.getUri()+"/msg/{id}",
String. class, id
);
}
}
二、RestTemplate
簡介
傳統情況下在java程式碼裡訪問restful服務,一般使用Apache的HttpClient。不過此種方法使用起來太過繁瑣。spring提供了一種簡單便捷的模板類來進行操作,RestTemplate。
API:
API | 作用 |
---|---|
getForEntity(url,返回型別的Class) | 以get方式傳送請求返回值為 |
getForObject(url,返回型別的Class) | 以get方式傳送請求返回值為json |
postForEntity(url,訊息體,返回型別的Class) | 以post方式傳送請求 |
postForObject(url,訊息體,返回型別的Class) | 以post方式傳送請求 |
delete(url,佔位符) | 傳送delete請求 |
put(url,傳遞的實體) | 傳送put請求 |
三、Ribbon簡介
Spring Cloud Ribbon是一個基於HTTP和TCP的客戶端負載均衡工具,它基於Netflix Ribbon實現。通過Spring Cloud的封裝,可以讓我們輕鬆地將面向服務的REST模版請求自動轉換成客戶端負載均衡的服務呼叫。
四、Ribbon負載均衡使用方式
引入依賴
在Eureka和Nacos服務發現依賴中已經引入
依賴:
使用方式:
通常配合RestTemplate使用(呼叫端-消費者使用)
在RestTemplate的bean上添加註解@LoadBalanced即可
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
五、OpenFeign元件簡介
Feign是一個宣告式的Web服務客戶端,讓編寫Web服務客戶端變得非常容易,只需建立一個介面並在介面上添加註解,即可像RestTemplate那樣呼叫其他微服務。
六、OpenFeign元件使用方式
1、新增依賴
2、建立介面並以@FeignClient標註介面併為註解新增屬性value=服務名
3、在啟動類上新增@EnableFeignClients註解
4、編寫介面方法 每一個方法對應一個服務呼叫方法上新增對應訪問路徑支援SpringMVC註解
新增依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
建立介面加註解
@FeignClient(value = "cloud-provider")
public interface ProviderService {
@GetMapping("/msg/{id}")
String msg(@PathVariable("id") String id);
}
在啟動類上添加註解
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class CloudConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(CloudConsumerApplication.class, args);
}
}
編寫介面方法
@GetMapping("/msg/{id}")
String msg(@PathVariable("id") String id);
在Controller中注入介面呼叫介面方法即可