请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术发帖,必有回复! 做最受欢迎的Java论坛

疯狂Java联盟

 找回密码
 加入联盟
查看: 40|回复: 0

初试Spring Cloud Gateway

[复制链接]
发表于 2018-5-14 17:52:05 | 显示全部楼层 |阅读模式
本帖最后由 杨恩雄 于 2018-5-14 17:53 编辑

初试Spring Cloud Gateway
构建服务端
使用Spring Boot构建一个简单的Web应用,外界向网关发送请求后,会转发到该应用,pom.xml文件内容如下:
  1.     <parent>
  2.         <groupId>org.springframework.boot</groupId>
  3.         <artifactId>spring-boot-starter-parent</artifactId>
  4.         <version>2.0.2.RELEASE</version>
  5.     </parent>

  6.     <dependencies>
  7.         <dependency>
  8.             <groupId>org.springframework.boot</groupId>
  9.             <artifactId>spring-boot-starter-web</artifactId>
  10.         </dependency>
  11.     </dependencies>
复制代码

编写启动类与控制器,提供一个“hello”服务:
  1. @SpringBootApplication
  2. @RestController
  3. public class ServerApp {

  4.     public static void main(String[] args) {
  5.         SpringApplication.run(ServerApp.class, args);
  6.     }

  7.    

  8.     @GetMapping("/hello")
  9.     public String hello() {
  10.         System.out.println("调用 hello 方法");
  11.         return "hello";
  12.     }

  13. }
复制代码

ServerApp中的hello方法,会返回hello字符串,启动ServerApp,默认使用8080端口,浏览器中访问http://localhost:8080/hello,可看到浏览器输出结果。
构建网关
新建一个普通的Maven项目,加入Spring Cloud Gateway的依赖,pom.xml内容如下:
  1.     <parent>
  2.         <groupId>org.springframework.boot</groupId>
  3.         <artifactId>spring-boot-starter-parent</artifactId>
  4.         <version>2.0.0.RELEASE</version>
  5.     </parent>

  6.     <dependencyManagement>
  7.         <dependencies>
  8.             <dependency>
  9.                 <groupId>org.springframework.cloud</groupId>
  10.                 <artifactId>spring-cloud-dependencies</artifactId>
  11.                 <version>Finchley.RC1</version>
  12.                 <type>pom</type>
  13.                 <scope>import</scope>
  14.             </dependency>
  15.         </dependencies>
  16.     </dependencyManagement>



  17.     <dependencies>
  18.         <dependency>
  19.             <groupId>org.springframework.cloud</groupId>
  20.             <artifactId>spring-cloud-starter-gateway</artifactId>
  21.         </dependency>
  22.     </dependencies>
复制代码

为网关项目加入配置文件application.yml,修改服务器端口为9000,配置文件内容如下:
  1. server:
  2.   port: 9000
复制代码

添加启动类,配置一个路由定位器的bean,代码如下:
  1. @SpringBootApplication
  2. public class RouterApp {
  3.     public static void main(String[] args) {
  4.         SpringApplication.run(RouterApp.class, args);
  5.     }



  6.     @Bean
  7.     public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
  8.         Function<PredicateSpec, Route.Builder> fn = new Function<PredicateSpec, Route.Builder>() {

  9.             public Route.Builder apply(PredicateSpec t) {
  10.                 t.path("/hello");
  11.                 return t.uri("http://localhost:8080");
  12.             }
  13.         };
  14.         return builder.routes().route(fn).build();
  15.     }

  16. }
复制代码

以上代码中,使用Spring容器中的RouteLocatorBuilder bean来创建路由定位器,调用Builder的route方法时,传入java.util.function.Function实例,这是Java8加入的其中一个函数式接口,我们可以使用函数式编程来实现以上的代码,下面的代码等价于前面的代码:
  1.     @Bean
  2.     public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
  3.         return builder.routes()
  4.         .route(f -> f.path("/hello")
  5.           .and()
  6.           .uri("http://localhost:8080"))
  7.         .build();
  8.     }
复制代码

以上的两段代码设定了一个路由规则,当浏览器访问网关的http://localhost:9000/hello地址后,就会路由到http://localhost:8080/hello
除了可以路由到我们本例的8080端口外,还可以路由到其他网站,只需要改变一下PredicateSpec的uri即可,例如将.uri("http://localhost:8080")改为.uri(“http://www.163.com”)。





您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11063141号 )

GMT+8, 2018-5-25 09:30 , Processed in 0.272294 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表