1. 程式人生 > >Spring Cloud RestTemplate學習

Spring Cloud RestTemplate學習

通過RestTemplate進行服務呼叫

在RestTemplate基礎上加上負載均衡:

Ribbon是一個基於HTTP和TCP的負載均衡工具,可以讓我們輕鬆的將面向服務的Rest模板請求自動轉換成客戶端負載均衡的服務呼叫。它不像註冊中心、配置中心和閘道器那樣需要獨立部署,它幾乎存在於每一個微服務應用中,因為微服務間的呼叫、閘道器的請求轉發都需要用到ribbon。
1、在pom.xml檔案中加入Ribbon依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

2、建立例項
可以在自定義的配置類中建立,但通常會放在入口類處(入口類本身也是一個配置類,因為@SpringBootApplication包含了@SpringBootConfiguration,@SpringBootConfiguration包含@Configuration),因為RestTemplate是一個與業務無關的基礎bean。
@Bean
//負載均衡
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
3、呼叫服務

@RestController
public class ConsumerController {
@Autowired
RestTemplate restTemplate;
@RequestMapping(value="/userInfo", method = RequestMethod.GET)
public String userInfo(@RequestParam String name, @RequestParam String age) {
//如果是post請求,可以用postForEntity
Map<String , Object> params = new HashMap<String , Object>();
params.put("name", name);
params.put("age", age);
return restTemplate.getForEntity("

http://USERINFO-SERVICE/userInfo?name={name}&age={age}",
String.class,params).getBody();
}
}

可以配置負載均衡策略,@Configuration ribbonRule @RibbonClients(defaultConfiguration={RibbonConfiguration.class}),也可以直接用@LoadBalanced預設負載均衡
預設是簡單輪詢負載均衡(RoundRobin),yml檔案也可以配置規則,NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
1、簡單輪詢負載均衡(RoundRobin) 2:隨機負載均衡 (Random)3:加權響應時間負載均衡 (WeightedResponseTime) 4:區域感知輪詢負載均衡(ZoneAvoidanceRule)
@Primary
@Bean(name="lbcRestTemplate")
public RestTemplate restTemplate(){
return new RestTemplate();
}

@Autowired
@Qualifier(value = "lbcRestTemplate")
private RestTemplate lbcRestTemplate;

ServiceInstance serviceInstance = loadBalancerClient.choose("service-getScore");
String url = "http://" + serviceInstance.getHost()
+ ":" + serviceInstance.getPort() + "/getScore/"+id;
lbcRestTemplate.getForEntity(url,String.class).getBody();

服務提供者:服務的被呼叫方,服務註冊

eureka.client.service-url.defaultZone=http://localhost:8005/eureka/,http://localhost:8006/eureka/ 同時啟動8000,8001兩個埠
服務消費者:服務註冊eureka.client.service-url.defaultZone=http://localhost:8005/eureka/,http://localhost:8006/eureka/

同時啟動8002,8003兩個埠
eureka叢集:啟動8005,8006兩個埠