Spring Cloud


Table of Contents

1. Features
I. Cloud Native Applications
2. Spring Cloud Context: Application Context Services
2.1. The Bootstrap Application Context
2.2. Application Context Hierarchies
2.3. Changing the Location of Bootstrap Properties
2.4. Overriding the Values of Remote Properties
2.5. Customizing the Bootstrap Configuration
2.6. Customizing the Bootstrap Property Sources
2.7. Environment Changes
2.8. Refresh Scope
2.9. Encryption and Decryption
2.10. Endpoints
3. Spring Cloud Commons: Common Abstractions
3.1. @EnableDiscoveryClient
3.1.1. Health Indicator
3.2. ServiceRegistry
3.2.1. ServiceRegistry Auto-Registration
3.2.2. Service Registry Actuator Endpoint
3.3. Spring RestTemplate as a Load Balancer Client
3.4. Spring WebClient as a Load Balancer Client
3.4.1. Retrying Failed Requests
3.5. Multiple RestTemplate objects
3.6. Spring WebFlux WebClient as a Load Balancer Client
3.7. Ignore Network Interfaces
3.8. HTTP Client Factories
3.9. Enabled Features
3.9.1. Feature types
3.9.2. Declaring features
II. Spring Cloud Config
4. Quick Start
4.1. Client Side Usage
5. Spring Cloud Config Server
5.1. Environment Repository
5.1.1. Git Backend
Placeholders in Git URI
Pattern Matching and Multiple Repositories
Authentication
Authentication with AWS CodeCommit
Git SSH configuration using properties
Placeholders in Git Search Paths
Force pull in Git Repositories
5.1.2. Version Control Backend Filesystem Use
5.1.3. File System Backend
5.1.4. Vault Backend
Multiple Properties Sources
5.1.5. Sharing Configuration With All Applications
File Based Repositories
Vault Server
5.1.6. JDBC Backend
5.1.7. Composite Environment Repositories
Custom Composite Environment Repositories
5.1.8. Property Overrides
5.2. Health Indicator
5.3. Security
5.4. Encryption and Decryption
5.5. Key Management
5.6. Creating a Key Store for Testing
5.7. Using Multiple Keys and Key Rotation
5.8. Serving Encrypted Properties
6. Serving Alternative Formats
7. Serving Plain Text
8. Embedding the Config Server
9. Push Notifications and Spring Cloud Bus
10. Spring Cloud Config Client
10.1. Config First Bootstrap
10.2. Discovery First Bootstrap
10.3. Config Client Fail Fast
10.4. Config Client Retry
10.5. Locating Remote Configuration Resources
10.6. Security
10.6.1. Health Indicator
10.6.2. Providing A Custom RestTemplate
10.6.3. Vault
10.7. Vault
10.7.1. Nested Keys In Vault
III. Spring Cloud Netflix
11. Service Discovery: Eureka Clients
11.1. How to Include Eureka Client
11.2. Registering with Eureka
11.3. Authenticating with the Eureka Server
11.4. Status Page and Health Indicator
11.5. Registering a Secure Application
11.6. Eureka’s Health Checks
11.7. Eureka Metadata for Instances and Clients
11.7.1. Using Eureka on Cloudfoundry
11.7.2. Using Eureka on AWS
11.7.3. Changing the Eureka Instance ID
11.8. Using the EurekaClient
11.8.1. EurekaClient without Jersey
11.9. Alternatives to the native Netflix EurekaClient
11.10. Why is it so Slow to Register a Service?
11.11. Zones
12. Service Discovery: Eureka Server
12.1. How to Include Eureka Server
12.2. How to Run a Eureka Server
12.3. High Availability, Zones and Regions
12.4. Standalone Mode
12.5. Peer Awareness
12.6. Prefer IP Address
13. Circuit Breaker: Hystrix Clients
13.1. How to Include Hystrix
13.2. Propagating the Security Context or using Spring Scopes
13.3. Health Indicator
13.4. Hystrix Metrics Stream
14. Circuit Breaker: Hystrix Dashboard
15. Hystrix Timeouts And Ribbon Clients
15.1. How to Include Hystrix Dashboard
15.2. Turbine
15.3. Turbine Stream
16. Client Side Load Balancer: Ribbon
16.1. How to Include Ribbon
16.2. Customizing the Ribbon Client
16.3. Customizing default for all Ribbon Clients
16.4. Customizing the Ribbon Client using properties
16.5. Using Ribbon with Eureka
16.6. Example: How to Use Ribbon Without Eureka
16.7. Example: Disable Eureka use in Ribbon
16.8. Using the Ribbon API Directly
16.9. Caching of Ribbon Configuration
16.10. How to Configure Hystrix thread pools
16.11. How to Provide a Key to Ribbon’s IRule
17. External Configuration: Archaius
18. Router and Filter: Zuul
18.1. How to Include Zuul
18.2. Embedded Zuul Reverse Proxy
18.3. Zuul Http Client
18.4. Cookies and Sensitive Headers
18.5. Ignored Headers
18.6. Management Endpoints
18.6.1. Routes Endpoint
18.6.2. Filters Endpoint
18.7. Strangulation Patterns and Local Forwards
18.8. Uploading Files through Zuul
18.9. Query String Encoding
18.10. Plain Embedded Zuul
18.11. Disable Zuul Filters
18.12. Providing Hystrix Fallbacks For Routes
18.13. Zuul Timeouts
18.14. Rewriting Location header
18.15. Zuul Developer Guide
18.15.1. The Zuul Servlet
18.15.2. Zuul RequestContext
18.15.3. @EnableZuulProxy vs. @EnableZuulServer
18.15.4. @EnableZuulServer Filters
18.15.5. @EnableZuulProxy Filters
18.15.6. Custom Zuul Filter examples
18.15.7. How to Write a Pre Filter
18.15.8. How to Write a Route Filter
18.15.9. How to Write a Post Filter
18.15.10. How Zuul Errors Work
18.15.11. Zuul Eager Application Context Loading
19. Polyglot support with Sidecar
20. Metrics Backend: Atlas
20.1. Using Atlas
21. Retrying Failed Requests
21.1. BackOff Policies
21.2. Configuration
21.2.1. Zuul
22. HTTP Clients
IV. Spring Cloud OpenFeign
23. Declarative REST Client: Feign
23.1. How to Include Feign
23.2. Overriding Feign Defaults
23.3. Creating Feign Clients Manually
23.4. Feign Hystrix Support
23.5. Feign Hystrix Fallbacks
23.6. Feign and @Primary
23.7. Feign Inheritance Support
23.8. Feign request/response compression
23.9. Feign logging
V. Spring Cloud Stream
24. Introducing Spring Cloud Stream
25. Main Concepts
25.1. Application Model
25.1.1. Fat JAR
25.2. The Binder Abstraction
25.3. Persistent Publish-Subscribe Support
25.4. Consumer Groups
25.5. Consumer Types
25.5.1. Durability
25.6. Partitioning Support
26. Programming Model
26.1. Declaring and Binding Producers and Consumers
26.1.1. Triggering Binding Via @EnableBinding
26.1.2. @Input and @Output
Customizing Channel Names
Source, Sink, and Processor
26.1.3. Accessing Bound Channels
Injecting the Bound Interfaces
Injecting Channels Directly
26.1.4. Producing and Consuming Messages
Native Spring Integration Support
Spring Integration Error Channel Support
Message Channel Binders and Error Channels
Using @StreamListener for Automatic Content Type Handling
Using @StreamListener for dispatching messages to multiple methods
Using Polled Consumers
26.1.5. Reactive Programming Support
Reactor-based handlers
Reactive Sources
26.1.6. Aggregation
Configuring aggregate application
Configuring binding service properties for non self contained aggregate application
27. Binders
27.1. Producers and Consumers
27.2. Binder SPI
27.3. Binder Detection
27.3.1. Classpath Detection
27.4. Multiple Binders on the Classpath
27.5. Connecting to Multiple Systems
27.6. Binder configuration properties
28. Configuration Options
28.1. Spring Cloud Stream Properties
28.2. Binding Properties
28.2.1. Properties for Use of Spring Cloud Stream
28.2.2. Consumer properties
28.2.3. Producer Properties
28.3. Using dynamically bound destinations
29. Content Type and Transformation
29.1. MIME types
29.2. Channel contentType and Message Headers
29.3. ContentType handling for output channels
29.4. ContentType handling for input channels
29.5. Customizing message conversion
29.6. @StreamListener and Message Conversion
30. Schema evolution support
30.1. Apache Avro Message Converters
30.2. Converters with schema support
30.3. Schema Registry Support
30.4. Schema Registry Server
30.4.1. Schema Registry Server API
POST /
GET /{subject}/{format}/{version}
GET /{subject}/{format}
GET /schemas/{id}
DELETE /{subject}/{format}/{version}
DELETE /schemas/{id}
DELETE /{subject}
30.5. Schema Registry Client
30.5.1. Using Confluent’s Schema Registry
30.5.2. Schema Registry Client properties
30.6. Avro Schema Registry Client Message Converters
30.6.1. Avro Schema Registry Message Converter properties
30.7. Schema Registration and Resolution
30.7.1. Schema Registration Process (Serialization)
30.7.2. Schema Resolution Process (Deserialization)
31. Inter-Application Communication
31.1. Connecting Multiple Application Instances
31.2. Instance Index and Instance Count
31.3. Partitioning
31.3.1. Configuring Output Bindings for Partitioning
Configuring Input Bindings for Partitioning
32. Testing
32.1. Disabling the test binder autoconfiguration
33. Health Indicator
34. Metrics Emitter
35. Samples
36. Getting Started
36.1. Deploying Stream applications on CloudFoundry
VI. Binder Implementations
37. Apache Kafka Binder
37.1. Usage
37.2. Apache Kafka Binder Overview
37.3. Configuration Options
37.3.1. Kafka Binder Properties
37.3.2. Kafka Consumer Properties
37.3.3. Kafka Producer Properties
37.3.4. Usage examples
Example: Setting autoCommitOffset false and relying on manual acking.
Example: security configuration
Example: Pausing and Resuming the Consumer
Using the binder with Apache Kafka 0.10
Excluding Kafka broker jar from the classpath of the binder based application
37.4. Error Channels
37.5. Kafka Metrics
37.6. Dead-Letter Topic Processing
37.7. Partitioning with the Kafka Binder
38. Apache Kafka Streams Binder
38.1. Usage
38.2. Kafka Streams Binder Overview
38.2.1. Streams DSL
38.3. Configuration Options
38.3.1. Kafka Streams Properties
38.3.2. TimeWindow properties:
38.4. Multiple Input Bindings
38.4.1. Multiple Input Bindings as a Sink
38.4.2. Multiple Input Bindings as a Processor
38.5. Multiple Output Bindings (aka Branching)
38.6. Message Conversion
38.6.1. Outbound serialization
38.6.2. Inbound Deserialization
38.7. Error Handling
38.7.1. Handling Deserialization Exceptions
38.7.2. Handling Non-Deserialization Exceptions
38.8. Interactive Queries
39. RabbitMQ Binder
39.1. Usage
39.2. RabbitMQ Binder Overview
39.3. Configuration Options
39.3.1. RabbitMQ Binder Properties
39.3.2. RabbitMQ Consumer Properties
39.3.3. Rabbit Producer Properties
39.4. Retry With the RabbitMQ Binder
39.4.1. Overview
39.4.2. Putting it All Together
39.5. Error Channels
39.6. Dead-Letter Queue Processing
39.6.1. Non-Partitioned Destinations
39.6.2. Partitioned Destinations
republishToDlq=false
republishToDlq=true
39.7. Partitioning with the RabbitMQ Binder
VII. Spring Cloud Bus
40. Quick Start
41. Addressing an Instance
42. Addressing all instances of a service
43. Service ID must be unique
44. Customizing the Message Broker
45. Tracing Bus Events
46. Broadcasting Your Own Events
46.1. Registering events in custom packages
VIII. Spring Cloud Sleuth
47. Introduction
47.1. Terminology
47.2. Purpose
47.2.1. Distributed tracing with Zipkin
47.2.2. Visualizing errors
47.2.3. Distributed tracing with Brave
47.2.4. Live examples
47.2.5. Log correlation
JSON Logback with Logstash
47.2.6. Propagating Span Context
Baggage vs. Span Tags
47.3. Adding to the project
47.3.1. Only Sleuth (log correlation)
47.3.2. Sleuth with Zipkin via HTTP
47.3.3. Sleuth with Zipkin via RabbitMQ or Kafka
48. Additional resources
49. Features
49.1. Introduction to Brave
49.1.1. Tracing
49.1.2. Tracing
49.1.3. Local Tracing
49.1.4. Customizing spans
49.1.5. Implicitly looking up the current span
49.1.6. RPC tracing
One-Way tracing
50. Sampling
50.1. Declarative sampling
50.2. Custom sampling
50.3. Sampling in Spring Cloud Sleuth
51. Propagation
51.1. Propagating extra fields
51.1.1. Prefixed fields
51.1.2. Extracting a propagated context
51.1.3. Sharing span IDs between client and server
51.1.4. Implementing Propagation
52. Current Tracing Component
53. Current Span
53.1. Setting a span in scope manually
54. Instrumentation
55. Span lifecycle
55.1. Creating and finishing spans
55.2. Continuing spans
55.3. Creating spans with an explicit parent
56. Naming spans
56.1. @SpanName annotation
56.2. toString() method
57. Managing spans with annotations
57.1. Rationale
57.2. Creating new spans
57.3. Continuing spans
57.4. More advanced tag setting
57.4.1. Custom extractor
57.4.2. Resolving expressions for value
57.4.3. Using toString method
58. Customizations
58.1. Spring Integration
58.2. HTTP
58.3. TraceFilter
58.4. Custom service name
58.5. Customization of reported spans
58.6. Host locator
59. Sending spans to Zipkin
60. Zipkin Stream Span Consumer
61. Integrations
61.1. OpenTracing
61.2. Runnable and Callable
61.3. Hystrix
61.3.1. Custom Concurrency Strategy
61.3.2. Manual Command setting
61.4. RxJava
61.5. HTTP integration
61.5.1. HTTP Filter
61.5.2. HandlerInterceptor
61.5.3. Async Servlet support
61.5.4. WebFlux support
61.6. HTTP client integration
61.6.1. Synchronous Rest Template
61.6.2. Asynchronous Rest Template
Multiple Asynchronous Rest Templates
61.6.3. WebClient
61.6.4. Traverson
61.7. Feign
61.8. Asynchronous communication
61.8.1. @Async annotated methods
61.8.2. @Scheduled annotated methods
61.8.3. Executor, ExecutorService and ScheduledExecutorService
Customization of Executors
61.9. Messaging
61.10. Zuul
62. Running examples
IX. Spring Cloud Consul
63. Install Consul
64. Consul Agent
65. Service Discovery with Consul
65.1. How to activate
65.2. Registering with Consul
65.3. HTTP Health Check
65.3.1. Metadata and Consul tags
65.3.2. Making the Consul Instance ID Unique
65.4. Looking up services
65.4.1. Using Ribbon
65.4.2. Using the DiscoveryClient
66. Distributed Configuration with Consul
66.1. How to activate
66.2. Customizing
66.3. Config Watch
66.4. YAML or Properties with Config
66.5. git2consul with Config
66.6. Fail Fast
67. Consul Retry
68. Spring Cloud Bus with Consul
68.1. How to activate
69. Circuit Breaker with Hystrix
70. Hystrix metrics aggregation with Turbine and Consul
X. Spring Cloud Zookeeper
71. Install Zookeeper
72. Service Discovery with Zookeeper
72.1. How to activate
72.2. Registering with Zookeeper
72.3. Using the DiscoveryClient
73. Using Spring Cloud Zookeeper with Spring Cloud Netflix Components
73.1. Ribbon with Zookeeper
74. Spring Cloud Zookeeper and Service Registry
74.1. Instance Status
75. Zookeeper Dependencies
75.1. Using the Zookeeper Dependencies
75.2. How to activate Zookeeper Dependencies
75.3. Setting up Zookeeper Dependencies
75.3.1. Aliases
75.3.2. Path
75.3.3. Load balancer type
75.3.4. Content-Type template and version
75.3.5. Default headers
75.3.6. Obligatory dependencies
75.3.7. Stubs
75.4. Configuring Spring Cloud Zookeeper Dependencies
76. Spring Cloud Zookeeper Dependency Watcher
76.1. How to activate
76.2. Registering a listener
76.3. Presence Checker
77. Distributed Configuration with Zookeeper
77.1. How to activate
77.2. Customizing
77.3. ACLs
XI. Spring Cloud Security
78. Quickstart
78.1. OAuth2 Single Sign On
78.2. OAuth2 Protected Resource
79. More Detail
79.1. Single Sign On
79.2. Token Relay
79.2.1. Client Token Relay
79.2.2. Client Token Relay in Zuul Proxy
79.2.3. Resource Server Token Relay
80. Configuring Authentication Downstream of a Zuul Proxy
XII. Spring Cloud for Cloud Foundry
81. Discovery
82. Single Sign On
XIII. Spring Cloud Contract
83. Spring Cloud Contract
84. Spring Cloud Contract Verifier Introduction
84.1. Why a Contract Verifier?
84.1.1. Testing issues
84.2. Purposes
84.3. How It Works
84.3.1. Defining the contract
84.3.2. Client Side
84.3.3. Server Side
84.4. Step-by-step Guide to Consumer Driven Contracts (CDC)
84.4.1. Technical note
84.4.2. Consumer side (Loan Issuance)
84.4.3. Producer side (Fraud Detection server)
84.4.4. Consumer Side (Loan Issuance) Final Step
84.5. Dependencies
84.6. Additional Links
84.6.1. Spring Cloud Contract video
84.6.2. Readings
84.7. Samples
85. Spring Cloud Contract FAQ
85.1. Why use Spring Cloud Contract Verifier and not X ?
85.2. I don’t want to write a contract in Groovy!
85.3. What is this value(consumer(), producer()) ?
85.4. How to do Stubs versioning?
85.4.1. API Versioning
85.4.2. JAR versioning
85.4.3. Dev or prod stubs
85.5. Common repo with contracts
85.5.1. Repo structure
85.5.2. Workflow
85.5.3. Consumer
85.5.4. Producer
85.5.5. How can I define messaging contracts per topic not per producer?
For Maven Project
For Gradle Project
85.6. Can I have multiple base classes for tests?
85.7. How can I debug the request/response being sent by the generated tests client?
85.7.1. How can I debug the mapping/request/response being sent by WireMock?
85.7.2. How can I see what got registered in the HTTP server stub?
85.7.3. Can I reference the request from the response?
85.7.4. Can I reference text from file?
86. Spring Cloud Contract Verifier Setup
86.1. Gradle Project
86.1.1. Prerequisites
86.1.2. Add Gradle Plugin with Dependencies
86.1.3. Gradle and Rest Assured 2.0
86.1.4. Snapshot Versions for Gradle
86.1.5. Add stubs
86.1.6. Run the Plugin
86.1.7. Default Setup
86.1.8. Configure Plugin
86.1.9. Configuration Options
86.1.10. Single Base Class for All Tests
86.1.11. Different Base Classes for Contracts
86.1.12. Invoking Generated Tests
86.1.13. Spring Cloud Contract Verifier on the Consumer Side
86.2. Maven Project
86.2.1. Add maven plugin
86.2.2. Maven and Rest Assured 2.0
86.2.3. Snapshot versions for Maven
86.2.4. Add stubs
86.2.5. Run plugin
86.2.6. Configure plugin
86.2.7. Configuration Options
86.2.8. Single Base Class for All Tests
86.2.9. Different base classes for contracts
86.2.10. Invoking generated tests
86.2.11. Maven Plugin and STS
86.3. Stubs and Transitive Dependencies
86.4. CI Server setup
86.5. Scenarios
86.6. Docker Project
86.6.1. Short intro to Maven, JARs and Binary storage
86.6.2. How it works
Environment Variables
86.6.3. Example of usage
86.6.4. Server side (nodejs)
87. Spring Cloud Contract Verifier Messaging
87.1. Integrations
87.2. Manual Integration Testing
87.3. Publisher-Side Test Generation
87.3.1. Scenario 1: No Input Message
87.3.2. Scenario 2: Output Triggered by Input
87.3.3. Scenario 3: No Output Message
87.4. Consumer Stub Generation
88. Spring Cloud Contract Stub Runner
88.1. Snapshot versions
88.2. Publishing Stubs as JARs
88.3. Stub Runner Core
88.3.1. Retrieving stubs
Stub downloading
Classpath scanning
88.3.2. Running stubs
Limitations
Running using main app
HTTP Stubs
Viewing registered mappings
Messaging Stubs
88.4. Stub Runner JUnit Rule
88.4.1. Maven settings
88.4.2. Providing fixed ports
88.4.3. Fluent API
88.4.4. Stub Runner with Spring
88.5. Stub Runner Spring Cloud
88.5.1. Stubbing Service Discovery
Test profiles and service discovery
88.5.2. Additional Configuration
88.6. Stub Runner Boot Application
88.6.1. How to use it?
Stub Runner Server
Stub Runner Server Fat Jar
Spring Cloud CLI
88.6.2. Endpoints
HTTP
Messaging
88.6.3. Example
88.6.4. Stub Runner Boot with Service Discovery
88.7. Stubs Per Consumer
88.8. Common
88.8.1. Common Properties for JUnit and Spring
88.8.2. Stub Runner Stubs IDs
88.9. Stub Runner Docker
88.9.1. How to use it
88.9.2. Example of client side usage in a non JVM project
89. Stub Runner for Messaging
89.1. Stub triggering
89.1.1. Trigger by Label
89.1.2. Trigger by Group and Artifact Ids
89.1.3. Trigger by Artifact Ids
89.1.4. Trigger All Messages
89.2. Stub Runner Integration
89.2.1. Adding the Runner to the Project
89.2.2. Disabling the functionality
Scenario 1 (no input message)
Scenario 2 (output triggered by input)
Scenario 3 (input with no output)
89.3. Stub Runner Stream
89.3.1. Adding the Runner to the Project
89.3.2. Disabling the functionality
Scenario 1 (no input message)
Scenario 2 (output triggered by input)
Scenario 3 (input with no output)
89.4. Stub Runner Spring AMQP
89.4.1. Adding the Runner to the Project
Triggering the message
Spring AMQP Test Configuration
90. Contract DSL
90.1. Limitations
90.2. Common Top-Level elements
90.2.1. Description
90.2.2. Name
90.2.3. Ignoring Contracts
90.2.4. Passing Values from Files
90.2.5. HTTP Top-Level Elements
90.3. Request
90.4. Response
90.5. Dynamic properties
90.5.1. Dynamic properties inside the body
90.5.2. Regular expressions
90.5.3. Passing Optional Parameters
90.5.4. Executing Custom Methods on the Server Side
90.5.5. Referencing the Request from the Response
90.5.6. Registering Your Own WireMock Extension
90.5.7. Dynamic Properties in the Matchers Sections
90.6. JAX-RS Support
90.7. Async Support
90.8. Working with Context Paths
90.9. Messaging Top-Level Elements
90.9.1. Output Triggered by a Method
90.9.2. Output Triggered by a Message
90.9.3. Consumer/Producer
90.9.4. Common
90.10. Multiple Contracts in One File
91. Customization
91.1. Extending the DSL
91.1.1. Common JAR
91.1.2. Adding the Dependency to the Project
91.1.3. Test the Dependency in the Project’s Dependencies
91.1.4. Test a Dependency in the Plugin’s Dependencies
91.1.5. Referencing classes in DSLs
92. Using the Pluggable Architecture
92.1. Custom Contract Converter
92.1.1. Pact Converter
92.1.2. Pact Contract
92.1.3. Pact for Producers
92.1.4. Pact for Consumers
92.2. Using the Custom Test Generator
92.3. Using the Custom Stub Generator
92.4. Using the Custom Stub Runner
92.5. Using the Custom Stub Downloader
93. Spring Cloud Contract WireMock
93.1. Registering Stubs Automatically
93.2. Using Files to Specify the Stub Bodies
93.3. Alternative: Using JUnit Rules
93.4. Relaxed SSL Validation for Rest Template
93.5. WireMock and Spring MVC Mocks
93.6. Customization of WireMock configuration
93.7. Generating Stubs using REST Docs
93.8. Generating Contracts by Using REST Docs
94. Migrations
94.1. 1.0.x → 1.1.x
94.1.1. New structure of generated stubs
94.2. 1.1.x → 1.2.x
94.2.1. Custom HttpServerStub
94.2.2. New packages for generated tests
94.2.3. New Methods in TemplateProcessor
94.2.4. RestAssured 3.0
94.3. 1.2.x → 2.0.x
94.3.1. No Camel support
95. Links
XIV. Spring Cloud Vault
96. Quick Start
97. Client Side Usage
97.1. Authentication
98. Authentication methods
98.1. Token authentication
98.2. AppId authentication
98.2.1. Custom UserId
98.3. AppRole authentication
98.4. AWS-EC2 authentication
98.5. AWS-IAM authentication
98.6. TLS certificate authentication
98.7. Cubbyhole authentication
98.8. Kubernetes authentication
99. Secret Backends
99.1. Generic Backend
99.2. Consul
99.3. RabbitMQ
99.4. AWS
100. Database backends
100.1. Database
100.2. Apache Cassandra
100.3. MongoDB
100.4. MySQL
100.5. PostgreSQL
101. Configure PropertySourceLocator behavior
102. Service Registry Configuration
103. Vault Client Fail Fast
104. Vault Client SSL configuration
105. Lease lifecycle management (renewal and revocation)
XV. Spring Cloud Gateway
106. How to Include Spring Cloud Gateway
107. Glossary
108. How It Works
109. Route Predicate Factories
109.1. After Route Predicate Factory
109.2. Before Route Predicate Factory
109.3. Between Route Predicate Factory
109.4. Cookie Route Predicate Factory
109.5. Header Route Predicate Factory
109.6. Host Route Predicate Factory
109.7. Method Route Predicate Factory
109.8. Path Route Predicate Factory
109.9. Query Route Predicate Factory
109.10. RemoteAddr Route Predicate Factory
110. GatewayFilter Factories
110.1. AddRequestHeader GatewayFilter Factory
110.2. AddRequestParameter GatewayFilter Factory
110.3. AddResponseHeader GatewayFilter Factory
110.4. Hystrix GatewayFilter Factory
110.5. PrefixPath GatewayFilter Factory
110.6. PreserveHostHeader GatewayFilter Factory
110.7. RequestRateLimiter GatewayFilter Factory
110.8. RedirectTo GatewayFilter Factory
110.9. RemoveNonProxyHeaders GatewayFilter Factory
110.10. RemoveRequestHeader GatewayFilter Factory
110.11. RemoveResponseHeader GatewayFilter Factory
110.12. RewritePath GatewayFilter Factory
110.13. SaveSession GatewayFilter Factory
110.14. SecureHeaders GatewayFilter Factory
110.15. SetPath GatewayFilter Factory
110.16. SetResponseHeader GatewayFilter Factory
110.17. SetStatus GatewayFilter Factory
110.18. StripPrefix GatewayFilter Factory
111. Global Filters
111.1. Combined Global Filter and GatewayFilter Ordering
111.2. Forward Routing Filter
111.3. LoadBalancerClient Filter
111.4. Netty Routing Filter
111.5. Netty Write Response Filter
111.6. RouteToRequestUrl Filter
111.7. Websocket Routing Filter
112. Configuration
112.1. Fluent Java Routes API
112.2. DiscoveryClient Route Definition Locator
113. Actuator API
114. Developer Guide
114.1. Writing Custom Route Predicate Factories
114.2. Writing Custom GatewayFilter Factories
114.3. Writing Custom Global Filters
114.4. Writing Custom Route Locators and Writers
115. Building a Simple Gateway Using Spring MVC
XVI. Appendix: Compendium of Configuration Properties