1. 程式人生 > >Spring Cloud 6:服務消費

Spring Cloud 6:服務消費

使用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物件實現對服務提供者介面的呼叫