Zuul的作用
作用其实就只有两个:
1. 请求路由。
2. 请求过滤。
请求路由
这里介绍一下面向服务的请求路由。
新建立项目geteway-api
引入pom
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.17.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR5</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
添加启动类
package com.bobo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@EnableZuulProxy
@SpringBootApplication
public class GetewayApiApplication {
public static void main(String[] args) {
SpringApplication.run(GetewayApiApplication.class, args);
}
}
配置文件
spring.application.name=api-geteway
server.port=5555
zuul.routes.api-a.path=/api-a/**
zuul.routes..api-a.serviceId=eureka-client
zuul.routes.api-b.path=/api-b/**
zuul.routes..api-b.serviceId=feign-consumer
eureka.client.serviceUrl.defaultZone=http://localhost:11111/eureka/
这里是做了一层映射,其中访问是包含api-a的会去eureka-client服务下去找,api-b的回去feign-comsumer中去找。
启动eureka、eureka-server、feign-cunsumer、geteway-api四个项目。
eureka服务结果如下所示:

在feign-consumer中有这样一个服务:
@RequestMapping(value = "/hello4",method = RequestMethod.GET)
public String Hello1 (@RequestParam String name){
return refactorHelloService.Hello(name);
}
然后去访问

在eureka-comsumer中服务是这样的:
package com.bobo.eurekaserver.controller;
import com.bobo.bean.User;
import com.bobo.service.api.HelloService;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RefactorHelloController implements HelloService{
@Override
public String Hello(String name) {
return "Hello" +name;
}
@Override
public User Hello(String name, String age) {
return new User(name,Integer.parseInt(age));
}
@Override
public String Hello(User user) {
return "Hello" + user.getName() +", "+user.getAge();
}
}
这里使用了feign的继承特性,所以哈哈,如果不会,去看看feign的继承是如何实现的。所以只能是这样访问:

如果使用http://localhost:5555/api-a/hello4?name=wuxiaobo去访问,结果只能是这样的:

