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/> <!-- lookup parent from repository -->
	</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服务结果如下所示:

Spring Cloud Zuul入门

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

Spring Cloud Zuul入门

在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;

/**
 * @author [email protected]
 * @create 2018-10-28 10:13
 **/
@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的继承是如何实现的。所以只能是这样访问:

Spring Cloud Zuul入门

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

Spring Cloud Zuul入门

Spring Cloud Zuul入门

相关文章: