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. Logging Configuration
2.8. Environment Changes
2.9. Refresh Scope
2.10. Encryption and Decryption
2.11. Endpoints
3. Spring Cloud Commons: Common Abstractions
3.1. @EnableDiscoveryClient
3.1.1. Health Indicator
3.2. ServiceRegistry
3.2.1. ServiceRegistry Auto-Registration
ServiceRegistry Auto-Registration Events
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
3.10. Spring Cloud Compatibility Verification
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
Skipping SSL Certificate Validation
Setting HTTP Connection Timeout
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
Deleting untracked branches in Git Repositories
Git Refresh Rate
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. Accessing Backends Through a Proxy
5.1.6. Sharing Configuration With All Applications
File Based Repositories
Vault Server
5.1.7. JDBC Backend
5.1.8. Composite Environment Repositories
Custom Composite Environment Repositories
5.1.9. 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. Specifying Multiple Urls for the Config Server
10.7. Configuring Read Timeouts
10.8. Security
10.8.1. Health Indicator
10.8.2. Providing A Custom RestTemplate
10.8.3. Vault
10.9. 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 Cloud Foundry
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
11.12. Refreshing Eureka Clients
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. When to Prefer IP Address
12.7. Securing The Eureka Server
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 the Hystrix Dashboard
15.2. Turbine
15.2.1. Clusters Endpoint
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 the Default for All Ribbon Clients
16.4. Customizing the Ribbon Client by Setting 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. Request URI Encoding
18.11. Plain Embedded Zuul
18.12. Disable Zuul Filters
18.13. Providing Hystrix Fallbacks For Routes
18.14. Zuul Timeouts
18.15. Rewriting the Location header
18.16. Enabling Cross Origin Requests
18.17. Metrics
18.18. Zuul Developer Guide
18.18.1. The Zuul Servlet
18.18.2. Zuul RequestContext
18.18.3. @EnableZuulProxy vs. @EnableZuulServer
18.18.4. @EnableZuulServer Filters
18.18.5. @EnableZuulProxy Filters
18.18.6. Custom Zuul Filter Examples
How to Write a Pre Filter
How to Write a Route Filter
How to Write a Post Filter
18.18.7. How Zuul Errors Work
18.18.8. Zuul Eager Application Context Loading
19. Polyglot support with Sidecar
20. Retrying Failed Requests
20.1. BackOff Policies
20.2. Configuration
20.2.1. Zuul
21. HTTP Clients
IV. Spring Cloud OpenFeign
22. Declarative REST Client: Feign
22.1. How to Include Feign
22.2. Overriding Feign Defaults
22.3. Creating Feign Clients Manually
22.4. Feign Hystrix Support
22.5. Feign Hystrix Fallbacks
22.6. Feign and @Primary
22.7. Feign Inheritance Support
22.8. Feign request/response compression
22.9. Feign logging
V. Spring Cloud Stream
23. Quick Start
23.1. Creating a Sample Application by Using Spring Initializr
23.2. Importing the Project into Your IDE
23.3. Adding a Message Handler, Building, and Running
24. What’s New in 2.0?
24.1. New Features and Components
24.2. Notable Enhancements
24.2.1. Both Actuator and Web Dependencies Are Now Optional
24.2.2. Content-type Negotiation Improvements
24.3. Notable Deprecations
24.3.1. Java Serialization (Java Native and Kryo)
24.3.2. Deprecated Classes and Methods
25. Introducing Spring Cloud Stream
26. Main Concepts
26.1. Application Model
26.1.1. Fat JAR
26.2. The Binder Abstraction
26.3. Persistent Publish-Subscribe Support
26.4. Consumer Groups
26.5. Consumer Types
26.5.1. Durability
26.6. Partitioning Support
27. Programming Model
27.1. Destination Binders
27.2. Destination Bindings
27.3. Producing and Consuming Messages
27.3.1. Spring Integration Support
27.3.2. Using @StreamListener Annotation
27.3.3. Using @StreamListener for Content-based routing
27.3.4. Using Polled Consumers
27.4. Error Handling
27.4.1. Application Error Handling
27.4.2. System Error Handling
Drop Failed Messages
DLQ - Dead Letter Queue
Re-queue Failed Messages
27.4.3. Retry Template
27.5. Reactive Programming Support
27.5.1. Reactor-based Handlers
27.5.2. Reactive Sources
28. Binders
28.1. Producers and Consumers
28.2. Binder SPI
28.3. Binder Detection
28.3.1. Classpath Detection
28.4. Multiple Binders on the Classpath
28.5. Connecting to Multiple Systems
28.6. Binding visualization and control
28.7. Binder Configuration Properties
29. Configuration Options
29.1. Binding Service Properties
29.2. Binding Properties
29.2.1. Common Binding Properties
29.2.2. Consumer Properties
29.2.3. Producer Properties
29.3. Using Dynamically Bound Destinations
30. Content Type Negotiation
30.1. Mechanics
30.1.1. Content Type versus Argument Type
30.1.2. Message Converters
30.2. Provided MessageConverters
30.3. User-defined Message Converters
31. Schema Evolution Support
31.1. Schema Registry Client
31.1.1. Schema Registry Client Properties
31.2. Avro Schema Registry Client Message Converters
31.2.1. Avro Schema Registry Message Converter Properties
31.3. Apache Avro Message Converters
31.4. Converters with Schema Support
31.5. Schema Registry Server
31.5.1. Schema Registry Server API
Registering a New Schema
Retrieving an Existing Schema by Subject, Format, and Version
Retrieving an Existing Schema by Subject and Format
Retrieving an Existing Schema by ID
Deleting a Schema by Subject, Format, and Version
Deleting a Schema by ID
Deleting a Schema by Subject
31.5.2. Using Confluent’s Schema Registry
31.6. Schema Registration and Resolution
31.6.1. Schema Registration Process (Serialization)
31.6.2. Schema Resolution Process (Deserialization)
32. Inter-Application Communication
32.1. Connecting Multiple Application Instances
32.2. Instance Index and Instance Count
32.3. Partitioning
32.3.1. Configuring Output Bindings for Partitioning
32.3.2. Configuring Input Bindings for Partitioning
33. Testing
33.1. Disabling the Test Binder Autoconfiguration
34. Health Indicator
35. Metrics Emitter
36. Samples
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 to false and Relying on Manual Acking
Example: Security Configuration
Example: Pausing and Resuming the Consumer
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
38.9. Accessing the underlying KafkaStreams object
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. 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. Bus Endpoints
41.1. Bus Refresh Endpoint
41.2. Bus Env Endpoint
42. Addressing an Instance
43. Addressing All Instances of a Service
44. Service ID Must Be Unique
45. Customizing the Message Broker
46. Tracing Bus Events
47. Broadcasting Your Own Events
47.1. Registering events in custom packages
VIII. Spring Cloud Sleuth
48. Introduction
48.1. Terminology
48.2. Purpose
48.2.1. Distributed Tracing with Zipkin
48.2.2. Visualizing errors
48.2.3. Distributed Tracing with Brave
48.2.4. Live examples
48.2.5. Log correlation
JSON Logback with Logstash
48.2.6. Propagating Span Context
Baggage versus Span Tags
48.3. Adding Sleuth to the Project
48.3.1. Only Sleuth (log correlation)
48.3.2. Sleuth with Zipkin via HTTP
48.3.3. Sleuth with Zipkin over RabbitMQ or Kafka
49. Additional Resources
50. Features
50.1. Introduction to Brave
50.1.1. Tracing
50.1.2. Local Tracing
50.1.3. Customizing Spans
50.1.4. Implicitly Looking up the Current Span
50.1.5. RPC tracing
One-Way tracing
51. Sampling
51.1. Declarative sampling
51.2. Custom sampling
51.3. Sampling in Spring Cloud Sleuth
52. Propagation
52.1. Propagating extra fields
52.1.1. Prefixed fields
52.1.2. Extracting a Propagated Context
52.1.3. Sharing span IDs between Client and Server
52.1.4. Implementing Propagation
53. Current Tracing Component
54. Current Span
54.1. Setting a span in scope manually
55. Instrumentation
56. Span lifecycle
56.1. Creating and finishing spans
56.2. Continuing Spans
56.3. Creating a Span with an explicit Parent
57. Naming spans
57.1. @SpanName Annotation
57.2. toString() method
58. Managing Spans with Annotations
58.1. Rationale
58.2. Creating New Spans
58.3. Continuing Spans
58.4. Advanced Tag Setting
58.4.1. Custom extractor
58.4.2. Resolving Expressions for a Value
58.4.3. Using the toString() method
59. Customizations
59.1. HTTP
59.2. TracingFilter
59.3. Custom service name
59.4. Customization of Reported Spans
59.5. Host Locator
60. Sending Spans to Zipkin
61. Zipkin Stream Span Consumer
62. Integrations
62.1. OpenTracing
62.2. Runnable and Callable
62.3. Hystrix
62.3.1. Custom Concurrency Strategy
62.3.2. Manual Command setting
62.4. RxJava
62.5. HTTP integration
62.5.1. HTTP Filter
62.5.2. HandlerInterceptor
62.5.3. Async Servlet support
62.5.4. WebFlux support
62.5.5. Dubbo RPC support
62.6. HTTP Client Integration
62.6.1. Synchronous Rest Template
62.6.2. Asynchronous Rest Template
Multiple Asynchronous Rest Templates
62.6.3. WebClient
62.6.4. Traverson
62.6.5. Apache HttpClientBuilder and HttpAsyncClientBuilder
62.6.6. Netty HttpClient
62.6.7. UserInfoRestTemplateCustomizer
62.7. Feign
62.8. Asynchronous Communication
62.8.1. @Async Annotated methods
62.8.2. @Scheduled Annotated Methods
62.8.3. Executor, ExecutorService, and ScheduledExecutorService
Customization of Executors
62.9. Messaging
62.9.1. Spring Integration and Spring Cloud Stream
62.9.2. Spring RabbitMq
62.9.3. Spring Kafka
62.10. Zuul
63. Running examples
IX. Spring Cloud Consul
64. Install Consul
65. Consul Agent
66. Service Discovery with Consul
66.1. How to activate
66.2. Registering with Consul
66.3. HTTP Health Check
66.3.1. Metadata and Consul tags
66.3.2. Making the Consul Instance ID Unique
66.4. Looking up services
66.4.1. Using Ribbon
66.4.2. Using the DiscoveryClient
66.5. Consul Catalog Watch
67. Distributed Configuration with Consul
67.1. How to activate
67.2. Customizing
67.3. Config Watch
67.4. YAML or Properties with Config
67.5. git2consul with Config
67.6. Fail Fast
68. Consul Retry
69. Spring Cloud Bus with Consul
69.1. How to activate
70. Circuit Breaker with Hystrix
71. Hystrix metrics aggregation with Turbine and Consul
X. Spring Cloud Zookeeper
72. Install Zookeeper
73. Service Discovery with Zookeeper
73.1. Activating
73.2. Registering with Zookeeper
73.3. Using the DiscoveryClient
74. Using Spring Cloud Zookeeper with Spring Cloud Netflix Components
74.1. Ribbon with Zookeeper
75. Spring Cloud Zookeeper and Service Registry
75.1. Instance Status
76. Zookeeper Dependencies
76.1. Using the Zookeeper Dependencies
76.2. Activating Zookeeper Dependencies
76.3. Setting up Zookeeper Dependencies
76.3.1. Aliases
76.3.2. Path
76.3.3. Load Balancer Type
76.3.4. Content-Type Template and Version
76.3.5. Default Headers
76.3.6. Required Dependencies
76.3.7. Stubs
76.4. Configuring Spring Cloud Zookeeper Dependencies
77. Spring Cloud Zookeeper Dependency Watcher
77.1. Activating
77.2. Registering a Listener
77.3. Using the Presence Checker
78. Distributed Configuration with Zookeeper
78.1. Activating
78.2. Customizing
78.3. Access Control Lists (ACLs)
XI. Spring Cloud Security
79. Quickstart
79.1. OAuth2 Single Sign On
79.2. OAuth2 Protected Resource
80. More Detail
80.1. Single Sign On
80.2. Token Relay
80.2.1. Client Token Relay
80.2.2. Client Token Relay in Zuul Proxy
80.2.3. Resource Server Token Relay
81. Configuring Authentication Downstream of a Zuul Proxy
XII. Spring Cloud for Cloud Foundry
82. Discovery
83. Single Sign On
XIII. Spring Cloud Contract
84. Spring Cloud Contract
85. Spring Cloud Contract Verifier Introduction
85.1. Why a Contract Verifier?
85.1.1. Testing issues
85.2. Purposes
85.3. How It Works
85.3.1. A Three-second Tour
On the Producer Side
On the Consumer Side
85.3.2. A Three-minute Tour
On the Producer Side
On the Consumer Side
85.3.3. Defining the Contract
85.3.4. Client Side
85.3.5. Server Side
85.4. Step-by-step Guide to Consumer Driven Contracts (CDC)
85.4.1. Technical note
85.4.2. Consumer side (Loan Issuance)
85.4.3. Producer side (Fraud Detection server)
85.4.4. Consumer Side (Loan Issuance) Final Step
85.5. Dependencies
85.6. Additional Links
85.6.1. Spring Cloud Contract video
85.6.2. Readings
85.7. Samples
86. Spring Cloud Contract FAQ
86.1. Why use Spring Cloud Contract Verifier and not X ?
86.2. I don’t want to write a contract in Groovy!
86.3. What is this value(consumer(), producer()) ?
86.4. How to do Stubs versioning?
86.4.1. API Versioning
86.4.2. JAR versioning
86.4.3. Dev or prod stubs
86.5. Common repo with contracts
86.5.1. Repo structure
86.5.2. Workflow
86.5.3. Consumer
86.5.4. Producer
86.5.5. How can I define messaging contracts per topic not per producer?
For Maven Project
For Gradle Project
86.6. Do I need a Binary Storage? Can’t I use Git?
86.6.1. Protocol convention
86.6.2. Producer
Keeping contracts with the producer and stubs in an external repository
86.6.3. Consumer
86.7. Can I use the Pact Broker?
86.7.1. Pact Consumer
86.7.2. Producer
86.7.3. Pact Consumer (Producer Contract approach)
86.8. How can I debug the request/response being sent by the generated tests client?
86.8.1. How can I debug the mapping/request/response being sent by WireMock?
86.8.2. How can I see what got registered in the HTTP server stub?
86.8.3. Can I reference text from file?
87. Spring Cloud Contract Verifier Setup
87.1. Gradle Project
87.1.1. Prerequisites
87.1.2. Add Gradle Plugin with Dependencies
87.1.3. Gradle and Rest Assured 2.0
87.1.4. Snapshot Versions for Gradle
87.1.5. Add stubs
87.1.6. Run the Plugin
87.1.7. Default Setup
87.1.8. Configure Plugin
87.1.9. Configuration Options
87.1.10. Single Base Class for All Tests
87.1.11. Different Base Classes for Contracts
87.1.12. Invoking Generated Tests
87.1.13. Pushing stubs to SCM
87.1.14. Spring Cloud Contract Verifier on the Consumer Side
87.2. Maven Project
87.2.1. Add maven plugin
87.2.2. Maven and Rest Assured 2.0
87.2.3. Snapshot versions for Maven
87.2.4. Add stubs
87.2.5. Run plugin
87.2.6. Configure plugin
87.2.7. Configuration Options
87.2.8. Single Base Class for All Tests
87.2.9. Different base classes for contracts
87.2.10. Invoking generated tests
87.2.11. Pushing stubs to SCM
87.2.12. Maven Plugin and STS
87.3. Stubs and Transitive Dependencies
87.4. CI Server setup
87.5. Scenarios
87.6. Docker Project
87.6.1. Short intro to Maven, JARs and Binary storage
87.6.2. How it works
Environment Variables
87.6.3. Example of usage
87.6.4. Server side (nodejs)
88. Spring Cloud Contract Verifier Messaging
88.1. Integrations
88.2. Manual Integration Testing
88.3. Publisher-Side Test Generation
88.3.1. Scenario 1: No Input Message
88.3.2. Scenario 2: Output Triggered by Input
88.3.3. Scenario 3: No Output Message
88.4. Consumer Stub Generation
89. Spring Cloud Contract Stub Runner
89.1. Snapshot versions
89.2. Publishing Stubs as JARs
89.3. Stub Runner Core
89.3.1. Retrieving stubs
Stub downloading
Classpath scanning
89.3.2. Running stubs
Running using main app
HTTP Stubs
Viewing registered mappings
Messaging Stubs
89.4. Stub Runner JUnit Rule
89.4.1. Maven settings
89.4.2. Providing fixed ports
89.4.3. Fluent API
89.4.4. Stub Runner with Spring
89.5. Stub Runner Spring Cloud
89.5.1. Stubbing Service Discovery
Test profiles and service discovery
89.5.2. Additional Configuration
89.6. Stub Runner Boot Application
89.6.1. How to use it?
Stub Runner Server
Stub Runner Server Fat Jar
Spring Cloud CLI
89.6.2. Endpoints
HTTP
Messaging
89.6.3. Example
89.6.4. Stub Runner Boot with Service Discovery
89.7. Stubs Per Consumer
89.8. Common
89.8.1. Common Properties for JUnit and Spring
89.8.2. Stub Runner Stubs IDs
89.9. Stub Runner Docker
89.9.1. How to use it
89.9.2. Example of client side usage in a non JVM project
90. Stub Runner for Messaging
90.1. Stub triggering
90.1.1. Trigger by Label
90.1.2. Trigger by Group and Artifact Ids
90.1.3. Trigger by Artifact Ids
90.1.4. Trigger All Messages
90.2. Stub Runner Integration
90.2.1. Adding the Runner to the Project
90.2.2. Disabling the functionality
Scenario 1 (no input message)
Scenario 2 (output triggered by input)
Scenario 3 (input with no output)
90.3. Stub Runner Stream
90.3.1. Adding the Runner to the Project
90.3.2. Disabling the functionality
Scenario 1 (no input message)
Scenario 2 (output triggered by input)
Scenario 3 (input with no output)
90.4. Stub Runner Spring AMQP
90.4.1. Adding the Runner to the Project
Triggering the message
Spring AMQP Test Configuration
91. Contract DSL
91.1. Limitations
91.2. Common Top-Level elements
91.2.1. Description
91.2.2. Name
91.2.3. Ignoring Contracts
91.2.4. Passing Values from Files
91.2.5. HTTP Top-Level Elements
91.3. Request
91.4. Response
91.5. Dynamic properties
91.5.1. Dynamic properties inside the body
91.5.2. Regular expressions
91.5.3. Passing Optional Parameters
91.5.4. Executing Custom Methods on the Server Side
91.5.5. Referencing the Request from the Response
91.5.6. Registering Your Own WireMock Extension
91.5.7. Dynamic Properties in the Matchers Sections
91.6. JAX-RS Support
91.7. Async Support
91.8. Working with Context Paths
91.9. Working with Web Flux
91.10. Messaging Top-Level Elements
91.10.1. Output Triggered by a Method
91.10.2. Output Triggered by a Message
91.10.3. Consumer/Producer
91.10.4. Common
91.11. Multiple Contracts in One File
91.12. Generating Spring REST Docs snippets from the contracts
92. Customization
92.1. Extending the DSL
92.1.1. Common JAR
92.1.2. Adding the Dependency to the Project
92.1.3. Test the Dependency in the Project’s Dependencies
92.1.4. Test a Dependency in the Plugin’s Dependencies
92.1.5. Referencing classes in DSLs
93. Using the Pluggable Architecture
93.1. Custom Contract Converter
93.1.1. Pact Converter
93.1.2. Pact Contract
93.1.3. Pact for Producers
93.1.4. Pact for Consumers
93.2. Using the Custom Test Generator
93.3. Using the Custom Stub Generator
93.4. Using the Custom Stub Runner
93.5. Using the Custom Stub Downloader
93.6. Using the SCM Stub Downloader
93.7. Using the Pact Stub Downloader
94. Spring Cloud Contract WireMock
94.1. Registering Stubs Automatically
94.2. Using Files to Specify the Stub Bodies
94.3. Alternative: Using JUnit Rules
94.4. Relaxed SSL Validation for Rest Template
94.5. WireMock and Spring MVC Mocks
94.6. Customization of WireMock configuration
94.7. Generating Stubs using REST Docs
94.8. Generating Contracts by Using REST Docs
95. Migrations
95.1. 1.0.x → 1.1.x
95.1.1. New structure of generated stubs
95.2. 1.1.x → 1.2.x
95.2.1. Custom HttpServerStub
95.2.2. New packages for generated tests
95.2.3. New Methods in TemplateProcessor
95.2.4. RestAssured 3.0
95.3. 1.2.x → 2.0.x
95.3.1. No Camel support
96. Links
XIV. Spring Cloud Vault
97. Quick Start
98. Client Side Usage
98.1. Authentication
99. Authentication methods
99.1. Token authentication
99.2. AppId authentication
99.2.1. Custom UserId
99.3. AppRole authentication
99.4. AWS-EC2 authentication
99.5. AWS-IAM authentication
99.6. TLS certificate authentication
99.7. Cubbyhole authentication
99.8. Kubernetes authentication
100. Secret Backends
100.1. Generic Backend
100.2. Versioned Key-Value Backend
100.3. Consul
100.4. RabbitMQ
100.5. AWS
101. Database backends
101.1. Database
101.2. Apache Cassandra
101.3. MongoDB
101.4. MySQL
101.5. PostgreSQL
102. Configure PropertySourceLocator behavior
103. Service Registry Configuration
104. Vault Client Fail Fast
105. Vault Client SSL configuration
106. Lease lifecycle management (renewal and revocation)
XV. Spring Cloud Gateway
107. How to Include Spring Cloud Gateway
108. Glossary
109. How It Works
110. Route Predicate Factories
110.1. After Route Predicate Factory
110.2. Before Route Predicate Factory
110.3. Between Route Predicate Factory
110.4. Cookie Route Predicate Factory
110.5. Header Route Predicate Factory
110.6. Host Route Predicate Factory
110.7. Method Route Predicate Factory
110.8. Path Route Predicate Factory
110.9. Query Route Predicate Factory
110.10. RemoteAddr Route Predicate Factory
110.10.1. Modifying the way remote addresses are resolved
111. GatewayFilter Factories
111.1. AddRequestHeader GatewayFilter Factory
111.2. AddRequestParameter GatewayFilter Factory
111.3. AddResponseHeader GatewayFilter Factory
111.4. DedupeResponseHeader GatewayFilter Factory
111.5. Hystrix GatewayFilter Factory
111.6. PrefixPath GatewayFilter Factory
111.7. PreserveHostHeader GatewayFilter Factory
111.8. RequestRateLimiter GatewayFilter Factory
111.8.1. Redis RateLimiter
111.9. RedirectTo GatewayFilter Factory
111.10. RemoveHopByHopHeadersFilter GatewayFilter Factory
111.11. RemoveRequestHeader GatewayFilter Factory
111.12. RemoveResponseHeader GatewayFilter Factory
111.13. RewritePath GatewayFilter Factory
111.14. RewriteResponseHeader GatewayFilter Factory
111.15. SaveSession GatewayFilter Factory
111.16. SecureHeaders GatewayFilter Factory
111.17. SetPath GatewayFilter Factory
111.18. SetResponseHeader GatewayFilter Factory
111.19. SetStatus GatewayFilter Factory
111.20. StripPrefix GatewayFilter Factory
111.21. Retry GatewayFilter Factory
111.22. Default Filters
112. Global Filters
112.1. Combined Global Filter and GatewayFilter Ordering
112.2. Forward Routing Filter
112.3. LoadBalancerClient Filter
112.4. Netty Routing Filter
112.5. Netty Write Response Filter
112.6. RouteToRequestUrl Filter
112.7. Websocket Routing Filter
112.8. Gateway Metrics Filter
112.9. Making An Exchange As Routed
113. TLS / SSL
113.1. TLS Handshake
114. Configuration
114.1. Fluent Java Routes API
114.2. DiscoveryClient Route Definition Locator
114.2.1. Configuring Predicates and Filters For DiscoveryClient Routes
115. CORS Configuration
116. Actuator API
116.1. Retrieving route filters
116.1.1. Global Filters
116.1.2. Route Filters
116.2. Refreshing the route cache
116.3. Retrieving the routes defined in the gateway
116.4. Retrieving information about a particular route
116.5. Creating and deleting a particular route
116.6. Recap: list of all endpoints
117. Developer Guide
117.1. Writing Custom Route Predicate Factories
117.2. Writing Custom GatewayFilter Factories
117.3. Writing Custom Global Filters
117.4. Writing Custom Route Locators and Writers
118. Building a Simple Gateway Using Spring MVC or Webflux
XVI. Spring Cloud Function
119. Introduction
120. Getting Started
121. Building and Running a Function
122. Function Catalog and Flexible Function Signatures
123. Standalone Web Applications
124. Standalone Streaming Applications
125. Deploying a Packaged Function
126. Dynamic Compilation
127. Serverless Platform Adapters
127.1. AWS Lambda
127.1.1. Introduction
127.1.2. Notes on JAR Layout
127.1.3. Upload
127.1.4. Platfom Specific Features
HTTP and API Gateway
127.2. Azure Functions
127.2.1. Notes on JAR Layout
127.2.2. JSON Configuration
127.2.3. Build
127.2.4. Running the sample
127.3. Apache Openwhisk
127.3.1. Quick Start
XVII. Appendix: Compendium of Configuration Properties