diff --git a/README.md b/README.md
index b46b159..0935a16 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,7 @@ Spring Cloud 使用的各种示例,以最简单、最实用为标准
- [spring-cloud-sleuth-zipkin](https://github.com/ityouknow/spring-cloud-examples/tree/master/spring-cloud-sleuth-zipkin): 利用Sleuth、Zipkin对Spring Cloud应用进行服务追踪分析
- [spring-boot-admin-eureka](https://github.com/ityouknow/spring-cloud-examples/tree/master/spring-boot-admin-eureka): 使用Spring Boot Admin 对Spring Cloud集群进行监控示例
- [spring-cloud-consul](https://github.com/ityouknow/spring-cloud-examples/tree/master/spring-cloud-consul): Spring Cloud 使用 Consul 作为服务中心示例
-- [spring-cloud-gateway](https://github.com/ityouknow/spring-cloud-examples/tree/master/spring-cloud-gateway): Spring Cloud 使用 Consul 作为服务中心示例
+- [spring-cloud-gateway](https://github.com/ityouknow/spring-cloud-examples/tree/master/spring-cloud-gateway): Spring Cloud 使用 gateway 的相关示例
学习系列:
@@ -41,7 +41,9 @@ Spring Cloud 使用的各种示例,以最简单、最实用为标准
- [springcloud(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪](http://www.ityouknow.com/springcloud/2018/02/02/spring-cloud-sleuth-zipkin.html)
- [springcloud(十三):Spring Cloud Consul 使用详解](http://www.ityouknow.com/springcloud/2018/07/20/spring-cloud-consul.html)
- [Spring Cloud (十四):Spring Cloud 开源软件都有哪些?](http://www.ityouknow.com/springcloud/2018/08/06/spring-cloud-open-source.html)
-- [springcloud(十五):服务网关 Spring Cloud GateWay 初级篇](http://www.ityouknow.com/springcloud/2018/12/12/spring-cloud-gateway.html)
+- [springcloud(十五):服务网关 Spring Cloud GateWay 初级篇](http://www.ityouknow.com/springcloud/2018/12/12/spring-cloud-gateway-start.html)
+- [springcloud(十六):服务网关 Spring Cloud GateWay 服务化和过滤器](http://www.ityouknow.com/springcloud/2019/01/19/spring-cloud-gateway-service.html)
+- [springcloud(十七):服务网关 Spring Cloud GateWay 熔断、限流、重试](http://www.ityouknow.com/springcloud/2019/01/26/spring-cloud-gateway-limit.html)
综合篇:
diff --git a/spring-cloud-gateway/cloud-gateway-eureka/pom.xml b/spring-cloud-gateway/cloud-gateway-eureka/pom.xml
new file mode 100644
index 0000000..3e418ba
--- /dev/null
+++ b/spring-cloud-gateway/cloud-gateway-eureka/pom.xml
@@ -0,0 +1,66 @@
+
+
+ 4.0.0
+
+ com.neo
+ cloud-gateway-eureka
+ 0.0.1-SNAPSHOT
+ jar
+
+ cloud-gateway-eureka
+ Demo project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.6.RELEASE
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Finchley.SR2
+ pom
+ import
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-gateway
+
+
+ org.springframework.cloud
+ spring-boot-starter-data-redis-reactive
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/spring-cloud-gateway/cloud-gateway-eureka/src/main/java/com/neo/GateWayServiceApplication.java b/spring-cloud-gateway/cloud-gateway-eureka/src/main/java/com/neo/GateWayServiceApplication.java
new file mode 100644
index 0000000..856300c
--- /dev/null
+++ b/spring-cloud-gateway/cloud-gateway-eureka/src/main/java/com/neo/GateWayServiceApplication.java
@@ -0,0 +1,16 @@
+package com.neo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.gateway.route.RouteLocator;
+import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
+import org.springframework.context.annotation.Bean;
+
+@SpringBootApplication
+public class GateWayServiceApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(GateWayServiceApplication.class, args);
+ }
+
+}
diff --git a/spring-cloud-gateway/cloud-gateway-eureka/src/main/java/com/neo/config/Config.java b/spring-cloud-gateway/cloud-gateway-eureka/src/main/java/com/neo/config/Config.java
new file mode 100644
index 0000000..45267ce
--- /dev/null
+++ b/spring-cloud-gateway/cloud-gateway-eureka/src/main/java/com/neo/config/Config.java
@@ -0,0 +1,19 @@
+package com.neo.config;
+
+import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
+import org.springframework.context.annotation.Bean;
+import reactor.core.publisher.Mono;
+
+public class Config {
+
+ @Bean
+ public KeyResolver ipKeyResolver() {
+ return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
+ }
+
+
+ @Bean
+ KeyResolver userKeyResolver() {
+ return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("user"));
+ }
+}
diff --git a/spring-cloud-gateway/cloud-gateway-eureka/src/main/resources/application.yml b/spring-cloud-gateway/cloud-gateway-eureka/src/main/resources/application.yml
new file mode 100644
index 0000000..eaf9ad3
--- /dev/null
+++ b/spring-cloud-gateway/cloud-gateway-eureka/src/main/resources/application.yml
@@ -0,0 +1,63 @@
+server:
+ port: 8888
+spring:
+ application:
+ name: cloud-gateway-eureka
+ redis:
+ host: localhost
+ password:
+ port: 6379
+ cloud:
+ gateway:
+ discovery:
+ locator:
+ enabled: true
+ routes:
+ - id: nameRoot
+ uri: lb://spring-cloud-producer
+ predicates:
+ - Path=/name/**
+ filters:
+ - StripPrefix=2
+ - id: add_request_parameter_route
+# uri: http://localhost:9000
+ uri: lb://spring-cloud-producer
+ filters:
+ - AddRequestParameter=foo, bar
+ predicates:
+ - Method=GET
+ - id: requestratelimiter_route
+ uri: lb://spring-cloud-producer
+ filters:
+ - name: RequestRateLimiter
+ args:
+ redis-rate-limiter.replenishRate: 10
+ redis-rate-limiter.burstCapacity: 20
+ key-resolver: "#{@userKeyResolver}"
+ predicates:
+ - Method=GET
+ - id: hystrix_route
+ uri: lb://spring-cloud-producer
+ predicates:
+ - Path=/consumingserviceendpoint
+ filters:
+ - name: Hystrix
+ args:
+ name: fallbackcmd
+ fallbackUri: forward:/incaseoffailureusethis
+ - id: retry_test
+ uri: lb://spring-cloud-producer
+ predicates:
+ - Path=/retry
+ filters:
+ - name: Retry
+ args:
+ retries: 3
+ statuses: BAD_GATEWAY
+eureka:
+ client:
+ service-url:
+ defaultZone: http://localhost:8000/eureka/
+logging:
+ level:
+ org.springframework.cloud.gateway: debug
\ No newline at end of file
diff --git a/spring-cloud-gateway/cloud-gateway-eureka/src/test/java/com/neo/GateWayServiceApplicationTests.java b/spring-cloud-gateway/cloud-gateway-eureka/src/test/java/com/neo/GateWayServiceApplicationTests.java
new file mode 100644
index 0000000..de8112c
--- /dev/null
+++ b/spring-cloud-gateway/cloud-gateway-eureka/src/test/java/com/neo/GateWayServiceApplicationTests.java
@@ -0,0 +1,16 @@
+package com.neo;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class GateWayServiceApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
diff --git a/spring-cloud-gateway/spring-cloud-eureka/pom.xml b/spring-cloud-gateway/spring-cloud-eureka/pom.xml
new file mode 100644
index 0000000..0dcc3ff
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-eureka/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+ spring-cloud-eureka
+ jar
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.6.RELEASE
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Finchley.SR2
+ pom
+ import
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-server
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/spring-cloud-gateway/spring-cloud-eureka/src/main/java/com/neo/SpringCloudEurekaApplication.java b/spring-cloud-gateway/spring-cloud-eureka/src/main/java/com/neo/SpringCloudEurekaApplication.java
new file mode 100644
index 0000000..0c995b0
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-eureka/src/main/java/com/neo/SpringCloudEurekaApplication.java
@@ -0,0 +1,15 @@
+package com.neo;
+
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
+
+@SpringBootApplication
+@EnableEurekaServer
+public class SpringCloudEurekaApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringCloudEurekaApplication.class, args);
+ }
+}
diff --git a/spring-cloud-gateway/spring-cloud-eureka/src/main/resources/application.properties b/spring-cloud-gateway/spring-cloud-eureka/src/main/resources/application.properties
new file mode 100644
index 0000000..124b09d
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-eureka/src/main/resources/application.properties
@@ -0,0 +1,8 @@
+spring.application.name=spring-cloud-eureka
+
+server.port=8000
+eureka.client.register-with-eureka=false
+eureka.client.fetch-registry=false
+
+eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
+
diff --git a/spring-cloud-gateway/spring-cloud-eureka/src/test/java/com/neo/SpringCloudEurekaApplicationTests.java b/spring-cloud-gateway/spring-cloud-eureka/src/test/java/com/neo/SpringCloudEurekaApplicationTests.java
new file mode 100644
index 0000000..d536a6b
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-eureka/src/test/java/com/neo/SpringCloudEurekaApplicationTests.java
@@ -0,0 +1,16 @@
+package com.neo;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class SpringCloudEurekaApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
diff --git a/spring-cloud-gateway/spring-cloud-producer-1/pom.xml b/spring-cloud-gateway/spring-cloud-producer-1/pom.xml
new file mode 100644
index 0000000..c5d9f07
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-producer-1/pom.xml
@@ -0,0 +1,52 @@
+
+
+ 4.0.0
+ spring-cloud-producer-1
+ jar
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.6.RELEASE
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Finchley.SR2
+ pom
+ import
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/spring-cloud-gateway/spring-cloud-producer-1/src/main/java/com/neo/ProducerApplication.java b/spring-cloud-gateway/spring-cloud-producer-1/src/main/java/com/neo/ProducerApplication.java
new file mode 100644
index 0000000..d6275cd
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-producer-1/src/main/java/com/neo/ProducerApplication.java
@@ -0,0 +1,14 @@
+package com.neo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+public class ProducerApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ProducerApplication.class, args);
+ }
+}
diff --git a/spring-cloud-gateway/spring-cloud-producer-1/src/main/java/com/neo/controller/HelloController.java b/spring-cloud-gateway/spring-cloud-producer-1/src/main/java/com/neo/controller/HelloController.java
new file mode 100644
index 0000000..0f7ff7b
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-producer-1/src/main/java/com/neo/controller/HelloController.java
@@ -0,0 +1,19 @@
+package com.neo.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class HelloController {
+
+ @RequestMapping("/hello")
+ public String index() {
+ return "hello world smile!";
+ }
+
+ @RequestMapping("/foo")
+ public String foo(String foo) {
+ return "hello "+foo+"!!";
+ }
+}
\ No newline at end of file
diff --git a/spring-cloud-gateway/spring-cloud-producer-1/src/main/resources/application.properties b/spring-cloud-gateway/spring-cloud-producer-1/src/main/resources/application.properties
new file mode 100644
index 0000000..5086230
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-producer-1/src/main/resources/application.properties
@@ -0,0 +1,4 @@
+spring.application.name=spring-cloud-producer
+server.port=9001
+eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
+
diff --git a/spring-cloud-gateway/spring-cloud-producer-1/src/test/java/com/neo/ProducerApplicationTests.java b/spring-cloud-gateway/spring-cloud-producer-1/src/test/java/com/neo/ProducerApplicationTests.java
new file mode 100644
index 0000000..677161e
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-producer-1/src/test/java/com/neo/ProducerApplicationTests.java
@@ -0,0 +1,16 @@
+package com.neo;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class ProducerApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
diff --git a/spring-cloud-gateway/spring-cloud-producer/pom.xml b/spring-cloud-gateway/spring-cloud-producer/pom.xml
new file mode 100644
index 0000000..ac0e3bb
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-producer/pom.xml
@@ -0,0 +1,52 @@
+
+
+ 4.0.0
+ spring-cloud-producer
+ jar
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.6.RELEASE
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Finchley.SR2
+ pom
+ import
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/spring-cloud-gateway/spring-cloud-producer/src/main/java/com/neo/ProducerApplication.java b/spring-cloud-gateway/spring-cloud-producer/src/main/java/com/neo/ProducerApplication.java
new file mode 100644
index 0000000..d6275cd
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-producer/src/main/java/com/neo/ProducerApplication.java
@@ -0,0 +1,14 @@
+package com.neo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+public class ProducerApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ProducerApplication.class, args);
+ }
+}
diff --git a/spring-cloud-gateway/spring-cloud-producer/src/main/java/com/neo/controller/HelloController.java b/spring-cloud-gateway/spring-cloud-producer/src/main/java/com/neo/controller/HelloController.java
new file mode 100644
index 0000000..e2cfa68
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-producer/src/main/java/com/neo/controller/HelloController.java
@@ -0,0 +1,20 @@
+package com.neo.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class HelloController {
+
+ @RequestMapping("/hello")
+ public String index() {
+ return "hello world!";
+ }
+
+ @RequestMapping("/foo")
+ public String foo(String foo) {
+ return "hello "+foo+"!";
+ }
+
+}
\ No newline at end of file
diff --git a/spring-cloud-gateway/spring-cloud-producer/src/main/resources/application.properties b/spring-cloud-gateway/spring-cloud-producer/src/main/resources/application.properties
new file mode 100644
index 0000000..7994abc
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-producer/src/main/resources/application.properties
@@ -0,0 +1,4 @@
+spring.application.name=spring-cloud-producer
+server.port=9000
+eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
+
diff --git a/spring-cloud-gateway/spring-cloud-producer/src/test/java/com/neo/ProducerApplicationTests.java b/spring-cloud-gateway/spring-cloud-producer/src/test/java/com/neo/ProducerApplicationTests.java
new file mode 100644
index 0000000..677161e
--- /dev/null
+++ b/spring-cloud-gateway/spring-cloud-producer/src/test/java/com/neo/ProducerApplicationTests.java
@@ -0,0 +1,16 @@
+package com.neo;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class ProducerApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}