springcloud中的服务消费者

springcloud服务调用方式有两种实现方式:

1,restTemplate+ribbon,

2,feign

 

本来想一篇讲完,发现篇幅有点长,所以本章先讲 restTemplate+ribbon,

ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。

Feign默认集成了ribbon。

 

 项目实战:

新一个springboot项目,名字为 eureka-consumer-ribbon

其pom.xml配置如下

  1. <properties>
  2.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3.         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  4.         <java.version>1.8</java.version>
  5.     </properties>
  6.     <dependencies>
  7.         <dependency>
  8.             <groupId>org.springframework.cloud</groupId>
  9.             <artifactId>spring-cloud-starter-eureka</artifactId>
  10.         </dependency>
  11.         <dependency>
  12.             <groupId>org.springframework.boot</groupId>
  13.             <artifactId>spring-boot-starter-web</artifactId>
  14.         </dependency>
  15.         <dependency>
  16.             <groupId>org.springframework.boot</groupId>
  17.             <artifactId>spring-boot-starter-actuator</artifactId>
  18.         </dependency>
  19.         <dependency>
  20.             <groupId>org.springframework.cloud</groupId>
  21.             <artifactId>spring-cloud-starter-ribbon</artifactId>
  22.         </dependency>
  23.     </dependencies>
  24.     <dependencyManagement>
  25.         <dependencies>
  26.             <dependency>
  27.                 <groupId>org.springframework.cloud</groupId>
  28.                 <artifactId>spring-cloud-dependencies</artifactId>
  29.                 <version>Dalston.SR1</version>
  30.                 <type>pom</type>
  31.                 <scope>import</scope>
  32.             </dependency>
  33.         </dependencies>
  34.     </dependencyManagement>
在项目启动类Application上添加@EnableDiscoveryClient注解(上一章提到了@EnableDiscoveryClient和@EnableEurekaServer的区别)向服务中心注册服务,

并且使用@bean像spring容器中注入一个restTemplate对象,@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。

  1. @EnableDiscoveryClient
  2. @SpringBootApplication
  3. public class Application {
  4.     @Bean
  5.     @LoadBalanced
  6.     public RestTemplate restTemplate() {
  7.         return new RestTemplate();
  8.     }
  9.     public static void main(String[] args) {
  10.         new SpringApplicationBuilder(Application.class).web(true).run(args);
  11.     }
  12. }
在application.properties中指定,服务名:eureka-consumer-ribbon,端口为9101,服务注册中心地址为:http://localhost:9001/eureka/
  1. spring.application.name=eureka-consumer-ribbon
  2. server.port=9101
  3. eureka.client.serviceUrl.defaultZone=http://localhost:9001/eureka/
新建一个RibbonController类,用来消费eureka-client的服务
  1. @RestController
  2. public class RibbonController {
  3.   @Autowired
  4.   RestTemplate restTemplate;
  5.   @GetMapping("/consumer")
  6.   public String getMsg() {
  7.     return restTemplate.getForObject("http://eureka-client/client", String.class);
  8.   }
  9. }
这里的请求地址使用http://server-name,来代替http://ip:port,因为在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名,这里请求的是eureka-client/client

 

使用上一章已经创建的项目eureka-server,eureka-client这俩项目

首先:

1,启动 eureka-server

2,启动 eureka-client 配置文件的端口默认为9002

3,修改配置文件的端口为9003,再启动一个eureka-client

4,在启动 eureka-consumer-ribbon

 

访问http://localhost:9001/,就会发现,已经有eureka-clent服务注册了,而且有两个实例,9002和9003

访问 http://localhost:9101/consumer,就会发现已经消费了 eureka-client项目提供的服务,而且ribbon已经默认实现了负载均衡