学科分类
目录
Spring Cloud

Zuul快速入门

对Zuul的工作机制有所了解后,下面我们通过一个构建网关的实例快速体验Spring Cloud Zuul的功能。具体步骤如下:

1、 搭建Eureka Server

这里使用2.2.1小节搭建的Spring Boot项目eureka-server作为Eureka Server。

2、 创建提供者服务

(1)使用Spring Initializr方式创建一个提供者项目,这里将Group命名为com.itheima,将Artifact命名为eureka-provider,添加Test、Eureka Client、Web依赖。

(2)引入依赖后,在全局配置文件application.yml进行相关配置,包括配置程序名称、端口号,服务注册地址等,配置后的application.yml代码如例1所示。

例1 eureka-provider\src\main\resources\application.yml

 1  spring:
 2            application:
 3               name: eureka-provider
 4         server:
 5            port: 7006
 6         eureka:
 7            client:
 8              service-url:
 9                 defaultZone: http://localhost:7000/eureka
 10     instance:  
 11         hostname: localhost

(3)创建controller包,并在controller包下创建HystrixController类,在HystrixController类中创建一个hi()方法,如例2所示。

例2 eureka-provider\src\main\java\com\itheima\eurekaprovider\controller\HystrixController.java

 1     import org.springframework.web.bind.annotation.RequestMapping;
 2     import org.springframework.web.bind.annotation.RestController;
 3     @RestController
 4     public class HystrixController{
 5         @RequestMapping("/hi")
 6             public String hi(String id){
 7                 return "hi,访问成功!"+id;
 8         }
 9     }

(4)在启动类加上@EnableEurekaClient注解,开启Eureka Client功能,具体如例3所示。

例3 eureka-provider\src\main\java\com\theima\eurekaprovider\EurekaProviderApplication.java

 1     import org.springframework.boot.SpringApplication;
 2     import org.springframework.boot.autoconfigure.SpringBootApplication;
 3     import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 4     @EnableEurekaClient
 5     @SpringBootApplication
 6     public class EurekaProviderApplication {
 7         public static void main(String[] args) {
 8             SpringApplication.run(EurekaProviderApplication.class, args);
 9            }
 10     }

3、 创建消费者服务

(1)使用Spring Initializr方式创建一个消费者项目,这里将Group命名为com.itheima,将Artifact命名为eureka-consumer,添加Web、Test和Eureka Client依赖。

(2)引入依赖后,在全局配置文件application.yml进行相关配置,包括配置程序名称、端口号,服务注册地址等,配置后的application.yml代码如例4所示。

例4 eureka-consumer\src\main\resources\application.yml

 1     spring:
 2       application:
 3         name: eureka-consumer
 4     server:
 5       port: 8764
 6     eureka:
 7          client:
 8             service-url:
 9                defaultZone: http://localhost:7000/eureka

(3)创建一个config包,在config包下新建配置类RestConfig,并添加@Configuration注解。在RestConfig类中创建一个Bean实例方法RestTemplate(),并在restTemplate()方法上添加@LoadBalanced注解,使 RestTemplate实例对象处理请求时拥有客户端负载均衡的能力,具体如例5所示。

例5 eureka-consumer\src\main\java\com\itheima\eurekaconsumer\config\RestConfig.java

 1     import org.springframework.cloud.client.loadbalancer.LoadBalanced;
 2     import org.springframework.context.annotation.Bean;
 3     import org.springframework.context.annotation.Configuration;
 4     import org.springframework.web.client.RestTemplate;
 5     @Configuration
 6     public class RestConfig{
 7         @Bean
 8         @LoadBalanced
 9         public RestTemplate restTemplate(){
 10             return new RestTemplate();
 11         }
 12     }

(4)创建一个service包,在service包下新建LocalItemService类并添加@Service注解。在LocalItemService类中注入RestTemplate实例对象,并添加一个hi()方法,在hi()方法中对eureka-provider提供者服务进行调用,如例6所示。

