1. 程式人生 > 其它 >SpringCloud服務呼叫

SpringCloud服務呼叫

技術標籤: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中注入介面呼叫介面方法即可