【Dalston】服务消费者(基础)

使用LoadBalancerClient

在Spring Cloud Commons中提供了大量的与服务治理相关的抽象接口,包括DiscoveryClientLoadBalancerClient等。

创建一个消费者

首先初始化一个Spring Boot工程,命名为:eureka-consumer,在pom.xml中配置如下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

修改配置文件application.yaml

server:
  port: 2101
spring:
  application:
    name: eureka-consumer
eureka:
  client:
    service-url:
      # 指定eureka服务注册中心地址
      defaultZone: http://localhost:1001/eureka/

在主类中添加@EnableDiscoveryClient注解将当前应用加入服务治理体系,并且初始化RestTemplate,用来发起REST请求。

@EnableDiscoveryClient
@SpringBootApplication
public class EurekaConsumerApplication {

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(EurekaConsumerApplication.class, args);
    }
}

创建一个接口,用来消费eureka-client提供的接口:

@RestController
public class DcController {

    @Autowired
    LoadBalancerClient loadBalancerClient;
    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/consumer")
    public String  dc(){
        ServiceInstance serviceInstance = loadBalancerClient.choose("eureka-client");
        String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/dc";
        System.out.println(url);
        return restTemplate.getForObject(url, String.class);
    }
}

DcController类中注入了loadBalancerClientrestTemplate,并且实现了一个/consumer接口,先通过loadBalancerClientchoose方法负载均衡选出一个eureka-client的示例,然后利用restTemplate调用服务提供者的接口。

此时访问:http://localhost:2101/consumer

服务消费者

PS:consul版本其实也是一样的,只要正常启动了consul,并且服务注册成功即可,如果还没注册成功,启动会报错。

文章发布自:笑凡尘,转载请注明出处,谢谢!