Spring Cloud 6:服務消費
阿新 • • 發佈:2018-11-27
使用LoadBalancerClient
在Spring Cloud Commons中提供了大量的與服務治理相關的抽象介面,包括DiscoveryClient、以及LoadBalancerClient等。對於這些介面的定義,Spring Cloud做這一層抽象,很好的解耦了服務治理體系,使得我們可以輕易的替換不同的服務治理設施。
從LoadBalancerClient介面的命名中,知道這是一個負載均衡客戶端的抽象定義。
引入Eureka或Consul [此處使用Eureka]
pom.xml
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency>
application.properties
spring.application.name=yang-consumer server.port=1002 eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
Application.java
@EnableDiscoveryClient @SpringBootApplication public class Application { @Bean public RestTemplate restTemplate() {return new RestTemplate(); } public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); } }
Controller.java
@RestController @RequestMapping("/user") public class UserController { @Autowired LoadBalancerClient loadBalancerClient; @Autowired RestTemplate restTemplate; @GetMapping("/list") public BaseResult link2Consumer() { ServiceInstance serviceInstance = loadBalancerClient.choose("yang-producer"); String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/user/list"; System.out.println(url); return restTemplate.getForObject(url, BaseResult.class); } }
這裡注入了LoadBalancerClient和RestTemplate,並在/user/list介面的實現中,先通過loadBalancerClient的choose函式來負載均衡的選出一個yang-producer的服務例項,這個服務例項的基本資訊儲存在ServiceInstance中,然後通過這些物件中的資訊拼接出訪問/user/list介面的詳細地址,最後再利用RestTemplate物件實現對服務提供者介面的呼叫