Spring Cloud Alibaba 使用restTemplate進行服務呼叫
阿新 • • 發佈:2021-10-04
Spring Cloud Alibaba 服務呼叫負載均衡
在前面的學習我們成功的實現了服務註冊和服務發現 現在我們需要實現服務呼叫
編寫服務介面
在生產者編寫一個簡單的介面功能 這裡我們實現一個返回埠的介面
@RestController
public class ProviderController {
@Value("${server.port}")
private String port;
@GetMapping("/getPort")
public String getPort(){
return this.port;
}
}
分別執行埠為8081 8082的兩個服務
在nacos檢視
在消費者呼叫服務功能
呼叫功能我們通過resttemplate來實現
要想使用該類需要我們去編寫配置類
@Configuration
public class ConsumerConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
編寫消費者類
package com.jie.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import java.util.List; import java.util.concurrent.ThreadLocalRandom; @RestController public class ConsumerController { //通過discoveryClient連線nacos @Autowired private DiscoveryClient discoveryClient; @Autowired private RestTemplate restTemplate; @GetMapping("/instances") public List<ServiceInstance> instances(){ List<ServiceInstance> instances = this.discoveryClient.getInstances("provider"); return instances; } @GetMapping("/getPort") public String getPort(){ //獲取例項集合 List<ServiceInstance> list = this.discoveryClient.getInstances("provider"); //我們隨機拿取其中的一個例項 int index = ThreadLocalRandom.current().nextInt(list.size()); ServiceInstance instance = list.get(index); //主機名加埠即為URI 如localhost:8080 加上/getPort 就是完整路徑url String url = instance.getUri() + "/getPort"; //呼叫 第二個引數為呼叫介面的返回型別 return "呼叫了 "+restTemplate.getForObject(url,String.class); } }
訪問消費者介面 多次訪問可以出現兩個生產者服務都被消費的結果