anchor.diff:  and artifact id `spring-cloud-starter-gateway`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
   for details on setting up your build system with the current Spring Cloud Release Train.
   
  -Include the `@EnableGateway` annotation on any `@Configuration` class to enable Spring Cloud Gateway.
  +If you include the starter, but, for some reason, you do not want the gateway to be enabled, set `spring.cloud.gateway.enabled=false`.
   
   == Glossary
   
  -TODO: document the meaning of terms to follow, like Route, Predicate and Filter
  +* Route: Route the basic building block of the gateway. It is defined by an ID, a destination URI, a collection of predicates and a collection of filters. A route is matched if aggregate predicate is true.
  +* Predicate: This is a http://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html[Java 8 Function Predicate]. The input type is a http://docs.spring.io/spring/docs/5.0.x/javadoc-api/org/springframework/web/server/ServerWebExchange.html[Spring Framework `ServerWebExchange`]. This allows developers to match on anything from the HTTP request, such as headers or parameters.
  +* Filter: These are instances http://docs.spring.io/spring/docs/5.0.x/javadoc-api/org/springframework/web/server/WebFilter.html[Spring Framework `WebFilter`] constructed in with a specific factory. Here, requests and responses can be modified before or after sending the downstream request.
   
   [[gateway-how-it-works]]
   == How It Works
  
positive.code: 
  == Global Filters
  
  TODO: document Global Filters
  
  == Configuration
  
  
negative.code: ----
  
  This will prefix `/mypath` to the path of all matching requests. So a request to `/hello`, would be sent to `/mypath/hello`.
  
  === RequestRateLimiter WebFilter Factory
  
  The RequestRateLimiter WebFilter Factory takes three parameters: `replenishRate`, `burstCapacity` & `keyResolverName`.
  
  `replenishRate` is how many requests per second do you want a user to be allowed to do.
  
  `burstCapacity` TODO: document burst capacity
  
  `keyResolverName` is the name of a bean that implements the `KeyResolver` interface.
  
  .KeyResolver.java
  [source,java]
  ----
  public interface KeyResolver {
  	Mono<String> resolve(ServerWebExchange exchange);
  }
  ----
  
  The `KeyResolver` interface allows pluggable strategies to derive the key for limiting requests. In future milestones, there will be some `KeyResolver` implementations.
  
  The redis implementation is based off of work done at https://stripe.com/blog/rate-limiters[Stripe]. It requires the use of the `spring-boot-starter-data-redis-reactive` Spring Boot starter.
  
  
  .application.yml
  [source,yaml]
  ----
  spring:
    cloud:
      gateway:
        routes:
        # =====================================
        - id: requestratelimiter_route
          uri: http://example.org
          filters:
          - RequestRateLimiter=10, 20, userKeyResolver
  ----
  
  .Config.java
  [source,java]
  ----
  @Bean
  KeyResolver userKeyResolver() {
      return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("user"));
  }
  ----
  
  This defines a request rate limit of 10 per user. The `KeyResolver` is a simple one that gets the `user` request parameter (note: this is not recommended for production).
  
  === RedirectTo WebFilter Factory
  The RedirectTo WebFilter Factory takes a `status` and a `url` parameter. The status should be a 300 series redirect http code, such as 301. The url should be a valid url. This will be the value of the `Location` header.
  