例6 eureka-consumer\src\main\java\com\itheima\eurekaconsumer\service\LocalItemService.java

 1     import org.springframework.beans.factory.annotation.Autowired;
 2     import org.springframework.stereotype.Service;
 3     import org.springframework.web.bind.annotation.RequestParam;
 4     import org.springframework.web.client.RestTemplate;
 5     @Service
 6     public class LocalItemService {
 7         @Autowired
 8         RestTemplate restTemplate;
 9         public String hi(@RequestParam(value = "id")String id){
 10             return  
 11     restTemplate.getFor
 12     bject("http://eureka-provider/hi?id="+id, 
 13     String.class);
 14         }
 15     }

(5)创建一个controller包,在controller包下新建LocalItemController类并添加@RestController注解。在LocalItemController类中注入LocalItemService实例对象,并创建一个hi()方法,如例7所示。

例7 eureka-consumer\src\main\java\com\itheima\eurekaconsumer\controller\LocalItemController.java

 1     import com.itheima.eurekaribbonclient.service.LocalItemService;
 2     import org.springframework.beans.factory.annotation.Autowired;
 3     import org.springframework.web.bind.annotation.GetMapping;
 4     import org.springframework.web.bind.annotation.RestController;
 5     @RestController
 6     public class LocalItemController {
 7         @Autowired
 8         LocalItemService localItemService;
 9         @GetMapping("/hi")
 10         public String hi(String id) {
 11             return localItemService.hi(id);
 12         }
 13     }

(6)在启动类加上@EnableEurekaClient注解,开启Eureka Client功能,如例8所示。

例8 eureka-consumer\src\main\java\com\itheima\eurekaconsumer\EurekaConsumerApplication.java

 1     import com.itheima.eurekaribbonclient.service.LocalItemService;
 2     import org.springframework.beans.factory.annotation.Autowired;
 3     import org.springframework.web.bind.annotation.GetMapping;
 4     import org.springframework.web.bind.annotation.RestController;
 5     @EnableEurekaClient
 6     @SpringBootApplication
 7     public class EurekaConsumerApplication {
 8         public static void main(String[] args) {
 9             SpringApplication.run(EurekaConsumerApplication.class, args);
 10         }
 11     }

4、 创建网关服务

(1)使用Spring Initializr方式构建一个名称为gateway-zuul的网关服务项目,这里将Group命名为com.itheima,将Artifact命名为gateway-zuul,添加Zuul、Test、Eureka Client、Web依赖,其中,Zuul依赖具体如下所示。

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

(2)在项目gateway-zuul的启动类GatewayZuulApplication添加@EnableZuulProxy注解开启服务网关Zuul功能,如例9所示。

例9 gateway-zuul\src\main\java\com\itheima\gatewayzuul\GatewayZuulApplication.java

 1     import org.springframework.boot.SpringApplication;
 2     import org.springframework.boot.autoconfigure.SpringBootApplication;
 3     import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
 4     @SpringBootApplication
 5     @EnableZuulProxy
 6     public class GatewayZuulApplication {
 7         public static void main(String[] args) {
 8             SpringApplication.run(GatewayZuulApplication.class, args);
 9         }
 10     }

(3)在项目gateway-zuul的全局配置文件application.yml中配置Zuul的相关信息,配置后application.yml文件如例10所示。

例10 gateway-zuul\src\main\resources\application.yml

 1         server 
 2            port : 8835
 3         spring :
 4            application :
 5               name : gateway-zuul
 6         eureka : 
 7            client : 
 8               service-url:
 9                  defaultZone: http://localhost:7000/eureka/
 10     zuul:                                  # Zuul配置
 11       routes: 
 12         eureka-consumer:
 13            path: /eureka-consumer/**    #Zuul路由的前缀

(4)依次启动项目eureka-server,eureka-provider,eureka-consumer,gateway-zuul。启动成功后,使用浏览器访问http://loaclhost:7000,效果如图1所示。

图1 Eureka Server注册的服务

从图1中可以看出,这里我们访问消费者服务跟之前有所不同,我们需要在访问地址前加上我们在application.yml文件中配置的Zuul路由的前缀/eureka-consumer,这里我们访问http://localhost:8835/eureka-consumer/hi?id=12,效果如图2所示。

图2 通过Zuul访问服务效果图

点击此处
隐藏目录