您好,登錄后才能下訂單哦!
SpringCloud的Ribbon+RestTemplate的三種使用方式分別是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
@GetMapping("getUserList")
public List getUserList(){
RestTemplate template = new RestTemplate();
return template.getForObject(
"http://localhost:8080/getUserList",//
List.class);
}
缺點:
1、url硬編碼,如果ip有變動,需要在代碼中更改
2、如果client為集群,有多個url,該方法只能配一個url;不能使用集群模式
方式二:注入LoadBalancerClient ,獲得應用名稱為providerServcidName(備注:服務提供者名稱)的應用的其中一個實例,獲得url,再使用RestTemplate獲取數據,實現負載均衡
@RestController
public class UserController {
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("getUserList")
public List getUserList() {
RestTemplate template = new RestTemplate();
// 選擇服務實例,根據傳入的服務名serviceId,
// 從負載均衡器中挑選一個對應服務的實例。
ServiceInstance instance = loadBalancerClient
.choose("providerServcidName");
String url = String.format("http://%s:%s",
instance.getHost(),
instance.getPort() + "/getUserList");
return template.getForObject(url, List.class);
}
}
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
在controller中注入RestTemplate對象,直接調用getForObject方法,注意url中直接寫應用名稱,不要寫ip:port
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class UserController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("getUserList")
public String getUserList() {
return restTemplate
.getForObject("http://providerServcidName/getUserList", List.class);
}
}
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。