1. 程式人生 > >Spring Cloud Zuul入門

Spring Cloud Zuul入門

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服務結果如下所示:

在這裡插入圖片描述

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

/**
 * @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的繼承是如何實現的。所以只能是這樣訪問:

在這裡插入圖片描述

如果使用http://localhost:5555/api-a/hello4?name=wuxiaobo去訪問,結果只能是這樣的:

在這裡插入圖片描述

在這裡插入圖片描述