From 48b14c73b91293cdf99ba71b889e590e661da430 Mon Sep 17 00:00:00 2001 From: Tim Hess Date: Thu, 6 Jul 2023 16:07:13 -0500 Subject: [PATCH 01/34] start adding v4 --- api-all.json | 21 +- api-v4.json | 194 + api/browser/v4/all/index.md | 48 + api/v4/bootstrap/index.md | 110 + api/v4/circuitbreaker/hystrix.md | 904 ++++ api/v4/circuitbreaker/index.md | 9 + .../configuration/cloud-foundry-provider.md | 246 + .../configuration/config-server-provider.md | 349 ++ api/v4/configuration/hosting-extensions.md | 27 + api/v4/configuration/index.md | 24 + api/v4/configuration/kubernetes-providers.md | 226 + api/v4/configuration/placeholder-provider.md | 204 + api/v4/configuration/random-value-provider.md | 108 + api/v4/connectors/cosmosdb.md | 82 + api/v4/connectors/extensibility.md | 36 + api/v4/connectors/gemfire.md | 99 + api/v4/connectors/index.md | 14 + api/v4/connectors/microsoft-sql-server.md | 280 + api/v4/connectors/mongodb.md | 106 + api/v4/connectors/mysql.md | 290 ++ api/v4/connectors/oauth.md | 115 + api/v4/connectors/postgresql.md | 218 + api/v4/connectors/rabbitmq.md | 135 + api/v4/connectors/redis.md | 211 + api/v4/connectors/usage.md | 101 + api/v4/developer-tools/cli.md | 222 + api/v4/developer-tools/index.md | 11 + api/v4/discovery/discovering-services.md | 115 + api/v4/discovery/hashicorp-consul.md | 124 + api/v4/discovery/index.md | 12 + .../discovery/initialize-discovery-client.md | 142 + api/v4/discovery/kubernetes.md | 36 + api/v4/discovery/load-balancing.md | 152 + api/v4/discovery/netflix-eureka.md | 198 + api/v4/fileshares/index.md | 5 + api/v4/fileshares/usage.md | 55 + api/v4/initializr/images/default.png | Bin 0 -> 173502 bytes api/v4/initializr/images/explore.png | Bin 0 -> 211245 bytes api/v4/initializr/images/generate.png | Bin 0 -> 175833 bytes api/v4/initializr/images/share.png | Bin 0 -> 184800 bytes api/v4/initializr/index.md | 16 + api/v4/initializr/initializr-api.md | 117 + api/v4/initializr/initializr-web.md | 61 + api/v4/logging/dynamic-logging-provider.md | 59 + api/v4/logging/index.md | 6 + api/v4/logging/serilog-logger.md | 128 + api/v4/management/cloud-foundry.md | 112 + api/v4/management/dbmigrations.md | 87 + api/v4/management/env.md | 27 + api/v4/management/health.md | 284 ++ api/v4/management/heapdump.md | 38 + api/v4/management/httptrace.md | 42 + api/v4/management/hypermedia.md | 35 + api/v4/management/index.md | 13 + api/v4/management/info.md | 91 + api/v4/management/loggers.md | 79 + api/v4/management/mappings.md | 26 + api/v4/management/metric-observers.md | 3 + api/v4/management/metrics-endpoint.md | 102 + api/v4/management/metrics.md | 145 + api/v4/management/prometheus.md | 57 + api/v4/management/refresh.md | 26 + api/v4/management/springbootadmin.md | 71 + api/v4/management/tasks.md | 69 + api/v4/management/threaddump.md | 31 + api/v4/management/tracing.md | 41 + api/v4/management/using-endpoints.md | 211 + api/v4/messaging/amqp.md | 4510 +++++++++++++++++ api/v4/messaging/further-reading.md | 9 + api/v4/messaging/images/cacheStats.png | Bin 0 -> 98243 bytes api/v4/messaging/images/tickmark.png | Bin 0 -> 4064 bytes api/v4/messaging/index.md | 9 + api/v4/messaging/rabbitmq-intro.md | 419 ++ api/v4/messaging/rabbitmq-reference.md | 3296 ++++++++++++ api/v4/security/credhub-api-client.md | 373 ++ api/v4/security/index.md | 17 + api/v4/security/jwt-authentication.md | 139 + api/v4/security/mtls.md | 160 + api/v4/security/redis-key-storage-provider.md | 128 + api/v4/security/sso-oauth2.md | 170 + api/v4/security/sso-open-id.md | 19 + api/v4/stream/data-flow-stream.md | 335 ++ .../images/SCDF-CF-dashboard-logging.png | Bin 0 -> 113443 bytes api/v4/stream/images/SCDF-CF-dashboard.png | Bin 0 -> 82127 bytes .../stream/images/SCDF-add-applications.png | Bin 0 -> 173724 bytes .../images/SCDF-create-steeltoe-stream.png | Bin 0 -> 260407 bytes api/v4/stream/images/SCDF-create-streams.png | Bin 0 -> 99127 bytes api/v4/stream/images/SCDF-deploy-stream.png | Bin 0 -> 69276 bytes api/v4/stream/images/SCDF-register-apps.png | Bin 0 -> 78281 bytes api/v4/stream/images/SCDF-registered-apps.png | Bin 0 -> 66773 bytes api/v4/stream/images/SCDF-stream-created.png | Bin 0 -> 38432 bytes api/v4/stream/images/SCDF-stream-deployed.png | Bin 0 -> 23066 bytes api/v4/stream/images/SCSt-groups.png | Bin 0 -> 17392 bytes api/v4/stream/images/SCSt-overview.png | Bin 0 -> 96212 bytes api/v4/stream/images/SCSt-partitioning.png | Bin 0 -> 18068 bytes api/v4/stream/images/SCSt-sensors.png | Bin 0 -> 16910 bytes api/v4/stream/images/SCSt-with-binder.png | Bin 0 -> 18899 bytes .../custom_vs_global_error_channels.png | Bin 0 -> 48392 bytes api/v4/stream/images/part-bindings.png | Bin 0 -> 61765 bytes api/v4/stream/images/part-exchange.png | Bin 0 -> 24024 bytes api/v4/stream/images/part-queues.png | Bin 0 -> 46910 bytes api/v4/stream/images/producers-consumers.png | Bin 0 -> 15947 bytes api/v4/stream/images/rabbit-binder.png | Bin 0 -> 12440 bytes api/v4/stream/images/redis-binder.png | Bin 0 -> 13731 bytes api/v4/stream/images/registration.png | Bin 0 -> 22405 bytes api/v4/stream/images/schema_reading.png | Bin 0 -> 45621 bytes api/v4/stream/images/schema_resolution.png | Bin 0 -> 27718 bytes api/v4/stream/images/spring-initializr.png | Bin 0 -> 52367 bytes ...usage-cost-processor-message-guarantee.png | Bin 0 -> 34297 bytes ...andalone-rabbitmq-usage-cost-processor.png | Bin 0 -> 23257 bytes ...-usage-detail-sender-message-guarantee.png | Bin 0 -> 51272 bytes ...tandalone-rabbitmq-usage-detail-sender.png | Bin 0 -> 25995 bytes api/v4/stream/images/streams-application.jpg | Bin 0 -> 24142 bytes api/v4/stream/images/streams-overview.jpg | Bin 0 -> 53597 bytes api/v4/stream/index.md | 20 + api/v4/stream/rabbit-binder.md | 1262 +++++ api/v4/stream/standalone-stream-rabbitmq.md | 780 +++ api/v4/stream/stream-reference.md | 1777 +++++++ api/v4/toc.yml | 156 + .../tracing/distributed-tracing-exporting.md | 117 + api/v4/tracing/index.md | 151 + api/v4/welcome/common-steps.md | 91 + api/v4/welcome/index.md | 57 + api/v4/welcome/prerequisites.md | 28 + api/v4/welcome/whats-new.md | 111 + azure-pipelines-metadata.yaml | 2 +- build-metadata.sh | 4 + docfx.json | 18 + metadata.conf | 1 + template/steeltoe/partials/toc.tmpl.partial | 23 +- 130 files changed, 21373 insertions(+), 15 deletions(-) create mode 100644 api-v4.json create mode 100644 api/browser/v4/all/index.md create mode 100644 api/v4/bootstrap/index.md create mode 100644 api/v4/circuitbreaker/hystrix.md create mode 100644 api/v4/circuitbreaker/index.md create mode 100644 api/v4/configuration/cloud-foundry-provider.md create mode 100644 api/v4/configuration/config-server-provider.md create mode 100644 api/v4/configuration/hosting-extensions.md create mode 100644 api/v4/configuration/index.md create mode 100644 api/v4/configuration/kubernetes-providers.md create mode 100644 api/v4/configuration/placeholder-provider.md create mode 100644 api/v4/configuration/random-value-provider.md create mode 100644 api/v4/connectors/cosmosdb.md create mode 100644 api/v4/connectors/extensibility.md create mode 100644 api/v4/connectors/gemfire.md create mode 100644 api/v4/connectors/index.md create mode 100644 api/v4/connectors/microsoft-sql-server.md create mode 100644 api/v4/connectors/mongodb.md create mode 100644 api/v4/connectors/mysql.md create mode 100644 api/v4/connectors/oauth.md create mode 100644 api/v4/connectors/postgresql.md create mode 100644 api/v4/connectors/rabbitmq.md create mode 100644 api/v4/connectors/redis.md create mode 100644 api/v4/connectors/usage.md create mode 100644 api/v4/developer-tools/cli.md create mode 100644 api/v4/developer-tools/index.md create mode 100644 api/v4/discovery/discovering-services.md create mode 100644 api/v4/discovery/hashicorp-consul.md create mode 100644 api/v4/discovery/index.md create mode 100644 api/v4/discovery/initialize-discovery-client.md create mode 100644 api/v4/discovery/kubernetes.md create mode 100644 api/v4/discovery/load-balancing.md create mode 100644 api/v4/discovery/netflix-eureka.md create mode 100644 api/v4/fileshares/index.md create mode 100644 api/v4/fileshares/usage.md create mode 100644 api/v4/initializr/images/default.png create mode 100644 api/v4/initializr/images/explore.png create mode 100644 api/v4/initializr/images/generate.png create mode 100644 api/v4/initializr/images/share.png create mode 100644 api/v4/initializr/index.md create mode 100644 api/v4/initializr/initializr-api.md create mode 100644 api/v4/initializr/initializr-web.md create mode 100644 api/v4/logging/dynamic-logging-provider.md create mode 100644 api/v4/logging/index.md create mode 100644 api/v4/logging/serilog-logger.md create mode 100644 api/v4/management/cloud-foundry.md create mode 100644 api/v4/management/dbmigrations.md create mode 100644 api/v4/management/env.md create mode 100644 api/v4/management/health.md create mode 100644 api/v4/management/heapdump.md create mode 100644 api/v4/management/httptrace.md create mode 100644 api/v4/management/hypermedia.md create mode 100644 api/v4/management/index.md create mode 100644 api/v4/management/info.md create mode 100644 api/v4/management/loggers.md create mode 100644 api/v4/management/mappings.md create mode 100644 api/v4/management/metric-observers.md create mode 100644 api/v4/management/metrics-endpoint.md create mode 100644 api/v4/management/metrics.md create mode 100644 api/v4/management/prometheus.md create mode 100644 api/v4/management/refresh.md create mode 100644 api/v4/management/springbootadmin.md create mode 100644 api/v4/management/tasks.md create mode 100644 api/v4/management/threaddump.md create mode 100644 api/v4/management/tracing.md create mode 100644 api/v4/management/using-endpoints.md create mode 100644 api/v4/messaging/amqp.md create mode 100644 api/v4/messaging/further-reading.md create mode 100644 api/v4/messaging/images/cacheStats.png create mode 100644 api/v4/messaging/images/tickmark.png create mode 100644 api/v4/messaging/index.md create mode 100644 api/v4/messaging/rabbitmq-intro.md create mode 100644 api/v4/messaging/rabbitmq-reference.md create mode 100644 api/v4/security/credhub-api-client.md create mode 100644 api/v4/security/index.md create mode 100644 api/v4/security/jwt-authentication.md create mode 100644 api/v4/security/mtls.md create mode 100644 api/v4/security/redis-key-storage-provider.md create mode 100644 api/v4/security/sso-oauth2.md create mode 100644 api/v4/security/sso-open-id.md create mode 100644 api/v4/stream/data-flow-stream.md create mode 100644 api/v4/stream/images/SCDF-CF-dashboard-logging.png create mode 100644 api/v4/stream/images/SCDF-CF-dashboard.png create mode 100644 api/v4/stream/images/SCDF-add-applications.png create mode 100644 api/v4/stream/images/SCDF-create-steeltoe-stream.png create mode 100644 api/v4/stream/images/SCDF-create-streams.png create mode 100644 api/v4/stream/images/SCDF-deploy-stream.png create mode 100644 api/v4/stream/images/SCDF-register-apps.png create mode 100644 api/v4/stream/images/SCDF-registered-apps.png create mode 100644 api/v4/stream/images/SCDF-stream-created.png create mode 100644 api/v4/stream/images/SCDF-stream-deployed.png create mode 100644 api/v4/stream/images/SCSt-groups.png create mode 100644 api/v4/stream/images/SCSt-overview.png create mode 100644 api/v4/stream/images/SCSt-partitioning.png create mode 100644 api/v4/stream/images/SCSt-sensors.png create mode 100644 api/v4/stream/images/SCSt-with-binder.png create mode 100644 api/v4/stream/images/custom_vs_global_error_channels.png create mode 100644 api/v4/stream/images/part-bindings.png create mode 100644 api/v4/stream/images/part-exchange.png create mode 100644 api/v4/stream/images/part-queues.png create mode 100644 api/v4/stream/images/producers-consumers.png create mode 100644 api/v4/stream/images/rabbit-binder.png create mode 100644 api/v4/stream/images/redis-binder.png create mode 100644 api/v4/stream/images/registration.png create mode 100644 api/v4/stream/images/schema_reading.png create mode 100644 api/v4/stream/images/schema_resolution.png create mode 100644 api/v4/stream/images/spring-initializr.png create mode 100644 api/v4/stream/images/standalone-rabbitmq-usage-cost-processor-message-guarantee.png create mode 100644 api/v4/stream/images/standalone-rabbitmq-usage-cost-processor.png create mode 100644 api/v4/stream/images/standalone-rabbitmq-usage-detail-sender-message-guarantee.png create mode 100644 api/v4/stream/images/standalone-rabbitmq-usage-detail-sender.png create mode 100644 api/v4/stream/images/streams-application.jpg create mode 100644 api/v4/stream/images/streams-overview.jpg create mode 100644 api/v4/stream/index.md create mode 100644 api/v4/stream/rabbit-binder.md create mode 100644 api/v4/stream/standalone-stream-rabbitmq.md create mode 100644 api/v4/stream/stream-reference.md create mode 100644 api/v4/toc.yml create mode 100644 api/v4/tracing/distributed-tracing-exporting.md create mode 100644 api/v4/tracing/index.md create mode 100644 api/v4/welcome/common-steps.md create mode 100644 api/v4/welcome/index.md create mode 100644 api/v4/welcome/prerequisites.md create mode 100644 api/v4/welcome/whats-new.md diff --git a/api-all.json b/api-all.json index 7301a31c..f6762acc 100644 --- a/api-all.json +++ b/api-all.json @@ -34,9 +34,28 @@ "disableDefaultFilter": false, "filter": "api-filter.yml", "properties": { - "TargetFramework": "net5.0" + "TargetFramework": "net6.0" }, "version": "3.all" + }, + { + "src": [ + { + "files": [ + "src/**/*.csproj" + ], + "exclude": [ "**/bin/**", "**/obj/**", "**/test/**" ], + "src": "sources/v4" + } + ], + "dest": "api/browser/v4/all", + "disableGitFeatures": false, + "disableDefaultFilter": false, + "filter": "api-filter.yml", + "properties": { + "TargetFramework": "net6.0" + }, + "version": "4.all" } ] } diff --git a/api-v4.json b/api-v4.json new file mode 100644 index 00000000..22317ffa --- /dev/null +++ b/api-v4.json @@ -0,0 +1,194 @@ +{ + "metadata": [ + { + "src": [ + { + "files": [ + "**/*.csproj" + ], + "exclude": [ "**/bin/**", "**/obj/**" ], + "src": "sources/v4/src/Common/src" + } + ], + "dest": "api/browser/v4/common", + "disableGitFeatures": false, + "disableDefaultFilter": false, + "filter": "api-filter.yml", + "properties": { + "TargetFramework": "net6.0" + }, + "version": "4.x" + }, + { + "src": [ + { + "files": [ + "**/*.csproj" + ], + "exclude": [ "**/bin/**", "**/obj/**" ], + "src": "sources/v4/src/Configuration/src" + } + ], + "dest": "api/browser/v4/configuration", + "disableGitFeatures": false, + "disableDefaultFilter": false, + "filter": "api-filter.yml", + "properties": { + "TargetFramework": "net6.0" + }, + "version": "4.x" + }, + { + "src": [ + { + "files": [ + "**/*.csproj" + ], + "exclude": [ "**/bin/**", "**/obj/**" ], + "src": "sources/v4/src/Connectors/src" + } + ], + "dest": "api/browser/v4/connectors", + "disableGitFeatures": false, + "disableDefaultFilter": false, + "filter": "api-filter.yml", + "properties": { + "TargetFramework": "net6.0" + }, + "version": "4.x" + }, + { + "src": [ + { + "files": [ + "**/*.csproj" + ], + "exclude": [ "**/bin/**", "**/obj/**" ], + "src": "sources/v4/src/Discovery/src" + } + ], + "dest": "api/browser/v4/discovery", + "disableGitFeatures": false, + "disableDefaultFilter": false, + "filter": "api-filter.yml", + "properties": { + "TargetFramework": "net6.0" + }, + "version": "4.x" + }, + { + "src": [ + { + "files": [ + "**/*.csproj" + ], + "exclude": [ "**/bin/**", "**/obj/**" ], + "src": "sources/v4/src/Integration/src" + } + ], + "dest": "api/browser/v4/integration", + "disableGitFeatures": false, + "disableDefaultFilter": false, + "filter": "api-filter.yml", + "properties": { + "TargetFramework": "net6.0" + }, + "version": "4.x" + }, + { + "src": [ + { + "files": [ + "**/*.csproj" + ], + "exclude": [ "**/bin/**", "**/obj/**" ], + "src": "sources/v4/src/Logging/src" + } + ], + "dest": "api/browser/v4/logging", + "disableGitFeatures": false, + "disableDefaultFilter": false, + "filter": "api-filter.yml", + "properties": { + "TargetFramework": "net6.0" + }, + "version": "4.x" + }, + { + "src": [ + { + "files": [ + "**/*.csproj" + ], + "exclude": [ "**/bin/**", "**/obj/**" ], + "src": "sources/v4/src/Management/src" + } + ], + "dest": "api/browser/v4/management", + "disableGitFeatures": false, + "disableDefaultFilter": false, + "filter": "api-filter.yml", + "properties": { + "TargetFramework": "net6.0" + }, + "version": "4.x" + }, + { + "src": [ + { + "files": [ + "**/*.csproj" + ], + "exclude": [ "**/bin/**", "**/obj/**" ], + "src": "sources/v4/src/Messaging/src" + } + ], + "dest": "api/browser/v4/messaging", + "disableGitFeatures": false, + "disableDefaultFilter": false, + "filter": "api-filter.yml", + "properties": { + "TargetFramework": "net6.0" + }, + "version": "4.x" + }, + { + "src": [ + { + "files": [ + "**/*.csproj" + ], + "exclude": [ "**/bin/**", "**/obj/**" ], + "src": "sources/v4/src/Security/src" + } + ], + "dest": "api/browser/v4/security", + "disableGitFeatures": false, + "disableDefaultFilter": false, + "filter": "api-filter.yml", + "properties": { + "TargetFramework": "net6.0" + }, + "version": "4.x" + }, + { + "src": [ + { + "files": [ + "**/*.csproj" + ], + "exclude": [ "**/bin/**", "**/obj/**" ], + "src": "sources/v4/src/Stream/src" + } + ], + "dest": "api/browser/v4/stream", + "disableGitFeatures": false, + "disableDefaultFilter": false, + "filter": "api-filter.yml", + "properties": { + "TargetFramework": "net6.0" + }, + "version": "4.x" + } + ] +} diff --git a/api/browser/v4/all/index.md b/api/browser/v4/all/index.md new file mode 100644 index 00000000..77b9be0a --- /dev/null +++ b/api/browser/v4/all/index.md @@ -0,0 +1,48 @@ +--- +_disableToc: false +_disableAffix: false +_disableGitFeatures: true + +title: Steeltoe Namespaces +uid: api/browser/v4/all/index +--- + +# Steeltoe Namespaces + +## Steeltoe Configuration Providers + +[Custom configuration providers](https://docs.microsoft.com/aspnet/core/fundamentals/configuration/#custom-config-providers) for use with Microsoft's [application configuration](https://docs.microsoft.com/aspnet/core/fundamentals/configuration/) for accessing configuration settings for an application. + +[view](/api/browser/v4/configuration/Steeltoe.Extensions.Configuration.html) + +## Steeltoe Connectors + +Contains connectors for simplifying the process of connecting to backing services and setting up connection health monitoring. + +[view](/api/browser/v4/connectors/Steeltoe.Connector.html) + +## Steeltoe Service Discovery & Registration + +Contains packages for interacting with service registries. + +[view](/api/browser/v4/discovery/Steeltoe.Discovery.html) + +## Steeltoe Logging Extensions + +Logging extensions that, when used with Steeltoe Management, enable changing the Logging levels for a running application at run-time, without restarting the app. + +Currently supporting the Microsoft Console Logger and Serilog. + +[view](/api/browser/v4/logging/Steeltoe.Extensions.Logging.html) + +## Steeltoe Application Management + +Management tools to help manage and monitor your applications. + +[view](/api/browser/v4/management/Steeltoe.Management.html) + +## Steeltoe Security + +Authentication and DataProtection libraries which simplify interacting with CredHub and using security services on CloudFoundry. + +[view](/api/browser/v4/security/Steeltoe.Security.Authentication.CloudFoundry.html) diff --git a/api/v4/bootstrap/index.md b/api/v4/bootstrap/index.md new file mode 100644 index 00000000..d69a8fb8 --- /dev/null +++ b/api/v4/bootstrap/index.md @@ -0,0 +1,110 @@ +# Application Bootstrapping + +In order to improve the Steeltoe developer experience, Steeltoe 3.1.0 added this new feature that allows the configuration of most Steeltoe components with a single line of code in your application. The package is named [`Steeltoe.Bootstrap.Autoconfig`](https://github.com/SteeltoeOSS/Steeltoe/tree/main/src/Bootstrap/src/Autoconfig), and it works by applying the same extensions that are already included in Steeltoe packages to automatically wire up each of those components. + +Applications running on .NET Core 3.1+ and .NET 5.0+ are supported. Get started by adding a reference to the Autoconfig package (you may want to add other Steeltoe references at this point too, see [the table below](#supported-steeltoe-packages) for the full list of what's supported now): + +```xml + + + +``` + + After adding the NuGet reference(s), simply include `.AddSteeltoe()` like you see in this example and you're all set with the basic implementation: + +```csharp +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; +using Steeltoe.Bootstrap.Autoconfig; + +namespace WebApplication1 +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }) + .AddSteeltoe(); + } +} + +``` + +## Supported Steeltoe Packages + +`Steeltoe.Bootstrap.Autoconfig` is not a meta-package. In order for a Steeltoe feature to be automatically bootstrapped in the application, the appropriate package must also be added as a reference. The following table describes the Steeltoe package that is required to light up a feature and any additional packages that may also be required: + +| Feature Description | Steeltoe Package |Additional Package Required | +| --- | --- | --- | +| [Config Server Configuration](../configuration/config-server-provider.md) | `Steeltoe.Extensions.Configuration.ConfigServerBase` or `ConfigServerCore` | N/A | +| [Cloud Foundry Configuration](../configuration/cloud-foundry-provider.md) |`Steeltoe.Extensions.Configuration.CloudFoundryBase` or `CloudFoundryCore` | N/A | +| [Kubernetes Configuration](../configuration/kubernetes-providers.md) |`Steeltoe.Extensions.Configuration.KubernetesBase` or `KubernetesCore` | N/A | +| [Random Value Provider](../configuration/random-value-provider.md) |`Steeltoe.Extensions.Configuration.RandomValueBase` | N/A | +| [Placeholder Resolver](../configuration/placeholder-provider.md) |`Steeltoe.Extensions.Configuration.PlaceholderBase` or `PlaceholderCore` | N/A | +| [Connectors*](../connectors/index.md) |`Steeltoe.Connector.ConnectorCore` | Supported driver (MySQL, PostgreSQL, RabbitMQ, SQL Server, etc) | +| [Dynamic Serilog](../logging/serilog-logger.md) | `Steeltoe.Extensions.Logging.DynamicSerilogCore` | N/A | +| [Service Discovery](../discovery/index.md) |`Steeltoe.Discovery.ClientBase` or `ClientCore` | Desired client (Eureka, Consul, Kubernetes) +| [Actuators](../management/index.md) | `Steeltoe.Management.EndpointCore` | N/A | +| [Actuators with Cloud Foundry support**](../management/cloud-foundry.md) |`Steeltoe.Management.CloudFoundryCore` | N/A | +| [Actuators with Kubernetes support](../management/index.md) |`Steeltoe.Management.KubernetesCore` | N/A | +| [Distributed Tracing](../tracing/index.md) | `Steeltoe.Management.TracingBase` or `TracingCore` | OpenTelemetry Exporter (Zipkin, Jaeger, OTLP) | +| [Cloud Foundry Container Identity](../security/mtls.md#configure-settings) | `Steeltoe.Security.Authentication.CloudFoundryCore` | N/A | + +>\* The [Connection String Configuration provider](../connectors/usage.md#connectionstring-configuration-provider) is always added when `ConnectorCore` is referenced. Individual connector clients will only be configured if a corresponding supported driver NuGet package reference is also included. + +>\*\* Cloud Foundry support is now included in `Steeltoe.Management.EndpointCore`. The Cloud Foundry Actuator package is not required and has been marked obsolete in 3.1.0. + +## Excluding Components + +If you wish to exclude a component from the automatic bootstrap process, you may add the feature's assembly name to the exclusions list. One example where this feature would be desired is if you want to control the order configuration providers are added. This example shows how to provide the exclusions list: + +```csharp +public static IHostBuilder CreateHostBuilder(string[] args) +{ + List myExclusions = new () { SteeltoeAssemblies.Steeltoe_Extensions_Configuration_ConfigServerCore }; + return Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }) + .AddSteeltoe(myExclusions); +} +``` + +>The static class `SteeltoeAssemblies` is `public` so that you can easily find the name of any specific assembly to exclude. + +## Logging Inside Config Providers + +For some Steeltoe components, primarily configuration providers, providing a `LoggerFactory` is required to retrieve logs for debugging. Use the optional parameter to provide one as needed: + +```csharp +public static IHostBuilder CreateHostBuilder(string[] args) +{ + LoggerFactory loggerFactory = new (new List { new DebugLoggerProvider() }); + return Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }) + .AddSteeltoe(loggerFactory: loggerFactory); +} +``` + +## Limitations + +At this time there is no support for: + +* Features that need to be configured directly in `IApplicationBuilder`, such as Cloud Foundry SSO and JWT. +* Features that require a custom type (such as a DbContext) for setup. + +## Feedback + +Love it? Hate it? Want to know more or make a suggestion? Let us know by [filing an issue](https://github.com/SteeltoeOSS/Steeltoe/issues/new/choose), [joining us on slack](https://slack.steeltoe.io/) or [Tweeting at us](https://twitter.com/steeltoeoss) diff --git a/api/v4/circuitbreaker/hystrix.md b/api/v4/circuitbreaker/hystrix.md new file mode 100644 index 00000000..1c7be526 --- /dev/null +++ b/api/v4/circuitbreaker/hystrix.md @@ -0,0 +1,904 @@ +# Netflix Hystrix + +Steeltoe's Hystrix implementation lets application developers isolate and manage back-end dependencies so that a single failing dependency does not take down the entire application. This is accomplished by wrapping all calls to external dependencies in a `HystrixCommand`, which runs in its own separate external thread. + +Hystrix maintains its own small, fixed-size thread pool from which commands are executed. When the pool becomes exhausted, Hystrix commands are immediately rejected, and, if provided, a fallback mechanism is executed. This prevents any single dependency from using up all of the threads for failing external dependencies. + +Each Hystrix command also has the ability to create a timeout for any calls that take longer than the configured threshold. If a timeout occurs, the command automatically executes a fallback mechanism (if the developer provided one). Developers can configure each command with custom fallback logic that runs when a command fails, is rejected, times out, or trips the circuit breaker. + +Each command has a built-in configurable circuit breaker that stops all requests to failing back-end dependencies when the error percentage passes a threshold. The circuit remains open (broken) for a configurable period of time, and all requests are then sent to the fallback mechanism until the circuit is closed (connected) again. + +Hystrix also provides a means to measure command successes, failures, timeouts, short-circuits, and thread rejections. Statistics are gathered for all of these and can optionally be reported to a [Hystrix Dashboard](https://github.com/Netflix/Hystrix/wiki/Dashboard) for monitoring in real-time. + +The remaining sections of this chapter describe these features. Also, you should understand that Steeltoe's Hystrix implementation follows the Netflix implementation closely. As a result, its worthwhile to review the [Netflix documentation](https://github.com/Netflix/Hystrix/wiki) in addition to this documentation. Pay particular attention to the [How it Works](https://github.com/Netflix/Hystrix/wiki/How-it-Works) section as it provides a [Flow Chart](https://github.com/Netflix/Hystrix/wiki/How-it-Works#Flow) explaining how a command executes and how the default [Circuit Breaker](https://github.com/Netflix/Hystrix/wiki/How-it-Works#CircuitBreaker) transitions between the CLOSED, OPEN and HALF-OPEN states. It also provides details on how the [Bulkhead pattern](https://docs.microsoft.com/azure/architecture/patterns/bulkhead) is implemented by using isolation techniques that employ [Threads and Thread Pools](https://github.com/Netflix/Hystrix/wiki/How-it-Works#isolation). + +## Usage + +You should have a good understanding of how the .NET [configuration service](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) works before you start to use the Hystrix framework. A basic understanding of the `ConfigurationBuilder` and how to add providers to the builder is necessary to configure the framework. + +You should also have a good understanding of how the [ASP.NET Core Startup class](https://docs.microsoft.com/aspnet/core/fundamentals/startup) is used to configure the application services and the middleware used in the app. You should pay particular attention to the usage of the `Configure()` and `ConfigureServices()` methods. + +In addition to the information in this section, you should review the [Netflix Hystrix Wiki](https://github.com/Netflix/Hystrix/wiki). The Steeltoe Hystrix framework implementation aligns closely with the Netflix implementation. Consequently, the Wiki information applies directly to Steeltoe. + +If you plan to use the Hystrix Dashboard, you should also spend time understanding the [Netflix Hystrix Dashboard](https://github.com/Netflix/Hystrix/wiki/Dashboard) information on the wiki. + +To use the Steeltoe framework: + +1. Add Hystrix NuGet package references to your project +1. Define Hystrix Command(s) and/or Hystrix Collapser(s) +1. Configure Hystrix settings +1. Add Hystrix Command(s) and/or Collapser(s) to the container +1. Use Hystrix Command(s) and/or Collapser(s) to invoke dependent services +1. Add and Use the Hystrix metrics stream service + +### Add NuGet References + +There are two types of NuGet references to consider with when adding Hystrix to your application. + +The first is required to bring the basic Hystrix functionality (the ability to define and execute commands) into your application. Choose from the following options based on the type of the application you are building and what Dependency Injector you have chosen, if any: + +| Package | Description | .NET Target | +| --- | --- | --- | +| `Steeltoe.CircuitBreaker.Abstractions` | Interfaces and objects used for extensibility. | .NET Standard 2.0 | +| `Steeltoe.CircuitBreaker.HystrixBase` | Base functionality, no DI. | .NET Standard 2.0 | +| `Steeltoe.CircuitBreaker.HystrixCore` | Includes base, adds ASP.NET Core Integration. | ASP.NET Core 3.1+ | + +To add this type of NuGet to your project, add something like the following `PackageReference`: + +```xml + +... + +... + +``` + +The second type of NuGet that you may need to add relates to collecting Hystrix metrics. If you are developing an ASP.NET Core application and want to collect Hystrix metrics and you are using the [Netflix Hystrix Dashboard](https://github.com/Netflix/Hystrix/wiki/Dashboard), you need to also include the `Steeltoe.CircuitBreaker.Hystrix.MetricsEventsCore` package in your application. + +To do so, include the following `PackageReference` in your application: + +```xml + +... + +... + +``` + +Alternatively, if you are pushing your application to Cloud Foundry/Tanzu Application Service and want to use the [Spring Cloud Services Hystrix Dashboard](https://docs.vmware.com/en/Spring-Cloud-Services-for-VMware-Tanzu/2.1/spring-cloud-services/GUID-index.html), then include the following package instead of the one above: + +| App Type | Package | Description | +| --- | --- | --- | +| ASP.NET Core | `Steeltoe.CircuitBreaker.Hystrix.MetricsStreamCore` | ASP.NET Core DI | + +When using `MetricsStreamCore` you will also need to include a package reference to a RabbitMQ client. `MetricsStreamCore` uses RabbitMQ messaging to send metrics to the Spring Cloud Services Hystrix Dashboard on Cloud Foundry. + +To add the NuGet to your project, add something like the following: + +```xml + +... + + +... + +``` + +### Define Hystrix Commands + +There are many ways to define a Hystrix command. The simplest looks something like the following: + +```csharp +public class HelloWorldCommand : HystrixCommand +{ + public HelloWorldCommand(string name) + : base(HystrixCommandGroupKeyDefault.AsKey("HelloWorldGroup"), + () => { return "Hello" + name; }, + () => { return "Hello" + name + " via fallback"; }) + { + } +} +``` + +Each command needs to inherit from `HystrixCommand` or `HystrixCommand` and override and implement the inherited and protected `RunAsync()` method. Optionally, you can also override and implement the inherited method `RunFallbackAsync()` method. The simple example above provides lambdas for each of those two methods. + +The `RunAsync()` method should implement the fundamental logic of the command, and the `RunFallbackAsync()` method should implement any fallback logic, in case the `RunAsync()` method fails. + +Each command must be a member of a group. The name of the group is specified using the `HystrixCommandGroupKeyDefault.AsKey("YourGroupName")` method and must be provided in the constructor of the command. + +The following example shows the same command shown earlier, but rewritten using method overrides: + +```csharp +public class HelloWorldCommand : HystrixCommand +{ + private string _name; + public HelloWorldCommand(string name) + : base(HystrixCommandGroupKeyDefault.AsKey("HelloWorldGroup")) + { + _name = name; + } + + protected override async Task RunAsync() + { + return await Task.FromResult("Hello" + _name); + } + protected override async Task RunFallbackAsync() + { + return await Task.FromResult("Hello" + _name + " via fallback"); + } +} +``` + +`HystrixCommands` are stateful objects. Once they have been run, they can no longer be reused. If you want to run a command again, you must create another instance (for example, `new MyCommand()`) and call one of the execute methods again as illustrated in the Use Command section below. + +### Configuring Hystrix Commands + +Each Hystrix command that you define can be individually configured by using normal .NET configuration services. You can specify everything from thread pool sizes and command time-outs to circuit-breaker thresholds. + +For each of the possible Hystrix settings listed below, there are four levels of configuration and precedence that are followed and applied by the framework: + +1. `Fixed global command settings`: These settings specify defaults for all Hystrix commands. Used if nothing else is specified. +1. `Configured global command settings`: These settings are specified in an application configuration and overrides fixed global settings for all Hystrix commands. +1. `Command settings specified in code`: Can be specified in the constructor of your Hystrix command and only applies to that specific instance. +1. `Configured command specific settings`: Are specified in an application's configuration and are specific for 'named' command. Applies to all command instances created with that name. + +All Hystrix command configuration settings should be prefixed with `Hystrix:Command:`. + +`Configured global command settings` should be prefixed with `Hystrix:Command:default:`. The following example illustrates a setting that sets the default timeout for all commands to be 750 milliseconds: + +`Hystrix:Command:default:Execution:Isolation:Thread:TimeoutInMilliseconds=750` + +To configure `Command settings specified in code`, use `HystrixCommandOptions` from the `Steeltoe.CircuitBreaker.HystrixBase` package. + +All `configured command-specific settings`, as described earlier in #4, should be prefixed with `Hystrix:Command:HYSTRIX_COMMAND_KEY:`, where `HYSTRIX_COMMAND_KEY` is the `Name` of the command. The following example configures the timeout for the Hystrix command with a name of `sample` to be 750 milliseconds: + +`Hystrix:Command:sample:Execution:Isolation:Thread:TimeoutInMilliseconds=750` + +The following set of tables specifies all of the possible settings by category. + +>The settings described in the next sections follow the Netflix Hystrix implementation closely. Consequently, you should read the [Configuration section](https://github.com/Netflix/Hystrix/wiki/Configuration) on the Netflix Hystrix wiki for more detail on each setting and how it affects Hystrix command operations. + +#### Execution Settings + +The following table describes the settings that control how the HystrixCommand's `RunAsync()` method runs: + +| Key | Description | Default | +| --- | --- | --- | +| `Timeout:Enabled` | Enables or disables `RunAsync()` timeouts. | true | +| `Isolation:Strategy` | `THREAD` or `SEMAPHORE`. | `THREAD` | +| `Isolation:Thread:TimeoutInMilliseconds` | Time allowed for `RunAsync()` execution completion before fallback is executed. | 1000 | +| `Isolation:Semaphore:MaxConcurrentRequests` | Maximum requests to `RunAsync()` method when using the `SEMAPHORE` strategy. | 10 | + +Each setting is prefixed with a key of `Execution`, as shown in the following example: + +`Hystrix:Command:sample:Execution:Isolation:Strategy=SEMAPHORE` + +#### Fallback Settings + +The following table describes the settings that control how the HystrixCommand's `RunFallbackAsync()` method runs: + +| Key | Description | Default | +| --- | --- | --- | +| `Enabled` | Enables or disables `RunFallbackAsync()`. | true | +| `Isolation:Semaphore:MaxConcurrentRequests` | Maximum requests to `RunFallbackAsync()` method when using the `SEMAPHORE` strategy. | 10 | + +Each setting is prefixed with a key of `Fallback`, as shown in the following example: + +`Hystrix:Command:sample:Fallback:Enabled=false` + +#### Circuit Breaker Settings + +The following table describes the settings that control the behavior of the default Circuit Breaker used by Hystrix commands: + +| Key | Description | Default | +| --- | --- | --- | +| `Enabled` | Enables or disables circuit breaker usage. | `true` | +| `RequestVolumeThreshold` | Minimum number of requests in a rolling window that will trip the circuit. | 20 | +| `SleepWindowInMilliseconds` | Amount of time, after tripping the circuit, to reject requests before allowing attempts again. | 5000 | +| `ErrorThresholdPercentage` | Error percentage at or above which the circuit should trip open and start short-circuiting requests to fallback logic. | 50 | +| `ForceOpen` | Force circuit open. | `false` | +| `ForceClosed` | Force circuit closed. | `false` | + +Each setting is prefixed with a key of `CircuitBreaker`, as shown in the following example: + +`Hystrix:Command:sample:CircuitBreaker:Enabled=false` + +#### Metrics Settings + +The following table describes the settings that control the behavior of capturing metrics from Hystrix commands: + +| Key | Description | Default | +| --- | --- | --- | +| `RollingStats:TimeInMilliseconds` | Duration of the statistical rolling window, used by circuit breaker and for publishing. | 10000 | +| `RollingStats:NumBuckets` | Number of buckets the rolling statistical window is divided into. | 10 | +| `RollingPercentile:Enabled` | Indicates whether execution latencies should be tracked and calculated as percentiles. | `true` | +| `RollingPercentile:TimeInMilliseconds` | Duration of the rolling window in which execution times are kept to allow for percentile calculations. | 60000 | +| `RollingPercentile:NumBuckets` | Number of buckets the `RollingPercentile` window will be divided into. | 6 | +| `RollingPercentile:BucketSize` | Maximum number of execution times that are kept per bucket. | 100 | +| `HealthSnapshot:IntervalInMilliseconds` | Time to wait between allowing health snapshots to be taken that calculate success and error percentages affecting circuit breaker status. | 500 | + +Each setting is prefixed with the key `Metrics`, as shown in the following example: + +`Hystrix:Command:sample:Metrics:RollingPercentile:Enabled=false` + +#### Request Cache Settings + +The following table describes the settings that control whether Hystrix command request caching is enabled or disabled: + +| Key | Description | Default | +| --- | --- | --- | +| `Enabled` | Enables or disables request scoped caching. | `true` | + +Each setting is prefixed with the key `RequestCache`, as shown in the following example: + +`Hystrix:Command:sample:RequestCache:Enabled=false` + +#### Request Logging Settings + +The following table describes the settings that control whether Hystrix command execution events are logged to the Request log: + +| Key | Description | Default | +| --- | --- | --- | +| `Enabled` | Enables or disables request scoped logging. | `true` | + +Each setting is prefixed with the key `RequestLog`, as shown in the following example: + +`Hystrix:Command:sample:RequestLog:Enabled=false` + +#### Thread Pool Settings + +Hystrix commands use thread pools to implement an underlying isolation pattern for resilience and fault tolerance features. By default each command will create its own 'named' thread pool and every time an instance of that command is executed, a thread from that thread pool will be chosen and used. + +Optionally, you can configure your own 'named' thread pool (see next section) and in turn associate one or more commands to a specific thread pool. The describes the settings that control what thread pool a command uses when executing: + +| Key | Description | Default | +| --- | --- | --- | +| `ThreadPoolKeyOverride` | Sets the thread pool used by the command. | command group key name | + +The following listing shows an example: + +`Hystrix:Command:sample:ThreadPoolKeyOverride=FortuneServiceTPool` + +### Configuring Hystrix Thread Pools + +In addition to configuring the settings for Hystrix commands, you can also configure Hystrix thread pools and the settings that Steeltoe uses to create and manage those thread pools. + +In most cases, you can take the defaults and need not configure these settings. + +As with the Hystrix command settings, there are four levels of precedence that are followed and applied to Hystrix thread pools by the framework: + +1. `Fixed global pool settings`: These are the defaults for all the Hystrix pools. If nothing else is specified, these settings are used. +1. `Configured global pool settings`: These are the defaults specified in configuration files that override the fixed values described earlier and apply to all Hystrix pools. +1. `Pool settings specified in code`: These are the settings you specify in the constructor of your Hystrix thread pool. These settings apply to all commands that reference that pool. +1. `Configured pool specific settings`: These are the settings specified in configuration files that are targeted at named thread pools and apply to all commands that are created that reference that pool. + +All configured thread pool settings should be placed under the prefix with a key of `Hystrix:Threadpool:`. + +All configured global settings, as described earlier in #2, should be placed under a prefix of `Hystrix:Threadpool:default:`. The following example configures the default number of threads in all thread pools to be 20: + +`Hystrix:Threadpool:default:CoreSize=20` + +To configure the settings for a thread pool in code, use the `HystrixThreadPoolOptions` type found in the `Steeltoe.CircuitBreaker.HystrixBase` package. + +All configured pool-specific settings, as described in #4 above, should be placed under a prefix of `Hystrix:Threadpool:HYSTRIX_THREADPOOL_KEY:`, where `HYSTRIX_THREADPOOL_KEY` is the `Name` of the thread pool. Note that the default name of the thread pool used by a command, if not overridden, is the command group name applied to the command. The following example configures the number of threads for the Hystrix thread pool with a `Name` of `sample` to be 40: + +`Hystrix:Threadpool:sample:CoreSize=40` + +The tables in the following sections specify all of the possible settings. + +>The settings provided below follow the Netflix Hystrix implementation closely. Consequently, you should read the [Configuration section](https://github.com/Netflix/Hystrix/wiki/Configuration) on the Netflix Hystrix wiki for more detail on each setting and how it affects Hystrix thread pool operations. + +#### Thread Pool Sizing Settings + +These settings control the sizing of various aspects of the thread pool. There is no additional prefix used in these settings. The following table describes the sizing settings: + +| Key | Description | Default | +| --- | --- | --- | +| `CoreSize` | Sets the thread pool size. | 10 | +| `MaximumSize` | Maximum size of threadPool. See `AllowMaximumSizeToDivergeFromCoreSize`. | 10 | +| `MaxQueueSize` | Maximum thread pool queue size. `value=-1` uses the sync queue. | -1 | +| `QueueSizeRejectionThreshold` | Sets the queue size rejection threshold. An artificial maximum queue size, at which rejections occur even if `MaxQueueSize` has not been reached. Does not apply if `MaxQueueSize=-1`. | 5 | +| `KeepAliveTimeMinutes` | Currently not used. | 1 | +| `AllowMaximumSizeToDivergeFromCoreSize` | Lets the configuration for `MaximumSize` take effect. | false | + +The following listing shows an example: + +`Hystrix:ThreadPool:sample:CoreSize=20` + +#### Thread Pool Metric Settings + +The following table describes the settings that control the behavior of capturing metrics from Hystrix thread pools: + +| Key | Description | Default | +| --- | --- | --- | +| `RollingStats:TimeInMilliseconds` | Duration of the statistical rolling window. Defines how long metrics are kept for the thread pool. | 10000 | +| `RollingStats:NumBuckets` | Number of buckets into which the rolling statistical window is divided. | 10 | + +Each setting is prefixed with a key of `Metrics`, as shown in the following example: + +`Hystrix:Threadpool:sample:Metrics:RollingStats:TimeInMilliseconds=20000` + +### Configuring Hystrix Collapsers + +The last group of settings you can configure pertain to the usage of a Hystrix collapser. Not everyone will need to use collapsers, but if you do, these settings can be used. + +As with all other Hystrix settings, there are four levels of precedence that are followed and applied by the framework: + +1. `Fixed global collapser settings`: The defaults for all Hystrix collapsers. Used if nothing else is specified. +1. `Configured global collapser settings`: Settings in application configuration. Overrides fixed global settings for all Hystrix collapsers. +1. `Collapser settings specified in code`: Specified in the constructor of your Hystrix collapser. Applies to all collapsers that are created with that set of options. +1. `Configured collapser specific settings`: Specified in application configuration for named collapsers. Applies to all collapsers created with that name. + +All configured collapser settings should be placed under a prefix of `Hystrix:Collapser:`. + +All configured global settings, as described in #2 above, should be placed under a prefix of `Hystrix:Collapser:default:`. The following example configures the default number of milliseconds after which a batch of requests created by the collapser triggers and runs all of the requests: + +`Hystrix:Collapser:default:TimerDelayInMilliseconds=20` + +If you wish to configure the settings for a collapser in code, you must use the `HystrixCollapserOptions` found in the `Steeltoe.CircuitBreaker.HystrixBase` package. + +All configured collapser specific settings, as described in #4 above, should be placed under a prefix of `Hystrix:Collapser:HYSTRIX_COLLAPSER_KEY:`, where `HYSTRIX_COLLAPSER_KEY` is the "name" of the collapser. + +>The default name of the collapser, if not specified, is the type name of the collapser. + +The following example configures the number of milliseconds after which a batch of requests that have been created by the collapser with a name of `sample` triggers and runs all of the requests: + +`Hystrix:Collapser:sample:TimerDelayInMilliseconds=400` + +The tables in the sections that follow specify all of the possible settings. + +>The settings provided in the tables follow the Netflix Hystrix implementation closely. Consequently, you should read the [Configuration section](https://github.com/Netflix/Hystrix/wiki/Configuration) on the Netflix Hystrix wiki for more detail on each setting and how it affects Hystrix collapser operations. + +#### Collapser Sizing Settings + +The following table describes the settings that control the sizing of various aspects of collapsers: + +| Key | Description | Default | +| --- | --- | --- | +| `MaxRequestsInBatch` | Sets the max number of requests in a batch. | `Int32.MaxValue` | +| `TimerDelayInMilliseconds` | Delay before a batch is executed. | 10 | +| `RequestCacheEnabled` | Indicates whether request cache is enabled. | `true` | + +There is no additional prefix used in these settings. + +The following listing shows an example: + +`Hystrix:Collapser:sample:TimerDelayInMilliseconds=400` + +#### Collapser Metrics Settings + +The following table describes the settings that control the behavior of capturing metrics from Hystrix collapsers. + +| Key | Description | Default | +| --- | --- | --- | +| `RollingStats:TimeInMilliseconds` | Duration of the statistical rolling window. Used by circuit breaker and for publishing. | 10000 | +| `RollingStats:NumBuckets` | Number of buckets into which the rolling statistical window is divided. | 10 | +| `RollingPercentile:Enabled` | Indicates whether execution latencies should be tracked and calculated as percentiles. | `true` | +| `RollingPercentile:TimeInMilliseconds` | Duration of the rolling window in which execution times are kept to allow for percentile calculations. | 60000 | +| `RollingPercentile:NumBuckets` | Number of buckets into which the RollingPercentile window will be divided. | 6 | +| `RollingPercentile:BucketSize` | Maximum number of execution times that are kept per bucket. | 100 | + +Each setting is prefixed with a key of `metrics`, as shown in the following example: + +`Hystrix:Collapser:sample:Metrics:RollingPercentile:Enabled=false` + +### Configuring Hystrix Settings + +The most convenient way to configure any of the settings for Hystrix mentioned above is to put them in a file and then use one of the file-based .NET configuration providers to read them. + +The following example shows some Hystrix settings in JSON (e.g. `appsettings.json`) that configure the `FortuneService` command to use a thread pool with a name of `FortuneServiceTPool`. Since there are no thread pool settings provided for `FortuneServiceTPool` all the defaults will be used in its definition. + +```json +{ + "Spring": { + "Application": { + "Name": "fortuneui" + } + }, + "Eureka": { + "Client": { + "ServiceUrl": "http://localhost:8761/eureka/", + "ShouldRegisterWithEureka": false + } + }, + "Hystrix": { + "Command": { + "FortuneService": { + "ThreadPoolKeyOverride": "FortuneServiceTPool" + } + } + } + ... +} +``` + +All of the Steeltoe samples and most of the .NET templates are already set up to read from `appsettings.json`. + +### Adding Commands to Container + +Once you have defined your configuration data and read in your configuration, you are ready to add the Hystrix commands to the dependency injection container, thereby making them available for injection into any of your application components. There are several Steeltoe extension methods available to help. + +>Adding your commands to the container is not required. You can create them at any point in your application by simply `new'ing` them your self. + +To make your Hystrix commands injectable, use the `AddHystrixCommand()` extension methods provided by Steeltoe in the `ConfigureServices()` method of the `Startup` class, as shown in the following example: + +```csharp +using Steeltoe.CircuitBreaker.Hystrix; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + public void ConfigureServices(IServiceCollection services) + { + // Add Steeltoe Discovery Client service + services.AddDiscoveryClient(Configuration); + + // Add Hystrix command FortuneService to Hystrix group "FortuneService" + services.AddHystrixCommand("FortuneService", Configuration); + + // Add framework services. + services.AddMvc(); + ... + } + ... +} +``` + +You must follow one important requirement if you wish to use the `AddHystrixCommand()` extension methods; When you define your `HystrixCommand`, define a public constructor with the first argument a `IHystrixCommandOptions` (that is, `HystrixCommandOptions`). You need not create or populate the `IHystrixCommandOptions`. The `AddHystrixCommand()` extension method does that for you by using the configuration data you provide in the extension method call. + +The following example shows how to define a compatible constructor: + +```csharp +public class FortuneServiceCommand : HystrixCommand +{ + IFortuneService _fortuneService; + ILogger _logger; + + public FortuneServiceCommand(IHystrixCommandOptions options, + IFortuneService fortuneService, ILogger logger) : base(options) + { + _fortuneService = fortuneService; + _logger = logger; + IsFallbackUserDefined = true; + } +} +``` + +Notice that `FortuneServiceCommand` inherits from `HystrixCommand`. It is a command that returns results of type `Fortune`. Further notice that the constructor has `IHystrixCommandOptions` as a first argument. You can add additional constructor arguments. + +### Using Commands in Applications + +If you have used the `AddHystrixCommand()` extension methods described earlier, you can get an instance of the command in your controller or view by adding the command as an argument in the constructor. + +The following example controller uses a Hystrix command called `FortuneServiceCommand`, which was added to the container by using `AddHystrixCommand("FortuneService", Configuration)`. + +The controller uses the `GetFortuneAsync()` method on the injected command to retrieve a fortune, as shown in the following example: + +```csharp +public class HomeController : Controller +{ + FortuneServiceCommand _fortuneServiceCommand; + + public HomeController(FortuneServiceCommand fortuneServiceCommand) + { + _fortuneServiceCommand = fortuneServiceCommand; + } + + [HttpGet("random")] + public async Task GetRandomFortune() + { + return await _fortuneServiceCommand.GetFortuneAsync(); + } + + [HttpGet] + public IActionResult Index() + { + return View(); + } + + } +} +``` + +The following example shows the definition of the Hystrix command used in the preceding example: + +```csharp +using Steeltoe.CircuitBreaker.Hystrix; + +public class FortuneServiceCommand : HystrixCommand +{ + IFortuneService _fortuneService; + ILogger _logger; + + public FortuneServiceCommand(IHystrixCommandOptions options, + IFortuneService fortuneService, ILogger logger) : base(options) + { + _fortuneService = fortuneService; + _logger = logger; + IsFallbackUserDefined = true; + } + public async Task GetFortuneAsync() + { + return await ExecuteAsync(); + } + protected override async Task RunAsync() + { + var result = await _fortuneService.RandomFortuneAsync(); + _logger.LogInformation("Run: {0}", result); + return result; + } + + protected override async Task RunFallbackAsync() + { + _logger.LogInformation("RunFallback"); + return await Task.FromResult(new Fortune() { Id = 9999, Text = "You will have a happy day!" }); + } +} +``` + +The `FortuneServiceCommand` class is a Hystrix command and is intended to be used in retrieving `Fortune` instances from a `Fortune` microservice. It uses another service, `IFortuneService` to actually make the request. + +In the preceding example, notice that the `FortuneServiceCommand` constructor takes an `IHystrixCommandOptions` as its first parameter. This is the command's configuration, and it has been previously populated with configuration data during `Startup`. + +Further notice that the two protected methods, `RunAsync()` and `RunFallbackAsync()`, are the worker methods for the command and are the methods that do the work of the Hystrix command. + +The `RunAsync()` method uses the `IFortuneService` to make a REST request of the Fortune microservice, returning the result as a `Fortune`. The `RunFallbackAsync()` method returns a hard-coded `Fortune`. + +To invoke the command, the controller code invokes the async method, `GetFortuneAsync()`, to start command execution. This method calls the `HystrixCommand` method `ExecuteAsync()`. + +There are multiple ways for commands to begin running. + +To execute a command synchronously, use the `Execute()` method, as shown in the following example: + +```csharp +var command = new FortuneServiceCommand(...); +var result = command.Execute(); +``` + +To execute a command asynchronously, use the `ExecuteAsync()` method, as follows: + +```csharp +var command = new FortuneServiceCommand(...); +var result = await command.ExecuteAsync(); +``` + +You can also use `Rx.NET` extensions and observe the results of a command by using the `Observe()` method. The `Observe()` method returns a "hot" observable, which has already started execution upon return. The following listing shows an example: + +```csharp +var command = new FortuneServiceCommand(...); +IObservable observable = command.Observe(); +var result = await observable.FirstOrDefaultAsync(); +``` + +Alternatively, you can use the `ToObservable()` method to return a `cold` observable for the command. Upon return, the command has not started running. Instead, when you `Subscribe()` to it, the underlying command begin to run, and the results are available in the Observer's `OnNext(result)` method. The following listing shows an example: + +```csharp +var command = new FortuneServiceCommand(...); +IObservable cold = command.ToObservable(); +IDisposable subscription = cold.Subscribe((result) => { Console.WriteLine(result); }); +``` + +### Adding Collapsers to Container + +In addition to Hystrix commands, you also might want to use Hystrix collapsers in your applications. Hystrix collapsers let you collapse multiple requests into a batch of requests that can then be executed by a single underlying `HystrixCommand`. + +Collapsers can be configured to use a batch size or an elapsed time since the creation of the batch as triggers for executing the underlying Hystrix command. + +There are two styles of request-collapsing supported by Hystrix: `request-scoped` and `globally-scoped`. You configure which style to use when you construct the collapser. The default is `request-scoped`. A `request-scoped` collapser collects a batch of requests for each `HystrixRequestContext`. A `globally-scoped` collapser collects a batch across multiple `HystrixRequestContext` instances. + +As with Hystrix commands, you can also add Hystrix collapsers to the service container, making them available for injection in your application. You can use several Steeltoe extension methods to help you accomplish this. + +>Adding collapsers to the container is not required. You can create them in your application at any point. + +If you do want to have them injected, you can use the `AddHystrixCollapser()` extension methods provided by the Steeltoe package in the `ConfigureServices()` method of the `Startup` class, as follows: + +```csharp +using Steeltoe.CircuitBreaker.Hystrix; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + public void ConfigureServices(IServiceCollection services) + { + // Add Steeltoe Discovery Client service + services.AddDiscoveryClient(Configuration); + + // Add Hystrix collapser to the service container + services.AddHystrixCollapser("FortuneServiceCollapser", Configuration); + + // Add framework services. + services.AddMvc(); + ... + } + + ... +} +``` + +As with Hystrix commands, you must follow an important requirement if you wish to use the `AddHystrixCollapser()` extension methods: When you define your `HystrixCollapser`, you must define a public constructor with a `IHystrixCollapserOptions` (that is, `HystrixCollapserOptions`) as the first argument. You need not create or populate its contents. Instead, the `AddHystrixCollapser()` extension method does that for you by using the configuration data you provide in the method call. + +The following example shows how to define a compatible constructor: + +```csharp +public class FortuneServiceCollapser : HystrixCollapser, Fortune, int>, +{ + ILogger _logger; + ILoggerFactory _loggerFactory; + IFortuneService _fortuneService; + + public FortuneServiceCollapser(IHystrixCollapserOptions options, + IFortuneService fortuneService, ILoggerFactory logFactory) : base(options) + { + _logger = logFactory.CreateLogger(); + _loggerFactory = logFactory; + _fortuneService = fortuneService; + } +} +``` + +Notice that `FortuneServiceCollapser` inherits from `HystrixCollapser, Fortune, int>`. It is a collapser that returns results of type `List`. Further notice that the constructor has `IHystrixCollapserOptions` as a first argument and that you can add additional constructor arguments. However, the first argument must be a `IHystrixCollapserOptions`. + +### Using Collapsers in Applications + +You can use Hystrix collapsers in a similar way to the way you use Hystrix commands. If you add the collapser to the service container, you can inject it into any controller, view, or other services created by the container. + +The following example controller uses a Hystrix collapser called `FortuneServiceCollapser` that was added to the container by using `AddHystrixCollapser("FortuneCollapser", Configuration)`. + +The controller uses the `ExecuteAsync()` method on the injected command to retrieve a fortune by `Id`, as shown in the following example: + +```csharp +public class HomeController : Controller +{ + FortuneServiceCollapser _fortuneService; + + public HomeController(FortuneServiceCollapser fortuneService) + { + _fortuneService = fortuneService; + } + + [HttpGet("random")] + public async Task Random() + { + // Fortune IDs are 1000-1049 + int id = random.Next(50) + 1000; + return GetFortuneById(id); + } + + [HttpGet] + public IActionResult Index() + { + return View(); + } + + protected Task GetFortuneById(int id) + { + // Use the FortuneServiceCollapser to obtain a Fortune by its Fortune Id + _fortuneService.FortuneId = id; + return _fortuneService.ExecuteAsync(); + } + +} +``` + +The following listing shows the definition of the Hystrix collapser used in the previous example: + +```csharp +using Steeltoe.CircuitBreaker.Hystrix; + +public class FortuneServiceCollapser : HystrixCollapser, Fortune, int> +{ + ILogger _logger; + ILoggerFactory _loggerFactory; + IFortuneService _fortuneService; + + public FortuneServiceCollapser(IHystrixCollapserOptions options, + IFortuneService fortuneService, ILoggerFactory logFactory) : base(options) + { + _logger = logFactory.CreateLogger(); + _loggerFactory = logFactory; + _fortuneService = fortuneService; + } + + public virtual int FortuneId { get; set; } + + public override int RequestArgument { get { return FortuneId; } } + + protected override HystrixCommand> CreateCommand(ICollection> requests) + { + _logger.LogInformation("Creating MultiFortuneServiceCommand to handle {0} number of requests", requests.Count); + return new MultiFortuneServiceCommand( + HystrixCommandGroupKeyDefault.AsKey("MultiFortuneService"), + requests, + _fortuneService, + _loggerFactory.CreateLogger()); + } + + protected override void MapResponseToRequests(List batchResponse, ICollection> requests) + { + foreach(var f in batchResponse) + { + foreach(var r in requests) + { + if (r.Argument == f.Id) + { + r.Response = f; + } + } + } + } +} +``` + +The `FortuneServiceCollapser` class is a Hystrix collapser and is intended to batch up requests for `Fortune` instances and then run a single Hystrix command called `MultiFortuneServiceCommand` to return a `List`. + +To understand how the collapser functions, you first need to understand what happens during the processing of an incoming request. For each incoming request, each separate run of a `FortuneServiceCollapser` instance causes the Hystrix collapser to add a request into a batch of requests to be handed off to a `MultiFortuneServiceCommand` created by `CreateCommand()`, shown in the previous example. + +Notice that `CreateCommand()` takes a collection of `ICollapsedRequest` requests as an argument. Each element of that collection represents a request for a specific `Fortune` referred to by `Id` (an Integer) as an argument. For each of those requests, `CreateCommand` returns the Hystrix command responsible for executing those requests and returning a list of `Fortunes`. + +Next, notice the `MapResponseToRequests` method. After the `MultiFortuneServiceCommand` finishes, some logic must be applied to map the `Fortunes` returned from the command (as `List batchResponse`) to the individual requests (in `ICollection> requests`) that we started with. Doing so enables each separate execution of a `FortuneServiceCollapser` that has been used to group a request to run asynchronously and to return the `Fortune` that was requested by it. + +As with Hystrix commands, you have multiple ways in which you can cause collapsers to begin running. + +To execute a collapser synchronously, you can use the `Execute()` method, as shown in the following example: + +```csharp +var collapser = new FortuneServiceCollapser(...); +var result = collapser.Execute(); +``` + +To execute a collapser asynchronously, you can use the `ExecuteAsync()` method: + +```csharp +var collapser = new FortuneServiceCollapser(...); +var result = await collapser.ExecuteAsync(); +``` + +You can also use `Rx.NET` extensions and observe the results by using the `Observe()` method. The `Observe()` method returns a `hot` observable that has already started execution. + +```csharp +var collapser = new FortuneServiceCollapser(...); +IObservable observable = collapser.Observe(); +var result = await observable.FirstOrDefaultAsync(); +``` + +Alternatively, you can use the `ToObservable()` method to return a `cold` observable that has not started. Then, when you `Subscribe()` to it, the underlying collapser begins execution, and the results are available in the Observer's `OnNext(result)` method. + +```csharp +var collapser = new FortuneServiceCollapser(...); +IObservable cold = collapser.ToObservable(); +IDisposable subscription = cold.Subscribe((result) => { Console.WriteLine(result); }); +``` + +### Using Hystrix Metrics + +As `HystrixCommand` instances run, they generate metrics and status information on outcomes and latency and thread pool usage. This information can be useful in monitoring and managing your applications. The Hystrix Dashboard lets you extract and view these metrics in real time. + +With Steeltoe, you can currently choose from two dashboards to view the captured metrics. + +The first is the [Netflix Hystrix Dashboard](https://github.com/Netflix/Hystrix/wiki/Dashboard). This dashboard is appropriate when you are not running your application on Cloud Foundry/Tanzu Application Service -- for example, when you are developing and testing your application locally on your desktop. + +The second is the [Spring Cloud Services Hystrix Dashboard](https://docs.vmware.com/en/Spring-Cloud-Services-for-VMware-Tanzu/2.1/spring-cloud-services/GUID-index.html). This dashboard is part of the [Spring Cloud Services v2](https://docs.pivotal.io/spring-cloud-services/) offering and is made available to applications through the normal service instance binding mechanisms on Cloud Foundry. + +> As of Spring Cloud Services 3.x, the Hystrix Dashboard has been deprecated. The dashboard is still supported in version 2.x. + +You should use the `Steeltoe.CircuitBreaker.Hystrix.MetricsEventsCore` package in an ASP.NET Core application when targeting the Netflix Hystrix Dashboard. When added to your application, it exposes a new REST endpoint in your application: `/hystrix/hystrix.stream`. This endpoint is used by the Netflix dashboard in receiving `SSE` metrics and status events from your application. + +You should use the `Steeltoe.CircuitBreaker.Hystrix.MetricsStreamCore` package in an ASP.NET Core application when targeting the Spring Cloud Services Hystrix Dashboard. When added to your application, it starts up a background thread and uses messaging to push the metrics to the bound dashboard. + +Regardless of which dashboard or package you choose to use, to enable your application to emit metrics and status information, you must make three changes in your `Startup` class: + +* Add Hystrix Metrics stream service to the service container +* Use Hystrix Request context middleware in pipeline + +To add the metrics stream to the service container, you must use the `AddHystrixMetricsStreams()` extension method in the `ConfigureService()` method in your `Startup` class, as follows: + +```csharp +using Steeltoe.CircuitBreaker.Hystrix; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + public void ConfigureServices(IServiceCollection services) + { + // Add Steeltoe Discovery Client service + services.AddDiscoveryClient(Configuration); + + // Add Hystrix command FortuneService to Hystrix group "FortuneServices" + services.AddHystrixCommand("FortuneServices", Configuration); + + // Add framework services. + services.AddMvc(); + + // Add Hystrix Metrics to container + services.AddHystrixMetricsStreams(Configuration); + ... + } + ... +} +``` + +Next, you must configure the Hystrix `Request` contexts be initialized and available in every request being processed in the request processing pipeline. You can do so in the `Configure()` method of the `Startup` class as shown in this example: + +```csharp +using Steeltoe.CircuitBreaker.Hystrix; + +public class Startup { + ... + public void Configure(IApplicationBuilder app) + { + app.UseStaticFiles(); + + // Use Hystrix Request contexts + app.UseHystrixRequestContext(); + + app.UseMvc(); + } + ... +} +``` + +#### Netflix Hystrix Dashboard + +Once you have made the changes described earlier, you can then use the Netflix Hystrix Dashboard by following these instructions: + +##### Run Hystrix Dashboard with Docker + +There are a few images available on Docker Hub that provide basic Hystrix Dashboard functionality. This example has been tested with: + +```bash +docker run --rm -ti -p 7979:7979 --name steeltoe-hystrix steeltoeoss/hystrix-dashboard +``` + +Once this image is up and running, you should be able to browse to your [local dashboard](http://localhost:7979/hystrix/) and provide the address of the Hystrix stream(s) you wish to monitor. + +> NOTE: This image may be running on a separate network than your application. Remember to provide a stream address that is accessible from within the Docker network. This may require using the external IP address of your workstation or the name of the machine instead of 127.0.0.1 or localhost. + +> NOTE: This Hystrix Dashboard image is not production ready and is intended for development and testing only. + +##### Run Hystrix Dashboard with Java + +To run a Hystrix Dashboard without Docker: + +1. Install Java 8 JDK. +1. Install Maven 3.x. +1. Clone the Spring Cloud Samples Hystrix dashboard: `cd https://github.com/spring-cloud-samples/hystrix-dashboard` +1. Change to the hystrix dashboard directory: `cd hystrix-dashboard` +1. Start the server `mvn spring-boot:run` +1. Open a browser window and connect to the dashboard: +1. In the first field, enter the endpoint that is exposing the hystrix metrics (eg: ) +1. Click the monitor button. +1. Interact with the application to trigger usage of the circuits. Observe the values changing in the Hystrix dashboard. + +#### Cloud Foundry/TAS Dashboard + +When you want to use a Hystrix Dashboard on Cloud Foundry/Tanzu Application Service, you must have previously installed Spring Cloud Services. If that has been done, you can create and bind a instance of the dashboard to the application by using the Cloud Foundry CLI, as follows: + +```bash +# Create Hystrix dashboard instance named `myHystrixService` +cf create-service p-circuit-breaker-dashboard standard myHystrixService + +# Wait for service to become ready +cf services +``` + +For more information on using the Hystrix Dashboard on Cloud Foundry, see the [Spring Cloud Services v2](https://docs.vmware.com/en/Spring-Cloud-Services-for-VMware-Tanzu/2.1/spring-cloud-services/GUID-index.html) documentation. + +Once the service is bound to your application, the settings are available in `VCAP_SERVICES`. + +Once you have performed the steps described earlier and you have made the changes described in the use metrics section, you can use the Spring Cloud Services dashboard by following these instructions: + +1. Open a browser and connect to the TAS Apps Manager. +1. Follow [these instructions](https://docs.vmware.com/en/Spring-Cloud-Services-for-VMware-Tanzu/2.1/spring-cloud-services/GUID-circuit-breaker-using-the-dashboard.html) to open the Hystrix Dashboard service. +1. Use your application and see the metrics begin to flow. diff --git a/api/v4/circuitbreaker/index.md b/api/v4/circuitbreaker/index.md new file mode 100644 index 00000000..21e8f5ca --- /dev/null +++ b/api/v4/circuitbreaker/index.md @@ -0,0 +1,9 @@ +# Circuit Breakers + +The Steeltoe Circuit Breaker framework provides applications with an implementation of the Circuit Breaker pattern. Cloud-native architectures typically consist of multiple layers of distributed services. End-user requests may require multiple calls to these services, and failures in lower-level services can spread to other dependent services and cascade up to the end user. Heavy traffic to a failing service can also make it difficult to repair. By using Circuit Breaker frameworks, you can prevent failures from cascading and provide fallback behavior until a failing service is restored to normal operation. + + + +When applied to a service, a circuit breaker watches for failing calls to the service. If failures reach a certain threshold, it “opens” (or breaks) the circuit and automatically redirects calls to the specified fallback mechanism. This gives the failing service time to recover. + +There are several options to choose from when implementing the Circuit Breaker pattern. Steeltoe has initially chosen to support one based on Hystrix, Netflix's Latency and Fault Tolerance library for distributed systems. For more information about Hystrix, see the [Netflix/Hystrix Wiki](https://github.com/Netflix/Hystrix/wiki) and the [Spring Cloud Netflix](https://projects.spring.io/spring-cloud/) documentation. diff --git a/api/v4/configuration/cloud-foundry-provider.md b/api/v4/configuration/cloud-foundry-provider.md new file mode 100644 index 00000000..dade4d92 --- /dev/null +++ b/api/v4/configuration/cloud-foundry-provider.md @@ -0,0 +1,246 @@ +# Cloud Foundry Provider + +The Cloud Foundry provider enables the standard Cloud Foundry environment variables (`VCAP_APPLICATION`, `VCAP_SERVICES`, and `CF_*`) to be parsed and accessed as configuration data within a .NET application. + +Cloud Foundry creates and uses these environment variables to communicate an application's environment and configuration to the application code running inside a container. More specifically, the values found in `VCAP_APPLICATION` provide information about the application's resource limits, routes (URIs), and version number, among other things. The `VCAP_SERVICES` environment variable provides information about the external services (databases, caches, and so on) to which the application is bound, along with details on how to contact those services. + +You can read more information on the Cloud Foundry environment variables at the [Cloud Foundry docs](https://docs.cloudfoundry.org/devguide/deploy-apps/environment-variable.html) website. + +## Usage + +You should have a good understanding of how the .NET [Configuration services](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) work before starting to use this provider. + +In order to use the Steeltoe Cloud Foundry provider, you need to do the following: + +1. Add a NuGet package reference to your project. +1. Add the provider to the Configuration Builder. +1. Configure Cloud Foundry options classes by binding configuration data to the classes. +1. Inject and use the Cloud Foundry Options to access Cloud Foundry configuration data. + +### Add NuGet Reference + +To use the provider, you need to add a reference to the appropriate Steeltoe Cloud Foundry NuGet based on the type of the application you are building and what Dependency Injector you have chosen, if any. The following table describes the available packages: + +| Package | Description | .NET Target | +| --- | --- | --- | +| `Steeltoe.Extensions.Configuration.CloudFoundryBase` | Base functionality. No dependency injection. | .NET Standard 2.0 | +| `Steeltoe.Extensions.Configuration.CloudFoundryCore` | Includes base. Adds ASP.NET Core dependency injection. | ASP.NET Core 3.1+ | + +To add this type of NuGet to your project, add a `PackageReference` resembling the following: + +```xml + +... + +... + +``` + +### Add Configuration Provider + +To parse the Cloud Foundry environment variables and make them available in the application's configuration, you need to add the Cloud Foundry configuration provider to the `ConfigurationBuilder`, as follows: + +The following example shows how to do so: + +```csharp +using Steeltoe.Extensions.Configuration; +... + +var builder = new ConfigurationBuilder() + .SetBasePath(env.ContentRootPath) + .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) + .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) + + // Add VCAP_* configuration data + .AddCloudFoundry(); +Configuration = builder.Build(); +... + +``` + +When developing a .NET Core application, you can do the same thing by using the `AddCloudFoundryConfiguration()` extension method for either the `IWebHostBuilder` or Generic `IHostBuilder`. The following example shows how to do so: + +```csharp +public class Program +{ + public static void Main(string[] args) + { + BuildWebHost(args).Run(); + } + public static IWebHost BuildWebHost(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseCloudHosting() + + // Add VCAP_* configuration data + .AddCloudFoundryConfiguration() + .UseStartup() + .Build(); +} +``` + +### Access Configuration Data + +Once the configuration has been built, the values from the `VCAP_APPLICATION` and `VCAP_SERVICES` environment variables have been added to the application's configuration data and become available under keys prefixed with `vcap:application` and `vcap:services` respectively. + +You can access the values from the `VCAP_APPLICATION` environment variable settings directly from the configuration as follows: + +```csharp +var config = builder.Build(); +var appName = config["vcap:application:application_name"]; +var instanceId = config["vcap:application:instance_id"]; +... +``` + +A list of all `VCAP_APPLICATION` keys is available in the [VCAP_APPLICATION](https://docs.CloudFoundry.org/devguide/deploy-apps/environment-variable.html#VCAP-APPLICATION) topic of the Cloud Foundry documentation. + +You can also directly access the values from the `VCAP_SERVICES` environment variable. For example, to access the information about the first instance of a bound Cloud Foundry service with a name of `service-name`, you could code the following: + +```csharp +var config = builder.Build(); +var name = config["vcap:services:service-name:0:name"]; +var uri = config["vcap:services:service-name:0:credentials:uri"]; +... +``` + +A list of all `VCAP_SERVICES` keys is available in the [VCAP_SERVICES](https://docs.CloudFoundry.org/devguide/deploy-apps/environment-variable.html#VCAP-SERVICES) topic of the Cloud Foundry documentation. + +>This provider uses the built-in .NET [JSON Configuration Parser](https://github.com/aspnet/Configuration/tree/dev/src/Microsoft.Extensions.Configuration.Json) when parsing the JSON provided in the `VCAP_*` environment variables. As a result, you can expect the exact same key names and behavior as you see when parsing JSON configuration files (such as `appsettings.json`) in your application. + +### Access Configuration Data as Options + +#### Using the ConfigureCloudFoundryOptions() Method + +Alternatively, instead of accessing the Cloud Foundry configuration data directly from the configuration, you can use the .NET [Options](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) framework together with [Dependency Injection](https://docs.microsoft.com/aspnet/core/fundamentals/dependency-injection). + +The Cloud Foundry provider includes two additional classes, `CloudFoundryApplicationOptions` and `CloudFoundryServicesOptions`. You can configured both through the options framework to hold the parsed `VCAP_*` data by using the options `Configure()` feature. + +To use it in an ASP.NET Core application, add the the following to the `ConfigureServices()` method in the `Startup` class: + +```csharp +using Steeltoe.Extensions.Configuration.CloudFoundry; + +public void ConfigureServices(IServiceCollection services) +{ + // Setup Options framework with DI + services.AddOptions(); + + // Add Steeltoe Cloud Foundry Options to service container + services.ConfigureCloudFoundryOptions(Configuration); +} +``` + +The `ConfigureCloudFoundryOptions(Configuration)` method call uses the Options framework to bind the `vcap:application` configuration values to an instance of `CloudFoundryApplicationOptions` and binds the `vcap:services` values to an instance of `CloudFoundryServicesOptions`. + +Both of these method calls also add these objects to the service container as `IOptions`. + +Once this is done, you can access these configuration objects in the controllers or views of an application by using normal Dependency Injection, as follows: + +```csharp +using Steeltoe.Extensions.Configuration.CloudFoundry; + +public class HomeController : Controller +{ + public HomeController(IOptions appOptions, + IOptions serviceOptions) + { + AppOptions = appOptions.Value; + ServiceOptions = serviceOptions.Value; + } + + CloudFoundryApplicationOptions AppOptions { get; private set; } + CloudFoundryServicesOptions ServiceOptions { get; private set; } + + // GET: // + public IActionResult Index() + { + ViewData["AppName"] = AppOptions.ApplicationName; + ViewData["AppId"] = AppOptions.ApplicationId; + ViewData["URI-0"] = AppOptions.ApplicationUris[0]; + + ViewData[ServiceOptions.ServicesList[0].Label] = ServiceOptions.ServicesList[0].Name; + ViewData["client_id"]= ServiceOptions.ServicesList[0].Credentials["client_id"].Value; + ViewData["client_secret"]= ServiceOptions.ServicesList[0].Credentials["client_secret"].Value; + ViewData["uri"]= ServiceOptions.ServicesList[0].Credentials["uri"].Value; + return View(); + } +} +``` + +#### ConfigureCloudFoundryService() + +As an alternative to using `CloudFoundryServicesOptions` to access Cloud Foundry service data, you can also use `ConfigureCloudFoundryService()` or `ConfigureCloudFoundryServices()` to easily gain access to service data. + +These methods let you define an `Options` class that represents a particular type of Cloud Foundry service binding and then use either method to select that data from `VCAP_SERVICES` and bind the data to it. + +To do this, you first need to create an `Options` class that derives from `CloudFoundryServicesOptions`. That class must match the data provided in `VCAP_SERVICES`. + +The following example shows how to do this for a MySql service binding on PCF: + +```csharp +using Steeltoe.Extensions.Configuration.CloudFoundry; + +public class MySqlServiceOption : CloudFoundryServicesOptions +{ + public MySqlServiceOption() { } + public MySqlServiceOption(IConfiguration config) : base(config) { } + public MySqlCredentials Credentials { get; set; } +} + +public class MySqlCredentials +{ + public string Hostname { get; set; } + public int Port { get; set; } + public string Name { get; set; } + public string Username { get; set; } + public string Password { get; set; } + public string Uri { get; set; } + public string JdbcUrl { get; set; } +} +``` + +Next in your `Startup` class you can use either `ConfigureCloudFoundryService()` or `ConfigureCloudFoundryServices()` to bind the service data from `VCAP_SERVICES` to your `TOption`. There are multiple ways to do this depending on your needs. + +You can use the `ConfigureCloudFoundryService()` method to select a specific Cloud Foundry service binding from `VCAP_SERVICES` by specifying a service name. Alternatively, you can use `ConfigureCloudFoundryServices()` to bind to all services of a particular type by specifying a Cloud Foundry service label. + +The following listing shows some examples: + +```csharp +using Steeltoe.Extensions.Configuration.CloudFoundry; + +public void ConfigureServices(IServiceCollection services) +{ + // Setup Options framework with DI + services.AddOptions(); + + // Bind VCAP_SERVICES data for mySql2 service instance to MySqlServiceOption + services.ConfigureCloudFoundryService(Configuration, "mySql2"); + + // Bind VCAP_SERVICES data for all p-mysql service instances to MySqlServiceOption + services.ConfigureCloudFoundryServices(Configuration, "p-mysql"); +} +``` + +All of this is built by using the Microsoft provided `Options` framework. As a result we can leverage the `Named` `Options` feature Microsoft has implemented in options binding and configure each `TOption` with a name equal to the Cloud Foundry service name found in `VCAP_SERVICES`. + +What this means is that, within a controller, you can inject the `IOptionsSnapshot` or `IOptionsMonitor` as you normally would and then access the option by name (for example: specific Cloud Foundry service binding instance). + +The following listing shows how to do so: + +```csharp + public class HomeController : Controller + { + private IOptionsSnapshot _mySqlOptions; + private MySqlServiceOption MySqlOptions + { + get + { + return _mySqlOptions.Get("mySql2"); + } + } + + public HomeController(IOptionsSnapshot mySqlOptions) + { + _mySqlOptions = mySqlOptions; + } + } +``` diff --git a/api/v4/configuration/config-server-provider.md b/api/v4/configuration/config-server-provider.md new file mode 100644 index 00000000..8cee8650 --- /dev/null +++ b/api/v4/configuration/config-server-provider.md @@ -0,0 +1,349 @@ +# Config Server Provider + +This provider enables the Spring Cloud Config Server to be used as a source of configuration data for a .NET application. + +The Spring Cloud Config Server is an application configuration service that gives you a central place to manage an application's configuration values externally across all environments. As an application moves through the deployment pipeline from development to test and into production, you can use the config server to manage the configuration between environments and be certain that the application has everything it needs to run when you migrate it. The config server easily supports labelled versions of environment-specific configurations and is accessible to a wide range of tooling for managing its content. + +To gain a better understanding of the Spring Cloud Config Server, you should read the [Spring Cloud](https://projects.spring.io/spring-cloud/) documentation. + +In addition to the Quick Start provided later, you can refer to several other Steeltoe sample applications when you need to understand how to use this provider: + +* [AspDotNetCore/Simple](https://github.com/SteeltoeOSS/Samples/tree/master/Configuration/src/Simple): ASP.NET Core sample application showing how to use the open source Config Server. +* [MusicStore](https://github.com/SteeltoeOSS/Samples/tree/master/MusicStore): A sample application showing how to use all of the Steeltoe components together in a ASP.NET Core application. This is a microservices based application built from the ASP.NET Core MusicStore reference app provided by Microsoft. +* [FreddysBBQ](https://github.com/SteeltoeOSS/Samples/tree/master/FreddysBBQ): A polyglot microservices-based sample application showing inter-operability between Java and .NET on Cloud Foundry. It is secured with OAuth2 Security Services and uses Spring Cloud Services. + +## Usage + +You should know how the .NET [Configuration services](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) work before starting to use this provider. A basic understanding of the `ConfigurationBuilder` and how to add providers to the builder is necessary. + +You should also have a good understanding of the [Spring Cloud Config Server](https://cloud.spring.io/spring-cloud-config/). + +To use the Steeltoe provider, you need to do the following: + +1. Add the appropriate NuGet package reference to your project. +1. Configure the settings that the Steeltoe provider uses to access the Spring Cloud Config Server. +1. Add the provider to the configuration builder. +1. Optionally, configure the returned config server config data as Options. +1. Inject and use `Options` or `ConfigurationRoot` to access configuration data. + +### Add NuGet Reference + +You can choose one of two Config Server client NuGets, depending on your needs. + +If you plan on only connecting to the open source version of [Spring Cloud Config Server](https://projects.spring.io/spring-cloud/), you should use one of the packages described by the following table, depending on your application type and needs: + +| Package | Description | .NET Target | +| --- | --- | --- | +| `Steeltoe.Extensions.Configuration.ConfigServerBase` | Base functionality. No dependency injection. | .NET Standard 2.0 | +| `Steeltoe.Extensions.Configuration.ConfigServerCore` | Includes base. Adds ASP.NET Core dependency injection. | ASP.NET Core 3.1+ | + +To add this type of NuGet to your project, add a `PackageReference` that resembles the following: + +```xml + +... + +... + +``` + +### Configure Settings + +The most convenient way to configure settings for the provider is to put them in a file and then use one of the other file-based configuration providers to read them. + +The following example shows some provider settings that have been put in a JSON file. Only two settings are really necessary. `Spring:Application:Name` configures the "application name" to be `sample`, and `Spring:Cloud:Config:Uri` configures the address of the config server. + +>The `Spring:Application:Name` is also used by other Steeltoe libraries in addition to the config server. + +```json +{ + "Spring": { + "Application":{ + "Name": "sample" + }, + "Cloud": { + "Config": { + "Uri": "http://localhost:8888" + } + } + } + ... +} +``` + +The following table describes all the settings that can be used to configure the behavior of the provider: + +| Key | Description | Default | +| --- | --- | --- | +| `Name` | Application name for which to request config. | `IHostingEnvironment.ApplicationName` | +| `Enabled` | Enable or disable config server client. | `true` | +| `Uri` | Comma-separated list of config server endpoints. | `http://localhost:8888` | +| `Env` | Environment or profile used in the server request. | `IHostingEnvironment.EnvironmentName` | +| `ValidateCertificates` | Enable or disable certificate validation. | `true` | +| `Label` | Comma-separated list of labels to request. | master | +| `Timeout` | Time to wait for response from server, in milliseconds. | 6000 | +| `Username` | Username for basic authentication. | none | +| `Password` | Password for basic authentication. | none | +| `FailFast` | Enable or disable failure at startup. | `false` | +| `Token` | HashiCorp Vault authentication token. | none | +| `TokenTtl` | HashiCorp Vault token renewal TTL. Valid on Cloud Foundry only. | 300000ms | +| `TokenRenewRate` | HashiCorp Vault token renewal rate. Valid on Cloud Foundry only. | 60000ms | +| `Retry:Enabled` | Enable or disable retry logic. | false | +| `Retry:MaxAttempts` | Max retries if retry enabled. | 6 | +| `Retry:InitialInterval` | Starting interval. | 1000ms | +| `Retry:MaxInterval` | Maximum retry interval. | 2000ms | +| `Retry:Multiplier` | Retry interval multiplier. | 1.1 | +| `ClientId` | OAuth2 client ID when using OAuth security. | none | +| `ClientSecret` | OAuth2 client secret when using OAuth security. | none | +| `AccessTokenUri` | URI to use to obtain OAuth access token. | none | +| `Discovery:Enabled` | Enable or disable discovery first feature. | `false` | +| `Discovery:ServiceId` | Config Server service ID to use in discovery first feature. | `configserver` | +| `Health:Enabled` | Enable or disable config server health check contributor. | `true` | +| `Health:TimeToLive` | Health check contributor cache time to live in ms. | 60*5ms | + +As mentioned earlier, all settings should start with `Spring:Cloud:Config:` + +>If you use self-signed certificates on Cloud Foundry, you might run into certificate validation issues when pushing an application. A quick way to work around this is to disable certificate validation until a proper solution can be put in place. + +### Add Configuration Provider + +Once the provider's settings have been defined and put in a file (such as a JSON file), the next step is to read them and make them available to the provider. + +In the next C# example, the provider's configuration settings from the preceding example are put in the `appsettings.json` file included with the application. Then, by using the .NET JSON configuration provider, we can read the settings by adding the JSON provider to the configuration builder (`AddJsonFile("appsettings.json")`. + +Then, after the JSON provider has been added, you can add the config server provider to the builder. We include an extension method, `AddConfigServer()`, that you can use to do so. + +Because the JSON provider that reads `appsettings.json` has been added `before` the config server provider, the JSON-based settings become available to the Steeltoe provider. Note that you do not have to use JSON for the Steeltoe settings. You can use any of the other off-the-shelf configuration providers for the settings (such as INI files, environment variables, and so on). + +You need to use the `Add*()` methods to add the source of the config server clients settings (`AddJsonFile(..)`) *before* you use `AddConfigServer(..)`. Otherwise, the settings are not picked up and used. + +The following sample shows how to add a configuration provider: + +```csharp +using Steeltoe.Extensions.Configuration; +... + +var builder = new ConfigurationBuilder() + .SetBasePath(env.ContentRootPath) + .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) + .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true) + .AddConfigServer(env) + .AddEnvironmentVariables(); + +var config = builder.Build(); +... +``` + +When developing a .NET Core application, you can accomplish the same thing by using the `AddConfigServer()` extension method for either the `IWebHostBuilder` or Generic `IHostBuilder`, as follows: + +```csharp +public class Program +{ + public static void Main(string[] args) + { + BuildWebHost(args).Run(); + } + public static IWebHost BuildWebHost(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseCloudHosting() + + // Use Config Server for configuration data + .AddConfigServer() + .UseStartup() + .Build(); +} +``` + +### Bind to Cloud Foundry + +When you want to use a Config Server on Cloud Foundry and you have installed [Spring Cloud Services](https://docs.pivotal.io/spring-cloud-services/), you can create and bind an instance of it to your application by using the Cloud Foundry CLI, as follows: + +```bash +# Create config server instance named `myConfigServer` +cf create-service p-config-server standard myConfigServer + +# Wait for service to become ready +cf services + +# Bind the service to `myApp` +cf bind-service myApp myConfigServer + +# Restage the app to pick up change +cf restage myApp +``` + +Once the service is bound to the application, the config server settings are available and can be set up in `VCAP_SERVICES`. + +Then, when you push the application, the Steeltoe provider takes the settings from the service binding and merges those settings with the settings that you have provided through other configuration mechanisms (such as `appsettings.json`). + +If there are any merge conflicts, the last provider added to the configuration takes precedence and overrides all others. + +>As of Steeltoe 3.0.0, an additional NuGet reference for `Steeltoe.Connector.CloudFoundry` is required to read in service bindings. Just adding the reference will be enough for service bindings to be discoverable. + +### Access Configuration Data + +When the `ConfigurationBuilder` builds the configuration, the Config Server client makes the appropriate REST calls to the Config Server and retrieves the configuration values based on the settings that have been provided. + +If there are any errors or problems accessing the server, the application continues to initialize, but the values from the server are not retrieved. If this is not the behavior you want, you should set the `Spring:Cloud:Config:FailFast` to `true`. Once that is done, the application fails to start if problems occur during the build. + +After the configuration has been built, you can access the retrieved data directly by using `IConfiguration`. The following example shows how to do so: + +```csharp +... +var config = builder.Build(); +var property1 = config["myconfiguration:property1"]; +var property2 = config["myconfiguration:property2"]; +... +``` + +Alternatively, you can create a class to hold your configuration data and then use the [Options](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) framework together with [Dependency Injection](https://docs.asp.net/en/latest/fundamentals/dependency-injection.html) to inject an instance of the class into your controllers and view. + +To do so, first create a class representing the configuration data you expect to retrieve from the server, as follows: + +```csharp +public class MyConfiguration { + public string Property1 { get; set; } + public string Property2 { get; set; } +} +``` + +Next, use the `Configure<>()` method to tell the `Options` framework to create an instance of that class with the returned data. For the preceding `MyConfiguration` class, you could add the following code to the `ConfigureServices()` method in the `Startup` class in an ASP.NET Core application, as follows: + +```csharp +public class Startup +{ + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; set; } + public void ConfigureServices(IServiceCollection services) + { + // Setup Options framework with DI + services.AddOptions(); + + // Configure IOptions + services.Configure(Configuration.GetSection("myconfiguration")); + ... + } +} +``` + +The preceding `Configure(Configuration.GetSection("myconfiguration"))` method call instructs the Options framework to bind the `myconfiguration:...` values to an instance of the `MyConfiguration` class. + +After this has been done, you can gain access to the data in your `Controller` or `View` through dependency injection. The following example shows how to do so: + +```csharp + +public class HomeController : Controller +{ + public HomeController(IOptions myOptions) + { + MyOptions = myOptions.Value; + } + + MyConfiguration MyOptions { get; private set; } + + // GET: // + public IActionResult Index() + { + ViewData["property1"] = MyOptions.Property1; + ViewData["property2"] = MyOptions.Property2; + return View(); + } +} +``` + +### Enable Logging + +Sometimes, it is desirable to turn on debug logging in the provider. + +To do so, you need to inject the `ILoggerFactory` into the `Startup` class constructor by adding it as an argument to the constructor. Once you have access to it, you can add a console logger to the factory and also set its minimum logging level set to `Debug`. + +Once that is done, pass the `ILoggerFactory` to the Steeltoe configuration provider. The provider then uses it to establish a logger with the debug-level logging turned on. + +The following example shows how to enable Debug-level logging: + +```csharp +using Steeltoe.Extensions.Configuration; + + LoggerFactory logFactory = new LoggerFactory(); + logFactory.AddConsole(minLevel: LogLevel.Debug); + + // Set up configuration sources. + var builder = new ConfigurationBuilder() + .SetBasePath(env.ContentRootPath) + .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) + .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) + .AddEnvironmentVariables() + .AddConfigServer(env, logFactory); +... +``` + +### Configuring Discovery First + +The default behavior for the Steeltoe Config Client is to access the Config Server through the `Spring:Cloud:Config:Uri` configuration setting. This of course requires that the application needs a `appsettings.json` or an environment variable with the Config Servers address set in `Spring:Cloud:Config:Uri`. This mode of operation, the default, is called `Config First`. + +Alternatively, you can set up your Config Server to register with a discovery service such as Netflix Eureka. This enables you application to lookup the address of the Config Server by using a discovery Service instead of configuring it in `appsettings.json`. Note that you have to specifically configure your Config Server deployment to register with a discovery service as this does not happen automatically. See the Spring Cloud Config Server documentation for how to do so. + +However, with the default `Config First` mode of the Steeltoe client you are not able to take advantage of the Config Server registration unless you change the clients mode of operation to `Discovery First`. To do so: + +1. If your application does not use a service discovery service, you need to configure your application to do so. See the Steeltoe Discovery documentation for the details of how to do so. Note that, currently, we support only Netflix Eureka. At a minimum, you need to configure the Eureka Server address. +1. Change the Steeltoe Config Server client setting `Spring:Cloud:Config:Discovery:Enabled` to `true` (the default is `false`). +1. Optionally, if you change the service name registered by the Config Server with Eureka, you can use `Spring:Cloud:Config:Discovery:ServiceId=YourNewName` to change the name used by the client for lookup. + +Note that the price for using this mode of operation is an extra network round trip on startup to locate the Config Server service registration. The benefit is, as long as the discovery service is at a fixed point, the Config Server can change its address and no changes to applications are needed. + +### Configuring Health Contributor + +The Config Server package provides a Steeltoe management health contributor that attempts to load configuration from the Config Server and contributes health information to the results of the health endpoint. + +If you use the `AddConfigServer()` extension method of the `IWebHostBuilder`, the contributor is automatically added to the container and is automatically picked up and used. Otherwise, you can manually add the contributor to the container by using the `AddConfigServerHealthContributor()` extension method. + +The contributor is enabled by default but can be disabled by setting `Spring:Cloud:Config:Health:Enabled=false`. + +The response from the Config Server is cached for performance reasons. The default cache time to live is five minutes. To change that value, set the `Spring:Cloud:Config:Health:TimeToLive=xxxx` setting (in milliseconds). + +### Configuring Fail Fast + +In some cases, you may want to fail the startup of your application if it cannot connect to the Config Server. If this is the desired behavior, set the configuration setting `Spring:Cloud:Config:FailFast=true` to make the client halt with an `Exception`. + +### Configuring Retry + +If you expect that the Config Server may occasionally be unavailable when your application starts, you can make it keep trying after a failure. + +First, you need to set `Spring:Cloud:Config:FailFast=true`. Then you need to enable retry by setting `Spring:Cloud:Config:Retry:Enabled=true`. + +The default behavior is to retry six times with an initial back-off interval of 1000ms and an exponential multiplier of 1.1 for subsequent back-offs. You can configure these settings (and others) by setting the `Spring:Cloud:Config:Retry:*` configuration settings described earlier. + +### Configuring Multiple URLs + +To ensure high availability when you have multiple instances of Config Server deployed and expect one or more instances to be unavailable from time to time, you can either specify multiple URLs as a comma-separated list for `Spring:Cloud:Config:Uri` or have all your instances register in a Service Registry such as Eureka (if you use `Discovery First` mode). + +Note that doing so ensures high availability only when the Config Server is not running or responding (for example, when the server has exited or when a connection timeout has occurred). For example, if the Config Server returns a 500 (Internal Server Error) response or the Steeltoe client receives a 401 from the Config Server (due to bad credentials or other causes), the client does not try to fetch properties from other URLs. An error of that kind indicates a user issue rather than an availability problem. + +If you use HTTP basic auth security on your Config Server, it is currently possible to support only per-Config Server auth credentials if you embed the credentials in each URL you specify for the `Spring:Cloud:Config:Uri` setting. If you use any other kind of security mechanism, you cannot currently support per-Config Server authentication and authorization. + +### Configuring Mutual TLS + +When Spring Cloud Config Server is configured to require Mutual TLS authentication, Steeltoe needs to be provided with a valid client certificate. A client certificate can be provided by an implementation of `Steeltoe.Common.ICertificateSource` that has been included in the configuration or directly as a property on the settings object. + +Steeltoe includes `ICertificateSource` implementations that work with PEM files or a single file (such as PKCS#12), as follows: + +```csharp +var configurationBuilder = new ConfigurationBuilder() + .AddPemFiles("instance.crt", "instance.key") /* OR */ .AddCertificateFile("instance.p12") + .AddConfigServer(); +``` + +If that methodology does not work for your use case, you can supply an x509Certificate2 on the `ConfigServerClientSettings` object, as follows: + +```csharp +var clientCertificate = new X509Certificate2(); // construct or retrieve your certificate as needed +var settings = new ConfigServerClientSettings { ClientCertificate = clientCertificate }; +var configurationBuilder = new ConfigurationBuilder() + .AddConfigServer(settings); +``` + +>A single `ICertificateSource` can be used for both Config Server and [Eureka mTLS connections](../discovery/netflix-eureka.md#configuring-mutual-tls). diff --git a/api/v4/configuration/hosting-extensions.md b/api/v4/configuration/hosting-extensions.md new file mode 100644 index 00000000..c76389e4 --- /dev/null +++ b/api/v4/configuration/hosting-extensions.md @@ -0,0 +1,27 @@ +# Hosting Extensions + +Many cloud hosting providers, including TAS, dynamically provide port numbers at runtime. For ASP.NET Core applications, Steeltoe provides extension methods that let both `IWebHostBuilder` and `IHostBuilder` read in these values and configure the application to listen on the assigned port. + +## The UseCloudHosting Method + +The `UseCloudHosting` method is provided in the `Steeltoe.Common.Hosting` NuGet package. This extension automatically uses the `PORT` or `SERVER_PORT` environment variables (when present) to set the address the application listens on for HTTP traffic. When a port is not found in the environment or passed in as a parameter, the application is configured to listen on port 8080. The following sample illustrates basic usage: + +```csharp + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + ... + .UseCloudHosting() // Listen for HTTP on port defined in 'PORT', 'SERVER_PORT' or else 8080 + ... +``` + +The extension includes an optional parameter to explicitly set the ports used for HTTP and HTTPS, which is particularly useful when you run multiple services (which will later be deployed to a cloud platform) at once on your workstation. The following example shows how to set the ports: + +```csharp + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + ... + .UseCloudHosting(5001, 5002) // Listen for HTTP on port defined in 'PORT', 'SERVER_PORT' or else listen for HTTP on 5001 and HTTPS on 5002 + ... +``` + +>If either environment variable `PORT` or `SERVER_PORT` is found, neither of the optional parameters will be used. diff --git a/api/v4/configuration/index.md b/api/v4/configuration/index.md new file mode 100644 index 00000000..0c81eab3 --- /dev/null +++ b/api/v4/configuration/index.md @@ -0,0 +1,24 @@ +# Application Configuration + +Steeltoe Configuration builds on the .NET configuration API, which enables developers to configure an application with values from a variety of sources by using configuration providers. Each provider supports reading a set of name-value pairs from a given source location and adding them into a combined multi-level configuration dictionary. + +Each value contained in the configuration is tied to a string-typed key or name. The values are organized by key into a hierarchical list of name-value pairs in which the components of the keys are separated by a colon (for example, `Spring:Application:key = value`). + +.NET supports the following providers and sources: + +* Command-line arguments +* File sources (such as JSON, XML, and INI) +* Environment variables +* Custom providers + +To better understand .NET configuration services, you should read the [ASP.NET Core](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) documentation. Note that, while the documentation link suggests this service is tied to ASP.NET Core, it is not. It can be used in many different application types, including Console, ASP.NET 4.x., UWP, and others. + +Steeltoe adds additional configuration providers to the preceding list: + +* Cloud Foundry +* Kubernetes (Config Maps and Secrets) +* Placeholder resolvers +* RandomValue generator +* Spring Cloud Config Server + +The following sections provide more more detail on each of these new providers. diff --git a/api/v4/configuration/kubernetes-providers.md b/api/v4/configuration/kubernetes-providers.md new file mode 100644 index 00000000..0e271fb4 --- /dev/null +++ b/api/v4/configuration/kubernetes-providers.md @@ -0,0 +1,226 @@ +# Kubernetes Providers + +Steeltoe's Kubernetes Configuration Providers use the official [.NET Kubernetes Client](https://github.com/kubernetes-client/csharp/) to communicate with the Kubernetes API to find ConfigMaps and Secrets and add them to the configuration of .NET applications. + +You can read more about [ConfigMaps](https://kubernetes.io/docs/concepts/configuration/configmap/) and [Secrets](https://kubernetes.io/docs/concepts/configuration/secret/) in the official Kubernetes docs. + +## Conventions + +Both of the Kubernetes configuration providers use the same conventions to search for resources. These conventions are designed to feel familiar and provide some working defaults while remaining configurable. + +### Namespace + +These configuration providers will only search a single namespace. The default namespace searched is `default`. Should you wish to change this behavior, use any configuration provider that has been added prior to the call to `AddKubernetes()` to set a different value under the key `Spring:Cloud:Kubernetes:NameSpace`. + +### Resource names + +These configuration providers will search for resources named `` and `.`. + +`` is determined by the first defined value between `Spring:Cloud:Kubernetes:Name`, `Spring:Application:Name` and the assembly name. + +`` is defined by the environment variable `ASPNETCORE_ENVIRONMENT`, falling back to a default value of `Production` if the variable has not been set. + +## Usage + +These providers integrate with [.NET Configuration](https://docs.microsoft.com/aspnet/core/fundamentals/configuration), you may wish to read more of that documentation if you're not familiar with it. + +The steps to use both Steeltoe Kubernetes configuration providers are the same: + +1. Add a NuGet package reference to your project. +1. Add the provider to the `HostBuilder` or `ConfigurationBuilder`. +1. Inject and use `Options` or `Configuration` to access configuration data. +1. Optionally, provide additional configuration for the Kubernetes Client, ConfigMaps and Secrets +1. Optionally, enable debug logging of interactions with Kubernetes API + +### Add NuGet Reference + +You can choose one of two Kubernetes Configuration NuGet packages, depending on your needs. Both configuration providers are included in the base package. + +| Package | Description | .NET Target | +| --- | --- | --- | +| `Steeltoe.Extensions.Configuration.KubernetesBase` | Base functionality. No dependency injection. | .NET Standard 2.0 | +| `Steeltoe.Extensions.Configuration.KubernetesCore` | Includes base. Adds ASP.NET Core dependency injection. | ASP.NET Core 3.1+ | + +To add this type of NuGet to your project, add a `PackageReference` that resembles the following: + +```xml + +... + +... + +``` + +### Add Configuration Providers to HostBuilder + +Extensions are provided for both `HostBuilder` and `WebHostBuilder`, with matching functionality. Optional parameters are provided for special configuration of the `KubernetesClient` or inclusion of a `LoggerFactory`, for logging operations within the configuration providers. + +For standard usage, add the configuration providers like this: + +```csharp +public static void Main(string[] args) +{ + CreateHostBuilder(args).Build().Run(); +} + +public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }) + .AddKubernetesConfiguration() +``` + +>This functionality is included in the `Steeltoe.Extensions.Configuration.KubernetesCore`. Beyond adding the configuration providers, `KubernetesApplicationOptions` is added to the `IServiceCollection` for use by these configuration providers and other Steeltoe components. + +#### Add Configuration Providers to ILoggingBuilder + +An extension is also provided for `ILoggingBuilder`. This extension is called by the extensions for `HostBuilder` and `WebHostBuilder`, so you will not need to use both. Optional parameters are provided for special configuration of the `KubernetesClient` or inclusion of a `LoggerFactory`, for logging operations within the configuration providers. + +For standard usage, add the configuration providers like this: + +```csharp +public static void Main(string[] args) +{ + CreateHostBuilder(args).Build().Run(); +} + +public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }) + .ConfigureAppConfiguration(builder => builder.AddKubernetes()); +``` + +### Access Configuration Data + +When the `ConfigurationBuilder` builds the configuration, the Kubernetes providers make the appropriate calls to the Kubernetes API server and retrieve the configuration values based on the conventions and settings that have been provided. + +If there are any errors or problems accessing the server, the application continues to initialize, but the values from the server are not retrieved. If this is not the behavior you want, you should set the `Spring:Cloud:Config:FailFast` to `true`. Once that is done, the application fails to start if problems occur during the build. + +After the configuration has been built, you can access the retrieved data directly by using `IConfiguration`. The following example shows how to do so: + +```csharp +... +var config = builder.Build(); +var property1 = config["myconfiguration:property1"]; +var property2 = config["myconfiguration:property2"]; +... +``` + +## Additional Configuration + +These configuration providers are enabled by default when added to your configuration builder. An off switch is available by setting `Spring:Cloud:Kubernetes:Enabled=false` in any configuration provider that is added earlier in the chain. + +### Kubernetes Client Configuration + +The KubernetesClient that is used for these configuration providers can be configured through the `kubernetesClientConfiguration` parameter on `AddKubernetes` and `AddKubernetesConfiguration` extension methods, or by setting configuration entries in other configuration providers that are added to the `IConfigurationBuilder` prior to the call to `AddKubernetes`. + +These are the settings available: + +| Key | Description | Default | +| --- | --- | --- | +| `Paths` | A list of paths to Kubernetes config files | null | +| `NameEnvironmentSeparator` | Used to separate app name from environment name in resource queries | `.` | + +All settings above should start with `Spring:Cloud:Kubernetes:Config`. + +### ConfigMaps Configuration + +| Key | Description | Default | +| --- | --- | --- | +| `Enabled` | Enables retrieval of Secrets | `true` | +| `Sources` | List of additional Secrets to retrieve | `null` | + +Additional ConfigMaps can be specified in the Sources list using the name and namespace: + +```json +{ + "Spring": { + "Cloud": { + "Kubernetes": { + "Config": { + "Sources": [{ + "Name": "my-configmap", + "Namespace": "my-namespace" + }] + } + } + } + } +} +``` + +All settings above should start with `Spring:Cloud:Kubernetes:Config`. + +### Secrets Configuration + +| Key | Description | Default | +| --- | --- | --- | +| `Enabled` | Enables retrieval of Secrets | `true` | +| `Sources` | List of additional Secrets to retrieve | `null` | + +Additional Secrets can be specified in the Sources list using the name and namespace: + +```json +{ + "Spring": { + "Cloud": { + "Kubernetes": { + "Secrets": { + "Sources": [{ + "Name": "my-secret", + "Namespace": "my-namespace" + }] + } + } + } + } +} +``` + +All settings above should start with `Spring:Cloud:Kubernetes:Secrets`. + +For more information about risks and best practices when consuming Secrets through the API refer to the [best practices](https://kubernetes.io/docs/concepts/configuration/secret/#best-practices). + +### Reload Settings + +Reload settings are shared by both ConfigMaps and Secrets. These can be configured with a prefix + +| Key | Description | Default | +| --- | --- | --- | +| `Mode` | Method of monitoring for changes in configuration data | `Polling` | +| `Period` | Time in seconds between polls | 15 | +| `ConfigMaps` | Enables reloading of ConfigMaps | `false` | +| `Secrets` | Enables reloading of Secrets | `false` | + +All settings above should start with `Spring:Cloud:Kubernetes:Reload`. + +>`Mode` can also be set to `Event`, which will attempt to maintain an open connection to the API server for real-time reloading of configuration data. + +### Enable Logging + +Sometimes, it is desirable to turn on debug logging in the provider. + +To do so, you need to inject the `ILoggerFactory` into the `Startup` class constructor by adding it as an argument to the constructor. Once you have access to it, you can add a console logger to the factory and also set its minimum logging level set to `Debug`. + +Once that is done, pass the `ILoggerFactory` to the Steeltoe configuration provider. The provider then uses it to establish a logger with the debug-level logging turned on. + +The following example shows how to enable Debug-level logging: + +```csharp +var logFactory = new LoggerFactory(); +logFactory.AddConsole(minLevel: LogLevel.Debug); + +public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }) + ..AddKubernetesConfiguration(loggerFactory: logFactory); +... +``` diff --git a/api/v4/configuration/placeholder-provider.md b/api/v4/configuration/placeholder-provider.md new file mode 100644 index 00000000..e63e690d --- /dev/null +++ b/api/v4/configuration/placeholder-provider.md @@ -0,0 +1,204 @@ +# Placeholder Provider + +The Placeholder resolver enables usage of `${....}` placeholders in your configuration. The provider lets you define configuration values as placeholders in your configuration and have them be resolved to `real` values at runtime during configuration access. + +A placeholder takes the form of `${key:subkey1:subkey2?default_value}`, where `key:subkey1:subkey2` represents another key in the configuration. At runtime, when you access the key associated with the placeholder, the resolver is called to resolve the placeholder key to a value that exists in the configuration. If a value for the placeholder key is not found, the key is returned unresolved. If a `default_value` is specified in the placeholder, the `default_value` is returned instead. + +Note that placeholder defaults (for example, `default_value`) can be defined to be placeholders as well and those are resolved as well. + +## Usage + +You should have a good understanding of how the .NET [Configuration services](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) work before starting to use this provider. + +To use the Steeltoe Placeholder resolver provider, you need to: + +1. Add a NuGet package reference to your project. +1. Add the provider to the Configuration Builder. +1. Optionally, configure Options classes by binding configuration data to the classes. +1. Inject and use the Options classes or access configuration data directly. + +### Add NuGet Reference + +To use the provider, you need to add a reference to the appropriate Steeltoe NuGet based on the type of the application you are building and what dependency injector you have chosen, if any. The following table describes the available packages: + +| Package | Description | .NET Target | +| --- | --- | --- | +| `Steeltoe.Extensions.Configuration.PlaceholderBase` | Base functionality. No dependency injection. | .NET Standard 2.0 | +| `Steeltoe.Extensions.Configuration.PlaceholderCore` | Includes base. Adds ASP.NET Core dependency injection. | ASP.NET Core 3.1+ | + +To add this type of NuGet to your project, add a `PackageReference` resembling the following: + +```xml + +... + +... + +``` + +### Add Configuration Provider + +In order to have placeholders resolved when accessing your configuration data, you need to add the placeholder resolver provider to the `ConfigurationBuilder`. + +There are four different ways to do so: + +1. Add the resolver by using `ConfigurationBuilder` extension method `AddPlaceholderResolver()`. +1. Add the resolver to an already built configuration by using `IConfiguration` extension method `AddPlaceholderResolver()`. +1. Add the resolver by using the `IWebHostBuilder` extension method `AddPlaceholderResolver()`. +1. Use the `ConfigurePlaceholderResolver()` in `ConfigureServices()` to add the resolver to the already built `IConfiguration` and to replace it in the container. + +The following example shows how to add to the `ConfigurationBuilder`: + +```csharp +using Steeltoe.Extensions.Configuration.Placeholder; +... + +var builder = new ConfigurationBuilder() + .SetBasePath(env.ContentRootPath) + .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) + .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) + + // Add Placeholder resolver + .AddPlaceholderResolver(); +Configuration = builder.Build(); +... + +``` + +Extensions are also provided for quick addition to both `IHostBuilder` and `IWebHostBuilder`. Their usage is identical. The following example shows how to add to the `IWebHostBuilder`: + +```csharp +public class Program +{ + public static void Main(string[] args) + { + BuildWebHost(args).Run(); + } + public static IWebHost BuildWebHost(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseCloudHosting() + .AddPlaceholderResolver() + .UseStartup() + .Build(); +} +``` + +>It is important to understand that the Placeholder resolver works by wrapping and replacing the existing configuration providers already added to the `ConfigurationBuilder`. As a result you typically will want to add it as the last provider. + +### Access Configuration Data + +Once the configuration has been built, the placeholder resolver is used to resolve any placeholders as you access your configuration data. You can access the configuration data as your normally would, and the resolver tries to resolve any placeholder before returning the value for the key requested. + +Consider the following `appsettings.json` file: + +```json +{ + "Spring": { + "Application": { + "Name": "myName" + }, + "Cloud": { + "Config": { + "Name" : "${Spring:Application:Name?no_name}", + } + } + } + ... +} +``` + +When using the normal `IConfiguration` indexer to access the configuration, you see the Placeholder resolver do its thing: + +```csharp +var config = builder.Build(); + +Assert.Equal("myName", config["Spring:Cloud:Config:Name"]); +... +``` + +### Access Configuration Data as Options + +Alternatively, instead of accessing the configuration data directly from the configuration, you can also use the .NET [Options](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) framework together with placeholders. + +First, consider the following `appsettings.json` and `appsettings.Development.json` files: + +```json +// appsettings.json +{ + "Logging": { + "LogLevel": { + "Default": "Warning" + } + }, + "AllowedHosts": "*", + "ResolvedPlaceholderFromEnvVariables": "${PATH?NotFound}", + "UnresolvedPlaceholder": "${SomKeyNotFound?NotFound}", + "ResolvedPlaceholderFromJson": "${Logging:LogLevel:System?${Logging:LogLevel:Default?NotFound}}" +} +// appsettings.Development.json +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} +``` + +Notice that `ResolvedPlaceholderFromEnvVariables` uses a placeholder to reference the `PATH` environment variable, which is added to the configuration by the default Web host builder. +Also notice that `ResolvedPlaceholderFromJson` uses a placeholder to reference keys that come from the `.json` configuration files. + +Next, add the placeholder resolver to the `IWebHostBuilder` in `Program.cs` (or in any of the other ways described earlier): + +```csharp +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; +using Steeltoe.Extensions.Configuration.Placeholder; +public class Program +{ + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + + // Add Steeltoe Placeholder resolver to apps configuration providers + .AddPlaceholderResolver() + .UseStartup(); +} +``` + +Then, to use the configuration and the added placeholder resolver together with your Options classes, you can configure the Options as you normally would: + +```csharp + +// Options class +public class SampleOptions +{ + public string ResolvedPlaceholderFromEnvVariables { get; set; } + public string UnresolvedPlaceholder { get; set; } + public string ResolvedPlaceholderFromJson { get; set; } +} + +// Startup.cs +public class Startup +{ + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + public void ConfigureServices(IServiceCollection services) + { + // Setup Options framework with DI + services.AddOptions(); + + // Configure the SampleOptions class with configuration data + services.Configure(Configuration); + } + .... +} +``` diff --git a/api/v4/configuration/random-value-provider.md b/api/v4/configuration/random-value-provider.md new file mode 100644 index 00000000..5f3e8e9c --- /dev/null +++ b/api/v4/configuration/random-value-provider.md @@ -0,0 +1,108 @@ +# RandomValue Provider + +Sometimes, you might need to generate random values as part of your application's configuration values. + +The Steeltoe `RandomValue` generator is a configuration provider that you can use to do just that. It can produce integers, longs, uuids, or strings, as the following examples show: + +```csharp +var my_secret = config["random:value"]; +var my_number = config["random:int"]; +var my_big_number = config["random:long"]; +var my_uuid = config["random:uuid"]; +var my_number_less_than_ten = config["random:int(10)"]; +var my_number_in_range = config["random:int[1024,65536]"]; + +``` + +You can also use the generator together with property placeholders. For example, consider the following `appsettings.json`: + +```json +{ + "my": { + "secret": "${random:value}", + "number": "${random:int}", + "big_number": "${random:long}", + "uuid": "${random:uuid}", + "number_less_than_ten": "${random:int(10)}", + "number_in_range": "${random:int[1024,65536]}" + } +} +``` + +## Usage + +You should have a good understanding of how the .NET [Configuration services](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) work before starting to use this provider. + +In order to use the Steeltoe RandomValue provider, you need to: + +1. Add a NuGet package reference to your project. +1. Add the provider to the Configuration Builder. +1. Access random values from the `IConfiguration`. + +### Add NuGet Reference + +To use the provider, you need to add a reference to the appropriate Steeltoe NuGet. + +To do so, add a `PackageReference` resembling the following: + +```xml + +... + +... + +``` + +### Add Configuration Provider + +To have the ability to generate random values from the configuration, you need to add the `RandomValue` generator provider to the `ConfigurationBuilder`. + +The following example shows how to do so: + +```csharp +using Steeltoe.Extensions.Configuration.RandomValue; +... + +var builder = new ConfigurationBuilder() + .SetBasePath(env.ContentRootPath) + .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) + .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) + + // Add RandomValue generator + .AddRandomValueSource(); +Configuration = builder.Build(); +... + +``` + +>If you wish to generate random values as part of using placeholders, you need to add the `RandomValue` provider to the builder before you add the placeholder resolver. + +### Access Random Value Data + +Once the configuration has been built, the `RandomValue` generator can be used to generate values. You can access the configuration data by using the appropriate `random` keys. + +Consider the following `HomeController` example: + +```csharp +public class HomeController : Controller +{ + private IConfiguration _config; + public HomeController(IConfiguration config) + { + _config = config; + } + public IActionResult Index() + { + ViewData["random:int"] = _config["random:int"]; + ViewData["random:long"] = _config["random:long"]; + ViewData["random:int(10)"] = _config["random:int(10)"]; + ViewData["random:long(100)"] = _config["random:long(100)"]; + ViewData["random:int(10,20)"] = _config["random:int(10,20)"]; + ViewData["random:long(100,200)"] = _config["random:long(100,200)"]; + ViewData["random:uuid"] = _config["random:uuid"]; + ViewData["random:string"] = _config["random:string"]; + return View(); + } + ... +} +``` diff --git a/api/v4/connectors/cosmosdb.md b/api/v4/connectors/cosmosdb.md new file mode 100644 index 00000000..e97bac5d --- /dev/null +++ b/api/v4/connectors/cosmosdb.md @@ -0,0 +1,82 @@ +# CosmosDB + +This connector simplifies using Azure Cosmos DB. The connector is built to work with Azure Cosmos DB from either `Microsoft.Azure.Cosmos` or the newer package `Azure.Cosmos`. + +## Usage + +To use this connector: + +1. Create a Cosmos DB Service instance and bind it to your application. +1. Optionally, configure any CosmosDB client settings. +1. Optionally, add the Steeltoe Cloud Foundry configuration provider to your `ConfigurationBuilder`. + +### Add NuGet References + +To use the CosmosDB connector, add either [Microsoft.Azure.Cosmos](https://www.nuget.org/packages/Microsoft.Azure.Cosmos) or [Azure.Cosmos](https://www.nuget.org/packages/Azure.Cosmos/) (pre-release only as of this writing) as you would if you were not using Steeltoe. Then [add a reference to the appropriate Steeltoe Connector NuGet package](usage.md#add-nuget-references). + +### Configure Settings + +This connector supports several settings for local interaction with CosmosDB that are overridden by service bindings on deployment: + +```json +{ + "Cosmosdb": { + "Client": { + "Host": "https://localhost:8081", + "MasterKey": "" + } + } +} +``` + +The following table table describes all possible settings for the connector + +| Key | Description | Default | +| --- | --- | --- | +| `Host` | Protocol, hostname or IP Address and port of the server. | not set | +| `MasterKey` | Authentication for read/write access. | not set | +| `ReadOnlyKey` | Authentication for read-only access. | not set | +| `DatabaseId` | Name of the database to use. | not set | +| `UseReadOnlyCredentials` | Designate that the read-only key should be used. | `false` | +| `ConnectionString` | Full connection string. | Built from settings | + +>IMPORTANT: All of these settings should be prefixed with `CosmosDb:Client:`. + +The samples and most templates are already set up to read from `appsettings.json`. + +>If a `ConnectionString` is provided and `VCAP_SERVICES` are not detected (a typical scenario for local application development), the `ConnectionString` is used exactly as provided. + +### Cloud Foundry + +To use CosmosDB on Cloud Foundry, create and bind an instance to your application by using the Cloud Foundry CLI: + +```bash +# Create CosmosDB service +cf create-service azure-cosmosdb standard myCosmosDb + +# Bind service to `myApp` +cf bind-service myApp myCosmosDb + +# Restage the app to pick up change +cf restage myApp +``` + +>The connector is built to work with Azure Cosmos DB service instances that have been provisioned with the [Microsoft Azure Service Broker](https://docs.pivotal.io/partners/azure-sb/index.html). + +### Use CosmosClient + +Use Steeltoe's `ConnectionStringManager` to access connection information built by combining your `cosmosdb:client` settings with credentials from service bindings (when present) and create a new `CosmosClient`: + +```csharp +// read settings from "cosmosdb:client" and VCAP:services or services: +var configMgr = new ConnectionStringManager(configuration); +var cosmosInfo = configMgr.Get(); + +// these are mapped into the properties dictionary +var databaseName = cosmosInfo.Properties["DatabaseId"]; +var databaseLink = cosmosInfo.Properties["DatabaseLink"]; + +// container is not provided by a service binding, use your own config value to store it: +var containerName = configuration.GetValue("CosmosDb:Container"); +var cosmosClient = new CosmosClient(cosmosInfo.ConnectionString); +``` diff --git a/api/v4/connectors/extensibility.md b/api/v4/connectors/extensibility.md new file mode 100644 index 00000000..b9946027 --- /dev/null +++ b/api/v4/connectors/extensibility.md @@ -0,0 +1,36 @@ +# Extensibility + +As of version 3.0, Steeltoe ships a package named `Steeltoe.Connector.Abstractions`, which contains the interfaces and classes that define the extensibility points of Connectors. One of the core concepts in Connectors is that connections to backing services can be defined by some instance of `IServiceInfo`. + +Implementations of `IServiceInfo` will include at least the minimum amount of information needed in order to establish a connection with an instance or cluster of the given service type. + +Many of these service credentials can be represented in a Uri format, so most of the included `IServiceInfo` classes are based on `UriInfo`. + +## ServiceInfoFactory + +Every `IServiceInfo` should also have one corresponding class based on `ServiceInfoFactory` that can evaluate a generic `Steeltoe.Extensions.Configuration.Service` for compatibility and produce the right type of `IServiceInfo` as needed. `ServiceInfo` Factories are provided for a variety of services, including many of the types that are available on Cloud Foundry. + +If you'd like to include your own `ServiceInfos` without having them directly included in Steeltoe, use the `ServiceInfoFactoryAssemblyAttribute` on your assembly so that Steeltoe can find your `ServiceInfoFactory` classes at runtime by adding this to your `AssemblyInfo.cs` file: + +```csharp +using Steeltoe.Connector; + +[assembly: ServiceInfoFactoryAssembly] +``` + +## ServiceInfoCreator + +Every `ServiceInfoFactory` is managed within the `ServiceInfoCreator` class. The base `ServiceInfoCreator` should handle most of the heavy lifting with connecting configuration with `ServiceInfo` and `ServiceInfoFactories` together, but sometimes there are other rules that need to be applied. For example, logic that is specific to Cloud Foundry service bindings has been moved out to the new class `CloudFoundryServiceInfoCreator` + +If you'd like to change something about the way `ServiceInfoFactory` works without having your changes directly included in Steeltoe or when adding a new `ServiceInfoCreator`, use the `ServiceInfoCreatorAssemblyAttribute` on your assembly so that Steeltoe can find your `ServiceInfoCreator` class at runtime. + +For example, this is how the `CloudFoundryServiceInfoCreator` is identified for simple discovery in the `Steeltoe.Connector.CloudFoundry` package's `AssemblyInfo.cs` file: + +```csharp +using Steeltoe.Connector; +using Steeltoe.Connector.CloudFoundry; + +[assembly: ServiceInfoCreatorAssembly(typeof(CloudFoundryServiceInfoCreator))] +``` + +>A customized `ServiceInfoCreator` should not be required to add Service Infos or Service Info Factories diff --git a/api/v4/connectors/gemfire.md b/api/v4/connectors/gemfire.md new file mode 100644 index 00000000..f38bc2de --- /dev/null +++ b/api/v4/connectors/gemfire.md @@ -0,0 +1,99 @@ +# Apache Geode/GemFire + +>Note: This feature is available in version 2.3.0+. + +[VMware Tanzu GemFire](https://tanzu.vmware.com/gemfire) is VMware's distribution of [Apache Geode](https://geode.apache.org/). This connector was built for using GemFire in an application by using the [GemFire Native Client](https://gemfire-native.docs.pivotal.io/100/gemfire-native-client/about-client-users-guide.html) on Cloud Foundry. It has not been extensively tested under other deployment configurations, but is best-effort supported for other situations as well. + +>WARNING: The GemFire Native Client currently supports only 64 bit applications running on Windows. See [GemFire Native Client System Requirements](https://gemfire-native.docs.pivotal.io/100/gemfire-native-client/system_requirements.html) for more. + +## Usage + +To use this connector: + +1. Create a GemFire service instance and bind it to your application. +1. Optionally, configure GemFire client settings. +1. Add the Steeltoe Cloud Foundry config provider to you `ConfigurationBuilder`. +1. Add GemFire classes to your DI container. + +### Get the GemFire Driver + +Follow the instructions in the [GemFire Native Client documentation](https://gemfire-native.docs.pivotal.io/100/gemfire-native-client/install-upgrade-native.html) for instructions on downloading the driver and getting started with general driver usage. + +>TIP: To avoid committing the driver to source, copy the [script](https://github.com/SteeltoeOSS/steeltoe/blob/2.x/src/Connectors/EnableGemFire.ps1) that Steeltoe's CI process uses in your own pipelines. You need a [legacy API token](https://network.pivotal.io/docs/api#how-to-authenticate) for the script to complete. + +### Add NuGet Reference + +[Add a reference to the appropriate Steeltoe Connector NuGet package](usage.md#add-nuget-references). + +### Configure Settings + +The GemFire client is highly configurable, beyond the scope of this documentation. +Steeltoe does not interact with `geode.properties` or `cache.xml` files, but any settings found under `gemfire:client:properties` in your application's configuration are applied to the `CacheFactory`. +Steeltoe tries to map the properties node in your configuration to a `Dictionary` and then applies each entry to GemFire through the `Set` method on `CacheFactory`. + +For example, if you want to set the log-level and connection timeout, use the following in your `application.json` file: + +```json +{ + "gemfire": { + "client": { + "properties": { + "log-level": "fine", + "connect-timeout": "100ms" + } + } + } +} +``` + +See the [GemFire documentation](https://gemfire-native.docs.pivotal.io/100/geode-native-client/configuring/sysprops.html) for a more complete list of settings to configure. + +### Cloud Foundry + +To use GemFire Cloud Cache on Cloud Foundry: + +1. Create a service instance +1. Bind the instance to your application via either a manifest file or the CLI (shown below) +1. Create region (If the application is unable to do so automatically) + +```bash +# Create CloudCache service instance +cf create-service p-cloudcache dev-plan myPCCService + +# Bind service to `myApp` +cf bind-service myApp myPCCService + +# Restage the app to pick up change +cf restage myApp +``` + +If your application fails to [programmatically create regions](https://gemfire-native.docs.pivotal.io/100/geode-native-client/regions/regions.html#programmatic-region-creation), use the [gfsh CLI](https://gemfire.docs.pivotal.io/98/gemfire/tools_modules/gfsh/chapter_overview.html) to create it. You need the gfsh URL and the cluster operator credentials provided in the service binding: + +```json +"p-cloudcache": [{ + ... + "urls": { + "gfsh": "https://cloudcache-serviceguid.run.pcfone.io/gemfire/v1", + ... + }, + "users": [{ + "password": "********", + "roles": [ "cluster_operator" ], + "username": "********" + ... + }] +}] +``` + +Use gfsh to connect to the cluster and create the region: + +```bash +gfsh>connect --url=https://cloudcache-someguid.run.pcfone.io/gemfire/v1 --user=cluster_operator_****** --password=****** + +Successfully connected to: GemFire Manager HTTP service @ https://cloudcache-someguid.run.pcfone.io/gemfire/v1 + +Cluster-0 gfsh>create region --name=SteeltoeDemo --type=PARTITION + Member | Status +------------------------------------------------ | ------------------------------------------------------------------------------------ +cacheserver-71461c75-ba87-4207-8d6d-c84be814a601 | Region "/SteeltoeDemo" created on "cacheserver-71461c75-ba87-4207-8d6d-c84be814a601" +``` diff --git a/api/v4/connectors/index.md b/api/v4/connectors/index.md new file mode 100644 index 00000000..cbd46104 --- /dev/null +++ b/api/v4/connectors/index.md @@ -0,0 +1,14 @@ +# Service Connectors + +Steeltoe Service Connectors simplify the process of connecting to, using and monitoring backing services. Steeltoe Connectors are primarily a bonding layer between your infrastructure and your application. Connectors don't directly manipulate the connection to backing resources, but do contain logic for turning raw credentials into formatted connection strings and also provide health monitoring tools. + +Get started with the [usage guide](usage.md) or go directly to any supported technology: + +- [MySql](mysql.md) +- [Microsoft SQL Server](microsoft-sql-server.md) +- [PostgreSQL](postgresql.md) +- [RabbitMQ](rabbitmq.md) +- [OAuth](oauth.md) +- [MongoDB](mongodb.md) +- [CosmosDB](cosmosdb.md) +- [Redis](redis.md) diff --git a/api/v4/connectors/microsoft-sql-server.md b/api/v4/connectors/microsoft-sql-server.md new file mode 100644 index 00000000..64c09911 --- /dev/null +++ b/api/v4/connectors/microsoft-sql-server.md @@ -0,0 +1,280 @@ +# Microsoft SQL Server + +This connector simplifies using Microsoft SQL Server. The connector is built to work with `System.Data.SqlClient` and provides additional extension methods for using the Entity Framework. + +This connector provides an `IHealthContributor` that you can use in conjunction with the [Steeltoe Management Health](../management/health.md) check endpoint. + +## Usage + +You should know how the .NET [Configuration service](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) works before starting to use the connector. You need a basic understanding of the `ConfigurationBuilder` and how to add providers to the builder to configure the connector. + +You should also know how the ASP.NET Core [Startup](https://docs.microsoft.com/aspnet/core/fundamentals/startup) class is used in configuring the application services. Pay particular attention to the usage of the `ConfigureServices()` method. + +To use this connector: + +1. Create a Microsoft SQL Service instance and bind it to your application. +1. Optionally, configure any Microsoft SQL Server client settings (such as `appsettings.json`) you need. +1. Optionally, add the Steeltoe Cloud Foundry configuration provider to your `ConfigurationBuilder`. +1. Add `SqlConnection` or `DbContext` to your `IServiceCollection`. + +### Add NuGet Reference + +To use the Microsoft SQL Server connector, add one of the following Microsoft SQL Server packages: + +* [System.Data.SqlClient](https://www.nuget.org/packages/System.Data.SqlClient/) +* [Entity Framework](https://www.nuget.org/packages/EntityFramework/) +* [Microsoft.EntityFrameworkCore.SqlServer](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer/) + +Add the package as you would if you were not using Steeltoe. Then [add a reference to the appropriate Steeltoe Connector NuGet package](usage.md#add-nuget-references). + +### Configure Settings + +The Microsoft SQL Server connector supports several configuration options. You can use these settings to develop or test an application locally and then override them during deployment. + +The following Microsoft SQL Server connector configuration shows how to connect to SQL Server 2016 Express LocalDB: + +```json +{ + ... + "SqlServer": { + "Credentials": { + "ConnectionString": "Server=(localdb)\\mssqllocaldb;database=Steeltoe;Trusted_Connection=True;" + } + } + ... +} +``` + +The following table shows the available settings for the connector: + +|Key|Description |Steeltoe Default| +| --- | --- | --- | +| `Server` | Hostname or IP Address of server. | `localhost` | +| `Port` | Port number of server. | 1433 | +| `Username` | Username for authentication. | not set | +| `Password` | Password for authentication. | not set | +| `Database` | Schema to which to connect. | not set | +| `ConnectionString` | Full connection string. | Built from settings | +| `IntegratedSecurity` | Enable Windows Authentication (For local use only). | not set | + +>IMPORTANT: All of the settings shown in the preceding table should be prefixed with `SqlServer:Credentials:`. + +The samples and most templates are already set up to read from `appsettings.json`. + +>If a `ConnectionString` is provided and `VCAP_SERVICES` are not detected (a typical scenario for local application development), the `ConnectionString` is used exactly as provided. + +### Cloud Foundry + +To use Microsoft SQL Server on Cloud Foundry, you need a service instance bound to your application. If the [Microsoft SQL Server broker](https://github.com/cf-platform-eng/mssql-server-broker) is installed in your Cloud Foundry instance, use it to create a new service instance: + +```bash +cf create-service SqlServer sharedVM mySqlServerService +``` + +An alternative to the broker is to use a user-provided service to explicitly provide connection information to the application: + +```bash +cf cups mySqlServerService -p '{"pw": "|password|","uid": "|user id|","uri": "jdbc:sqlserver://|host|:|port|;databaseName=|database name|"}' +``` + +This connector works with the [Azure Service Broker](https://docs.pivotal.io/partners/azure-sb/). + +If you are creating a service for an application that has already been deployed, you need to bind the service and restart or restage the application with the following commands: + +```bash +# Bind service to `myApp` +cf bind-service myApp mySqlServerService + +# Restage the app to pick up change +cf restage myApp +``` + +If you have not already deployed the application, a reference in the `manifest.yml` file can take care of the binding for you. + +>The commands shown in the preceding example may not exactly match the service or plan names available in your environment. You may have to adjust the `create-service` command to fit your environment. Use `cf marketplace` to see what is available. + +Once the service is bound to your application, the connector's settings are available in `VCAP_SERVICES`. + +### Add SqlConnection + +To use an `SqlConnection` in your application, add it to the service container in the `ConfigureServices()` method of the `Startup` class: + +```csharp +using Steeltoe.Connector.SqlServer; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(...) + { + ... + } + public void ConfigureServices(IServiceCollection services) + { + // Add SqlConnection configured from Configuration + services.AddSqlServerConnection(Configuration); + + // Add framework services. + ... + } + ... +} +``` + +The `AddSqlServerConnection(Configuration)` method call shown in the previous example configures the `SqlConnection` by using the configuration built by the application and adds the connection to the service container. + +> By default, this extension method will automatically configure an `IHealthContributor` to report the health of this database connection. This behavior can be turned off by passing `false` for the parameter `addSteeltoeHealthChecks` + +### Use SqlConnection + +Once you have configured and added the connection to the service container, you can inject it and use it in a controller or a view: + +```csharp +using System.Data.SqlClient; +... +public class HomeController : Controller +{ + public IActionResult SqlData([FromServices] SqlConnection dbConnection) + { + dbConnection.Open(); + + SqlCommand cmd = new SqlCommand("SELECT * FROM TestData;", dbConnection); + SqlDataReader rdr = cmd.ExecuteReader(); + + while (rdr.Read()) + { + ViewData["Key" + rdr[0]] = rdr[1]; + } + + rdr.Close(); + dbConnection.Close(); + + return View(); + } +} +``` + +>The preceding code does not create a database or a table or insert data. As written, it fails unless you create the database, table, and data ahead of time. + +### Add DbContext + +#### Entity Framework 6 + +To use the Microsoft SQL connector with Entity Framework 6, inject a DbContext into your application by using the `AddDbContext<>()` method (provided by Steeltoe) that takes an `IConfiguration` as a parameter: + +```csharp +using Steeltoe.Connector.SqlServer.EF6; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(...) + { + ... + } + public void ConfigureServices(IServiceCollection services) + { + ... + services.AddDbContext(Configuration); + ... + } + ... +} +``` + +The `AddDbContext(..)` method call configures `TestContext` by using the configuration built earlier and then adds the `DbContext` (`TestContext`) to the service container. + +> This extension method will automatically configure an `IHealthContributor` to report the health of this database connection. + +Your `DbContext` does not need to be modified from a standard EF6 `DbContext` to work with Steeltoe: + +```csharp +using System.Data.Entity; +... + +public class TestContext : DbContext +{ + public TestContext(string connectionString) : base(connectionString) + { + } + public DbSet TestData { get; set; } +} +``` + +#### Entity Framework Core + +To use the Microsoft SQL Server connector with Entity Framework Core, inject a `DbContext` into your application with the standard `AddDbContext<>()` method, substituting Steeltoe's `UseSqlServer` method that takes an `IConfiguration` as a parameter in the options configuration for the standard `UseSqlServer` method. The following example demonstrates the basic usage: + +```csharp +using Steeltoe.Connector.SqlServer.EFCore; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(...) + { + ... + } + public void ConfigureServices(IServiceCollection services) + { + ... + services.AddDbContext(options => options.UseSqlServer(Configuration)); + + // see note below explaining AddSqlServerHealthContributor + services.AddSqlServerHealthContributor(Configuration); + ... + } + ... +} +``` + +> This extension method will _NOT_ configure an `IHealthContributor` for this database connection. The NuGet package Steeltoe.Connector.ConnectorCore provides an `IServiceCollection` extension method that will. Directly add the health contributor with the code `services.AddSqlServerHealthContributor(Configuration)` + +Your `DbContext` does not need to be modified from a standard `DbContext` to work with Steeltoe: + +```csharp +using Microsoft.EntityFrameworkCore; +... + +public class TestContext : DbContext +{ + public TestContext(DbContextOptions options) : base(options) + { + + } + public DbSet TestData { get; set; } +} + +``` + +If you need to set additional properties for the `DbContext` (such as `MigrationsAssembly` or connection retry settings), create an `Action`: + +```csharp +Action sqlServerOptionsAction = (o) => +{ + o.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name); + // Configuring Connection Resiliency: https://docs.microsoft.com/ef/core/miscellaneous/connection-resiliency + o.EnableRetryOnFailure(maxRetryCount: 15, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); +}; +``` + +Then pass your new options action into the `AddDbContext` method: + +```csharp +services.AddDbContext(options => options.UseSqlServer(Configuration, sqlServerOptionsAction)); +``` + +### Use DbContext + +Once you have configured and added the DbContext to the service container, you can inject it and use it in a controller or a view: + +```csharp +using Project.Models; +... +public class HomeController : Controller +{ + public IActionResult SqlData([FromServices] TestContext context) + { + return View(context.TestData.ToList()); + } +``` diff --git a/api/v4/connectors/mongodb.md b/api/v4/connectors/mongodb.md new file mode 100644 index 00000000..731cb38e --- /dev/null +++ b/api/v4/connectors/mongodb.md @@ -0,0 +1,106 @@ +# MongoDB + +This connector simplifies using MongoDB with the [.NET MongoDB Driver](https://docs.mongodb.com/ecosystem/drivers/csharp/). + +## Usage + +To use this connector: + +1. Create a MongoDB service instance and bind it to your application. +1. Optionally, configure any MongoDB client settings. +1. Optionally, add the Steeltoe Cloud Foundry config provider to your `ConfigurationBuilder`. +1. Add MongoDB classes to your DI container. + +### Add NuGet Reference + +To use the MongoDB connector, add the official [MongoDB.Driver NuGet package](https://www.nuget.org/packages/MongoDB.Driver/) as you would if you were not using Steeltoe. Then [add a reference to the appropriate Steeltoe Connector NuGet package](usage.md#add-nuget-references). + +### Configure Settings + +This connector supports several settings for local interaction with MongoDB that are overridden by service bindings on deployment: + +```json +{ + "MongoDb": { + "Client": { + "Server": "localhost", + "Port": 27017, + "Database": "SampleDb", + "Options": { + "ReplicaSet": "rs0" + } + } + } +} +``` + +The following table table describes all possible settings for the connector + +| Key | Description | Default | +| --- | --- | --- | +| `Server` | Hostname or IP Address of the server. | `localhost` | +| `Port` | Port number of the server. | 27017 | +| `Username` | Username for authentication. | not set | +| `Password` | Password for authentication. | not set | +| `Database` | Name of the database to use. | not set | +| `Options` | Any additional [options](https://mongodb.github.io/mongo-csharp-driver/2.7/apidocs/html/T_MongoDB_Driver_MongoClientSettings.htm), passed through as provided. | not set | +| `ConnectionString` | Full connection string. | Built from settings | + +>IMPORTANT: All of these settings should be prefixed with `MongoDb:Client:`. + +The samples and most templates are already set up to read from `appsettings.json`. + +>If a ConnectionString is provided and VCAP_SERVICES are not detected (a typical scenario for local app development), the ConnectionString will be used exactly as provided. + +### Cloud Foundry + +To use MongoDB on Cloud Foundry, create and bind an instance to your application by using the Cloud Foundry CLI, as shown in the following example: + +```bash +# Create MongoDB service +cf create-service mongodb-odb standalone_small myMongoDb + +# Bind service to `myApp` +cf bind-service myApp myMongoDb + +# Restage the app to pick up change +cf restage myApp +``` + +>The preceding commands assume you use the MongoDB Enterprise Service for PCF. If you use a different service, you may have to adjust the `create-service` command to fit your environment. + +### Add Mongo Client + +To use `MongoClient` and `MongoUrl` in your application, use the extension provided for Microsoft DI: + +```csharp +using Steeltoe.Connector.MongoDb; +public class Startup +{ + ... + public IServiceProvider ConfigureServices(IServiceCollection services) + { + services.AddMongoClient(Configuration); + } + ... +} +``` + +### Use Mongo Client + +The following example shows how to inject and use an `IMongoClient` and a `MongoUrl` in order to get an `IMongoDatabase` object: + +```csharp +public class SomeClass +{ + private readonly IMongoDatabase _database = null; + public SomeClass(IMongoClient mongoClient, MongoUrl mongoUrl) + { + _database = mongoClient.GetDatabase(mongoUrl.DatabaseName); + } + public IMongoCollection MyObjects + { + get { return _database.GetCollection("MyObjects"); } + } +} +``` diff --git a/api/v4/connectors/mysql.md b/api/v4/connectors/mysql.md new file mode 100644 index 00000000..5e53a513 --- /dev/null +++ b/api/v4/connectors/mysql.md @@ -0,0 +1,290 @@ +# MySQL + +This connector simplifies using MySQL ADO.NET providers in an application. + +Currently, the connector supports the following providers: + +* [Connector/NET](https://dev.mysql.com/doc/connector-net/en/) +* [MySqlConnector](https://mysql-net.github.io/MySqlConnector/) + +The following Steeltoe sample applications can help you understand how to use this connector: + +* [MusicStore](https://github.com/SteeltoeOSS/Samples/tree/master/MusicStore): A sample application showing how to use all of the Steeltoe components together in a ASP.NET Core application. This is a microservices based application built from the ASP.NET Core MusicStore reference app provided by Microsoft. +* [FreddysBBQ](https://github.com/SteeltoeOSS/Samples/tree/master/FreddysBBQ): A polyglot (Java and .NET) microservices-based sample application showing interoperability between Java- and .NET-based microservices running on Cloud Foundry, secured with OAuth2 Security Services and using Spring Cloud Services. + +This connector provides a `IHealthContributor` object, which you can use in conjunction with the [Steeltoe Management Health](../management/health.md) check endpoint. + +## Usage + +You should know how the .NET [configuration service](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) works before starting to use the connector. A basic understanding of the `ConfigurationBuilder` and how to add providers to the builder is necessary to configure the connector. + +You should also know how the ASP.NET Core [Startup](https://docs.microsoft.com/aspnet/core/fundamentals/startup) class is used in configuring the application services for the app. Pay particular attention to the usage of the `ConfigureServices()` method. + +To use this connector: + +1. Create a MySQL Service instance and bind it to your application. +1. Optionally, configure any MySQL client settings (such as `appsettings.json`) you need. +1. Optionally, add the Steeltoe Cloud Foundry configuration provider to your `ConfigurationBuilder`. +1. Add `MySqlConnection` or `DbContext` to your `IServiceCollection`. + +### Add NuGet Reference + +To use the MySQL connector, add your choice of MySQL-specific package(s) between [MySql.Data](https://www.nuget.org/packages/MySql.Data)/[MySql.Data.Entity](https://www.nuget.org/packages/MySql.Data.Entity), [MySqlConnector](https://www.nuget.org/packages/MySqlConnector/), and [Pomelo.EntityFrameworkCore.MySql](https://www.nuget.org/packages/Pomelo.EntityFrameworkCore.MySql/) as you would if you were not using Steeltoe. Then [add a reference to the appropriate Steeltoe Connector NuGet package](usage.md#add-nuget-references). + +### Configure Settings + +The connector supports a variety of configuration options. You can use these settings to develop or test an application locally and override them during deployment. + +The following MySQL connector configuration shows how to connect to a database at `myserver:3306`: + +```json +{ + ... + "MySql": { + "Client": { + "Server": "myserver", + "Port": 3306 + } + } + ... +} +``` + +The following table describes the available settings for the connector. These settings are not specific to Steeltoe. They are passed through to the underlying data provider. See the [Oracle MySQL Connection String docs](https://dev.mysql.com/doc/connector-net/en/connector-net-connection-options.html) or [open source MySQL Connection String docs](https://mysql-net.github.io/MySqlConnector/connection-options/). + +|Key|Description |Steeltoe Default| +| --- | --- |:---:| +| `Server` | Hostname or IP Address of the server. | `localhost` | +| `Port` | Port number of server. | 3306 | +| `Username` | Username for authentication. | not set | +| `Password` | Password for authentication. | not set | +| `Database` | Schema to which to connect. | not set | +| `ConnectionString` | Full connection string. | Built from settings | +| `SslMode` | SSL usage option. One of `None`, `Preferred`, or `Required`. | `None` | +| `AllowPublicKeyRetrieval` | Whether RSA public keys should be retrieved from the server. | not set | +| `AllowUserVariables` | Whether the provider expects user variables in the SQL. | not set | +| `ConnectionTimeout` |Seconds to wait for a connection before throwing an error. | not set | +| `ConnectionLifeTime` | The maximum length of time a connection to the server can be open. | not set | +| `ConnectionReset` | Whether the connection state is reset when it is retrieved from the pool. | not set | +| `ConvertZeroDateTime` | Whether to have MySqlDataReader.GetValue() and MySqlDataReader.GetDateTime() return DateTime.MinValue for date or datetime columns that have disallowed values. | not set | +| `DefaultCommandTimeout` | Seconds each command can execute before timing out. Use 0 to disable timeouts. | not set | +| `Keepalive` | TCP keep-alive idle time. | not set | +| `MaximumPoolsize` | Maximum number of connections allowed in the pool. | not set | +| `MinimumPoolsize` | Minimum number of connections to leave in the pool if ConnectionIdleTimeout is reached. | not set | +| `OldGuids` | Whether to use a GUID of data type BINARY(16)| not set | +| `PersistSecurityInfo` | Whether to allow the application to access to security-sensitive information, such as the password. **_(Not recommended)_**. | not set | +| `Pooling` | Enables connection pooling. | not set | +| `TreatTinyAsBoolean` | Whether to return tinyint(1) as a boolean. Set to `false` to return tinyint(1) as sbyte/byte. | not set | +| `UseAffectedRows` | Set to `false` to report found rows instead of changed (affected) rows. | not set | +| `UseCompression` | If `true` (and server-supported), packets sent between client and server are compressed. | not set | + +>IMPORTANT: All of the settings described in the preceding table should be prefixed with `MySql:Client:`. + +The samples and most templates are already set up to read from `appsettings.json`. + +>If a ConnectionString is provided and VCAP_SERVICES are not detected (a typical scenario for local app development), the ConnectionString will be used exactly as provided. + +### Cloud Foundry + +To use MySQL on Cloud Foundry, you can create and bind an instance of MySQL to your application by using the Cloud Foundry CLI, as follows: + +```bash +# Create MySQL service +cf create-service p-mysql 100mb myMySqlService + +# Bind service to `myApp` +cf bind-service myApp myMySqlService + +# Restage the app to pick up change +cf restage myApp +``` + +>The preceding commands assume you use [MySQL for VMware Tanzu](https://network.pivotal.io/products/pivotal-mysql/), provided by VMware on Tanzu. If you use a different service, you must adjust the `create-service` command to fit your environment. + +This connector also works with the [Azure Service Broker](https://docs.pivotal.io/partners/azure-sb/). + +Once the service is bound to your application, the connector's settings are available in `VCAP_SERVICES`. + +### Add MySqlConnection + +To use a `MySqlConnection` in your application, add it to the service container in the `ConfigureServices()` method of the `Startup` class: + +```csharp +using Steeltoe.Connector.MySql; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(...) + { + ... + } + public void ConfigureServices(IServiceCollection services) + { + // Add MySqlConnection configured from Configuration + services.AddMySqlConnection(Configuration); + + // Add framework services. + services.AddMvc(); + ... + } + ... +} +``` + +The `AddMySqlConnection(Configuration)` method call configures the `MySqlConnection` by using the configuration built by the application and adds the connection to the service container. + +> By default, this extension method will automatically configure an `IHealthContributor` to report the health of this database connection. This behavior can be turned off by passing `false` for the parameter `addSteeltoeHealthChecks` + +### Use MySqlConnection + +Once you have configured and added the connection to the service container, you can inject it and use it in a controller or a view: + +```csharp +using MySql.Data.MySqlClient; +... +public class HomeController : Controller +{ + public IActionResult MySqlData([FromServices] MySqlConnection dbConnection) + { + dbConnection.Open(); + + MySqlCommand cmd = new MySqlCommand("SELECT * FROM TestData;", dbConnection); + MySqlDataReader rdr = cmd.ExecuteReader(); + + while (rdr.Read()) + { + ViewData["Key" + rdr[0]] = rdr[1]; + } + + rdr.Close(); + dbConnection.Close(); + + return View(); + } +} +``` + +### Add DbContext + +This section describes how to add a DbContext with both Entity Framework 6 and Entity Framework Core + +#### Entity Framework 6 + +To use the MySQL connector with Entity Framework 6, inject a `DbContext` into your application by using the `AddDbContext<>()` method (provided by Steeltoe) that takes an `IConfiguration` as a parameter: + +```csharp +using Steeltoe.Connector.MySql.EF6; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(...) + { + ... + } + public void ConfigureServices(IServiceCollection services) + { + ... + services.AddDbContext(Configuration); + ... + } + ... +} +``` + +The `AddDbContext(..)` method call configures `TestContext` by using the configuration built earlier and then adds the DbContext (called `TestContext`) to the service container. + +> This extension method will automatically configure an `IHealthContributor` to report the health of this database connection. + +Your `DbContext` does not need to be modified from a standard EF6 `DbContext` to work with Steeltoe: + +```csharp +using MySql.Data.Entity; +using System.Data.Entity; +... + +[DbConfigurationType(typeof(MySqlEFConfiguration))] +public class TestContext : DbContext +{ + public TestContext(string connectionString) : base(connectionString) + { + } + public DbSet TestData { get; set; } +} +``` + +#### Entity Framework Core + +To use the MySQL connector with Entity Framework Core, inject a `DbContext` into your application with the standard `AddDbContext<>()` method, substituting Steeltoe's `UseMySql` method that takes an `IConfiguration` as a parameter in the options configuration for the standard `UseMySql` method. The following example demonstrates the basic usage: + +```csharp +using Steeltoe.Connector.MySql.EFCore; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(...) + { + ... + } + public void ConfigureServices(IServiceCollection services) + { + ... + services.AddDbContext(options => options.UseMySql(Configuration)); + ... + } + ... +} +``` + +> This extension method will _NOT_ configure an `IHealthContributor` for this database connection. The NuGet package Steeltoe.Connector.ConnectorCore provides an `IServiceCollection` extension method that will. Directly add the health contributor with the code `services.AddMySqlHealthContributor(Configuration)` + +Your `DbContext` does not need to be modified from a standard `DbContext` to work with Steeltoe: + +```csharp +using Microsoft.EntityFrameworkCore; +... + +public class TestContext : DbContext +{ + public TestContext(DbContextOptions options) : base(options) + { + + } + public DbSet TestData { get; set; } +} +``` + +If you need to set additional properties for the `DbContext` like `MigrationsAssembly` or connection retry settings, create an `Action`: + +```csharp +Action mySqlOptionsAction = (o) => +{ + o.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name); + // Configuring Connection Resiliency: https://docs.microsoft.com/ef/core/miscellaneous/connection-resiliency + o.EnableRetryOnFailure(maxRetryCount: 15, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); +}; +``` + +Then pass your new options action into the AddDbContext method: + +```csharp +services.AddDbContext(options => options.UseMySql(Configuration, mySqlOptionsAction)); +``` + +### Use DbContext + +Once you have configured and added the `DbContext` object to the service container, inject and use it in a controller or a view: + +```csharp +using Project.Models; +... +public class HomeController : Controller +{ + public IActionResult MySqlData([FromServices] TestContext context) + { + return View(context.TestData.ToList()); + } +} +``` diff --git a/api/v4/connectors/oauth.md b/api/v4/connectors/oauth.md new file mode 100644 index 00000000..d26479bd --- /dev/null +++ b/api/v4/connectors/oauth.md @@ -0,0 +1,115 @@ +# OAuth + +This connector simplifies using Cloud Foundry OAuth2 security services (for example, [UAA Server](https://github.com/cloudfoundry/uaa) or [TAS Single-Sign-on](https://docs.pivotal.io/p-identity/)) by exposing the Cloud Foundry OAuth service configuration data as injectable `IOption`. It is used by the [Cloud Foundry External Security Providers](../security/index.md) but can be used separately. + +## Usage + +You should know how the .NET [configuration service](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) works before starting to use the connector. To configure the connector, you need a basic understanding of `ConfigurationBuilder` and how to add providers to the builder. + +You should also know how the ASP.NET Core [`Startup`](https://docs.microsoft.com/aspnet/core/fundamentals/startup) class is used in configuring the application services for the application. Pay particular attention to the usage of the `ConfigureServices()` method. + +You probably want some understanding of Cloud Foundry OAuth2 security services (such as [UAA Server](https://github.com/cloudfoundry/uaa) or [TAS Single-Sign-on](https://docs.pivotal.io/p-identity/)) before starting to use this connector. + +To use this Connector: + +1. Create an OAuth service instance and bind it to your application. +1. (Optional) Configure any additional settings the OAuth connector needs. +1. Add the Steeltoe Cloud Foundry configuration provider to your `ConfigurationBuilder`. +1. Add the OAuth connector to your `ServiceCollection`. +1. Access the OAuth service options. + +### Add NuGet Reference + +To use the OAuth connector, you need to [add a reference to the appropriate Steeltoe Connector NuGet package](usage.md#add-nuget-references). + +### Configure Settings + +Configuring additional settings for the connector is not typically required, but, when Cloud Foundry uses self-signed certificates, you might need to disable certificate validation: + +```json +{ + ... + "Security": { + "Oauth2": { + "Client": { + "ValidateCertificates": false + } + } + } + ... +} +``` + +>CAUTION: Self-signed certificates are inherently insecure. Never use them for a production environment. + +The samples and most templates are already set up to read from `appsettings.json`. + +### Cloud Foundry + +There are multiple ways to set up OAuth services on Cloud Foundry. + +There is a user-provided service to define a direct binding to the Cloud Foundry UAA server. Alternatively, you can use the [Single Sign-On for VMware Tanzu](https://docs.pivotal.io/p-identity/)) product to provision an OAuth service binding. The process to create service binding varies for each of the approaches. + +Regardless of which you choose, once the service is bound to your application, the connector's settings are available in `VCAP_SERVICES`. + +### Add OAuthServiceOptions + +Once the OAuth service has been bound to the application, add the OAuth connector to your service collection in the `ConfigureServices()` method of the `Startup` class: + +```csharp +using Steeltoe.Connector.OAuth; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(...) + { + ... + } + public void ConfigureServices(IServiceCollection services) + { + // Configure and Add IOptions to the container + services.AddOAuthServiceOptions(Configuration); + + // Add framework services. + services.AddMvc(); + ... + } + ... +} +``` + +The `AddOAuthServiceOptions(Configuration)` method call configures a `OAuthServiceOptions` instance by using the configuration built by the application and adds it to the service container. + +### Use OAuthServiceOptions + +Finally, you can inject and use the configured `OAuthServiceOptions` into a controller: + +```csharp +using Steeltoe.Connector.OAuth; +... +public class HomeController : Controller +{ + OAuthServiceOptions _options; + + public HomeController(IOptions oauthOptions) + { + _options = oauthOptions.Value; + } + ... + public IActionResult OAuthOptions() + { + ViewData["ClientId"] = _options.ClientId; + ViewData["ClientSecret"] = _options.ClientSecret; + ViewData["UserAuthorizationUrl"] = _options.UserAuthorizationUrl; + ViewData["AccessTokenUrl"] = _options.AccessTokenUrl; + ViewData["UserInfoUrl"] = _options.UserInfoUrl; + ViewData["TokenInfoUrl"] = _options.TokenInfoUrl; + ViewData["JwtKeyUrl"] = _options.JwtKeyUrl; + ViewData["ValidateCertificates"] = _options.ValidateCertificates; + ViewData["Scopes"] = CommaDelimit(_options.Scope); + + return View(); + } +} +``` diff --git a/api/v4/connectors/postgresql.md b/api/v4/connectors/postgresql.md new file mode 100644 index 00000000..fec4dd9c --- /dev/null +++ b/api/v4/connectors/postgresql.md @@ -0,0 +1,218 @@ +# PostgreSQL + +This connector simplifies using PostgreSQL. Currently, the connector supports the [Npgsql](https://www.npgsql.org/) provider. + +This connector provides an `IHealthContributor`, which you can use in conjunction with the [Steeltoe Management Health](../management/health.md) check endpoint. + +## Usage + +You should know how the .NET [Configuration service](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) works before starting to use the connector. You need a basic understanding of `ConfigurationBuilder` and how to add providers to the builder to configure the connector. + +You should also know how the ASP.NET Core [Startup](https://docs.microsoft.com/aspnet/core/fundamentals/startup) class is used to configure the application services for the app. Pay particular attention to the `ConfigureServices()` method. + +To use this connector: + +1. Create a PostgreSQL Service instance and bind it to your application. +1. Optionally, Configure any PostgreSQL client settings (such as `appsettings.json`). +1. Optionally, add the Steeltoe Cloud Foundry config provider to your `ConfigurationBuilder`. +1. Add `NpgsqlConnection` or `DbContext` to your `IServiceCollection`. + +### Add NuGet Reference + +To use the PostgreSQL connector, add your choice of PostgreSQL package between [Npgsql](https://www.nuget.org/packages/Npgsql/) and [Npgsql.EntityFrameworkCore.PostgreSQL](https://www.nuget.org/packages/Npgsql.EntityFrameworkCore.PostgreSQL/) as you would if you were not using Steeltoe. Then [add a reference to the appropriate Steeltoe Connector NuGet package](usage.md#add-nuget-references). + +>Steeltoe does not currently include direct support for PostgreSQL with Entity Framework 6. + +### Configure Settings + +The PostgreSQL connector supports several settings for creating the `NpgsqlConnection` to a database. This can be useful when you develop and test an application locally and need to configure the connector for non-default settings. + +The following example shows a PostgreSQL connector configuration (in JSON) to set up a connection to a database at `myserver:5432`: + +```json +{ + ... + "Postgres": { + "Client": { + "Host": "myserver", + "Port": 5432 + } + } + ... +} +``` + +The following table describes all of the possible settings for the connector: + +|Key|Description |Default +| --- | --- | --- | +| `Host` | Hostname or IP Address of server. | `localhost` | +| `Port` | Port number of server. | 5432 | +| `Username` | Username for authentication. | not set | +| `Password` | Password for authentication. | not set | +| `Database` | Schema to which to connect. | not set | +| `ConnectionString` | Full connection string. | Built from settings | + +>IMPORTANT: All of these settings should be prefixed with `Postgres:Client:`. + +The samples and most templates are already set up to read from `appsettings.json`. + +>If a `ConnectionString` is provided and `VCAP_SERVICES` are not detected (a typical scenario for local application development), the `ConnectionString` is used exactly as provided. + +### Cloud Foundry + +To use PostgreSQL on Cloud Foundry, after a PostgreSQL service is installed, you can create and bind an instance of it to your application by using the Cloud Foundry CLI: + +```bash +# Create PostgreSQL service +cf create-service EDB-Shared-PostgreSQL "Basic PostgreSQL Plan" myPostgres + +# Bind service to `myApp` +cf bind-service myApp myPostgres + +# Restage the app to pick up change +cf restage myApp +``` + +>The preceding commands work for the PostgreSQL service provided by EDB on Cloud Foundry. For another service, adjust the `create-service` command to fit your environment. + +This connector also works with the [Azure Service Broker](https://docs.pivotal.io/partners/azure-sb/). + +Once the service is bound to your application, the connector's settings are available in `VCAP_SERVICES`. + +### Add NpgsqlConnection + +To use a `NpgsqlConnection` in your application, add it to the service container in the `ConfigureServices()` method of the `Startup` class: + +```csharp +using Steeltoe.Connector.PostgreSql; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(...) + { + ... + } + public void ConfigureServices(IServiceCollection services) + { + // Add NpgsqlConnection + services.AddPostgresConnection(Configuration); + + // Add framework services. + services.AddMvc(); + ... + } + ... +} +``` + +The `AddPostgresConnection(Configuration)` method call configures the `NpgsqlConnection` by using the configuration built by the application and adds the connection to the service container. + +> By default, this extension method will automatically configure an `IHealthContributor` to report the health of this database connection. This behavior can be turned off by passing `false` for the parameter `addSteeltoeHealthChecks` + +### Use NpgsqlConnection + +Once the connection is configured and added to the service container, you can inject it and use it in a controller or a view: + +```csharp +using Npgsql; +... +public class HomeController : Controller +{ + public IActionResult PostgresData([FromServices] NpgsqlConnection dbConnection) + { + dbConnection.Open(); + + NpgsqlCommand cmd = new NpgsqlCommand("SELECT * FROM TestData;", dbConnection); + var rdr = cmd.ExecuteReader(); + + while (rdr.Read()) + { + ViewData["Key" + rdr[0]] = rdr[1]; + } + + rdr.Close(); + dbConnection.Close(); + + return View(); + } +} +``` + +### Add DbContext + +To use Entity Framework, inject and use a `DbContext` in your application instead of a `NpgsqlConnection` through the `AddDbContext<>()` method: + +```csharp +using Steeltoe.Connector.PostgreSql.EFCore; + +public class Startup { + public IConfiguration Configuration { get; private set; } + public Startup(...) + { + ... + } + public void ConfigureServices(IServiceCollection services) + { + // Add EFCore TestContext configured with a PostgreSQL configuration + services.AddDbContext(options => options.UseNpgsql(Configuration)); + + // see note below explaining AddPostgresHealthContributor + services.AddPostgresHealthContributor(Configuration); + ... + } +} +``` + +The `AddDbContext(options => options.UseNpgsql(Configuration));` method call configures the `TestContext` by using the configuration built by the application and adds the context to the service container. + +> This extension method will _NOT_ automatically configure an `IHealthContributor` to report the health of this database connection. The package Steeltoe.Connector.ConnectorCore provides an `IServiceCollection` extension method that will. Directly add the health contributor with the code `services.AddPostgresHealthContributor(Configuration)` + +The following example shows how you would define the `DbContext`: + +```csharp +using Microsoft.EntityFrameworkCore; +... + +public class TestContext : DbContext +{ + public TestContext(DbContextOptions options) : base(options) + { + } + public DbSet TestData { get; set; } +} +``` + +If you need to set additional properties for the `DbContext` like `MigrationsAssembly` or connection retry settings, create an `Action`: + +```csharp +Action npgsqlOptionsAction = (o) => +{ + o.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name); + // Configuring Connection Resiliency: https://docs.microsoft.com/ef/core/miscellaneous/connection-resiliency + o.EnableRetryOnFailure(maxRetryCount: 15, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); +}; +``` + +Pass your new options action into the AddDbContext method: + +```csharp +services.AddDbContext(options => options.UseNpgsql(Configuration, npgsqlOptionsAction)); +``` + +### Use DbContext + +Once you have configured and added the context to the service container, you can inject it and use it in a controller or a view: + +```csharp +using Project.Models; +... +public class HomeController : Controller +{ + public IActionResult PostgresData([FromServices] TestContext context) + { + return View(context.TestData.ToList()); + } +} +``` diff --git a/api/v4/connectors/rabbitmq.md b/api/v4/connectors/rabbitmq.md new file mode 100644 index 00000000..04d2d84a --- /dev/null +++ b/api/v4/connectors/rabbitmq.md @@ -0,0 +1,135 @@ +# RabbitMQ + +This connector simplifies using the [RabbitMQ Client](https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html) in an application running on Cloud Foundry. We recommend following that tutorial, because you need to know how to use it before proceeding to use the connector. + +This connector provides an `IHealthContributor`, which you can use in conjunction with the [Steeltoe Management Health](../management/health.md) check endpoint. + +## Usage + +You should know how the .NET [configuration service](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) works before starting to use the connector. To configure the connector, you need a basic understanding of `ConfigurationBuilder` and how to add providers to the builder. + +You should also know how the ASP.NET Core [Startup](https://docs.microsoft.com/aspnet/core/fundamentals/startup) class is used in configuring the application services for the application. Pay particular attention to the usage of the `ConfigureServices()` method. + +You also need some understanding of how to use the [RabbitMQ Client](https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html) before starting to use this connector. + +To use this Connector: + +1. Create and bind a RabbitMQ service instance to your application. +1. (Optionally) Configure any RabbitMQ client settings (such as in `appsettings.json`). +1. Add the Steeltoe Cloud Foundry config provider to your `ConfigurationBuilder`. +1. Add the RabbitMQ `ConnectionFactory` to your `ServiceCollection`. + +### Add NuGet Reference + +To use the RabbitMQ connector, you need to [add a reference to the appropriate Steeltoe Connector NuGet package](usage.md#add-nuget-references) and `RabbitMQ.Client`. + +### Configure Settings + +The connector supports several settings for the RabbitMQ `ConnectionFactory` that can be useful when you are developing and testing an application locally and you need to have the connector configure the connection for non-default settings. + +The following example of the connectors configuration in JSON shows how to setup a connection to a RabbitMQ server at `amqp://guest:guest@127.0.0.1/`: + +```json +{ + ... + "RabbitMq": { + "Client": { + "Uri": "amqp://guest:guest@127.0.0.1/" + } + } + ... +} +``` + +The following table describes all the possible settings for the connector: + +| Key | Description | Default | +| --- | --- | --- | +| `Server` | Hostname or IP Address of the server. | 127.0.0.1 | +| `Port` | Port number of the server. | 5672 | +| `Username` | Username for authentication. | not set | +| `Password` | Password for authentication. | not set | +| `VirtualHost` | Virtual host to which to connect. | not set | +| `SslEnabled` | Should SSL be enabled. | `false` | +| `SslPort` | SSL Port number of server. | 5671 | +| `Uri` | Full connection string. | Built from settings | + +>IMPORTANT: All of these settings should be prefixed with `RabbitMq:Client:`. + +The samples and most templates are already set up to read from `appsettings.json`. + +### Cloud Foundry + +To use RabbitMQ on Cloud Foundry, you can create and bind an instance to your application using the Cloud Foundry CLI, as follows: + +```bash +# Create RabbitMQ service +cf create-service p-rabbitmq standard myRabbitMQService + +# Bind the service to `myApp` +cf bind-service myApp myRabbitMQService + +# Restage the app to pick up changes +cf restage myApp +``` + +>The preceding commands assume you use the RabbitMQ service provided by TAS. If you use a different service, adjust the `create-service` command to fit your environment. + +Once the service is bound to your application, the connector's settings are available in `VCAP_SERVICES`. + +### Add RabbitMQ ConnectionFactory + +To use a RabbitMQ `ConnectionFactory` in your application, add it to the service container in the `ConfigureServices()` method of the `Startup` class: + +```csharp +using Steeltoe.Connector.RabbitMQ; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(...) + { + ... + } + public void ConfigureServices(IServiceCollection services) + { + // Add RabbitMQ ConnectionFactory + services.AddRabbitMQConnection(Configuration); + + // Add framework services. + services.AddMvc(); + ... + } + ... +} +``` + +### Use RabbitMQ ConnectionFactory + +Once you have configured and added the RabbitMQ `ConnectionFactory` to the service container, you can inject it and use it in a controller or a view: + +```csharp +using RabbitMQ.Client; +... +public class HomeController : Controller +{ + ... + public IActionResult RabbitMQData([FromServices] ConnectionFactory factory) + { + + using (var connection = factory.CreateConnection()) + using (var channel = connection.CreateModel()) + { + CreateQueue(channel); + var body = Encoding.UTF8.GetBytes("a message"); + channel.BasicPublish(exchange: "", + routingKey: "a-topic", + basicProperties: null, + body: body); + + } + return View(); + } + +} +``` diff --git a/api/v4/connectors/redis.md b/api/v4/connectors/redis.md new file mode 100644 index 00000000..3f0e701b --- /dev/null +++ b/api/v4/connectors/redis.md @@ -0,0 +1,211 @@ +# Redis + +This connector simplifies using a Microsoft [`RedisCache`](https://docs.microsoft.com/aspnet/core/performance/caching/distributed#using-a-redis-distributed-cache) or a StackExchange [`IConnectionMultiplexer`](https://stackexchange.github.io/StackExchange.Redis/). + +The following Steeltoe sample applications are available to help you understand how to use this connector: + +* [DataProtection](https://github.com/SteeltoeOSS/Samples/tree/master/Security/src/RedisDataProtectionKeyStore): A sample application showing how to use the Steeltoe DataProtection Key Storage Provider for Redis. +* [MusicStore](https://github.com/SteeltoeOSS/Samples/tree/master/MusicStore): A sample application showing how to use all of the Steeltoe components together in an ASP.NET Core application. This is a microservices-based application built from the MusicStore ASP.NET Core reference application provided by Microsoft. + +This connector provides an `IHealthContributor`, which you can use in conjunction with the [Steeltoe Management Health](../management/health.md) check endpoint. + +## Usage + +You should know how the .NET [configuration service](https://docs.microsoft.com/aspnet/core/fundamentals/configuration) works before starting to use the connector. To configure the connector, you need a basic understanding of the `ConfigurationBuilder` and how to add providers to the builder. + +You should also know how the ASP.NET Core [`Startup`](https://docs.microsoft.com/aspnet/core/fundamentals/startup) class is used in configuring the application services for the application. Pay particular attention to the usage of the `ConfigureServices()` method. + +You probably want some understanding of how to use the [`RedisCache`](https://docs.microsoft.com/aspnet/core/performance/caching/distributed#using-a-redis-distributed-cache) or [`IConnectionMultiplexer`](https://stackexchange.github.io/StackExchange.Redis/) before starting to use this connector. + +To use this connector: + +1. Create a Redis Service instance and bind it to your application. +1. Optionally, configure any Redis client settings (for example, in `appsettings.json`). +1. Optionally, add the Steeltoe Cloud Foundry config provider to your `ConfigurationBuilder`. +1. Add `DistributedRedisCache` or `ConnectionMultiplexer` to your `ServiceCollection`. + +>The Microsoft wrapper for the Stack Exchange Redis client depends on Lua commands `EVAL` and/or `EVALSHA`. Lua scripting is disabled by default in many Redis tile installations on the TAS Platform. If you encounter a message similar to `StackExchange.Redis.RedisServerException: ERR unknown command EVALSHA`, you need to either have Lua scripting enabled by a platform operator or try using the `ConnectionMultiplexer` instead of the `IDistributedCache` or `RedisCache` interfaces provided by Microsoft. + +### Add NuGet Reference + +To use the Redis connector, you need to [add a reference to the appropriate Steeltoe Connector NuGet package](usage.md#add-nuget-references) and a reference to `Microsoft.Extensions.Caching.Redis`, `Microsoft.Extensions.Caching.StackExchangeRedis`, `StackExchange.Redis`, or `StackExchange.Redis.StrongName`. + +>Because `Microsoft.Extensions.Caching.Redis` depends on `StackExchange.Redis.StrongName`, adding a reference to the Microsoft library also enables access to the StackExchange classes, as seen in the sample application. + +### Configure Settings + +The connector supports several settings for the Redis connection that can be useful when you are developing and testing an application locally and you need to have the connector configure the connection for non-default settings. + +The following example of the connector's configuration in JSON shows how to set up a connection to a Redis server at `https://foo.bar:1111`: + +```json +{ + ... + "Redis": { + "Client": { + "Host": "https://foo.bar", + "Port": 1111 + } + } + ... +} +``` + +The following table table describes all possible settings for the connector + +| Key | Description | Default | +| --- | --- | --- | +| `Host` | Hostname or IP Address of the server. | `localhost` | +| `Port` | Port number of the server. |6379| +| `EndPoints` |Comma-separated list of host:port pairs. | not set | +| `ClientName` | Identification for the connection within Redis. | not set | +| `ConnectRetry` | Times to repeat initial connect attempts. | 3 | +| `ConnectTimeout` | Timeout (ms) for connect operations. | 5000 | +| `AbortOnConnectFail` | Does not create a connection while no servers are available. | `true` | +| `KeepAlive` | Time (seconds) at which to send a message to help keep sockets alive. | -1 | +| `ResolveDns` | Whether DNS resolution should be explicit and eager, rather than implicit. | `false` | +| `Ssl` | Whether SSL encryption should be used. | `false` | +| `SslHost` | Enforces a particular SSL host identity on the server's certificate. | not set | +| `WriteBuffer` | Size of the output buffer. | 4096 | +| `ConnectionString` | Full connection string. | Built from settings | +| `InstanceId` | Cache ID. Used only with `IDistributedCache`. | not set | + +>IMPORTANT: All of these settings should be prefixed with `Redis:Client:`. + +The samples and most templates are already set up to read from `appsettings.json`. + +>If a `ConnectionString` is provided and `VCAP_SERVICES` are not detected (a typical scenario for local application development), the `ConnectionString` is used exactly as provided. + +### Cloud Foundry + +To use Redis on Cloud Foundry, create and bind an instance to your application by using the Cloud Foundry CLI: + +```bash +# Create Redis service +cf create-service p-redis shared-vm myRedisCache + +# Bind service to `myApp` +cf bind-service myApp myRedisCache + +# Restage the app to pick up change +cf restage myApp +``` + +>The preceding commands assume you use the Redis service provided by TAS. If you use a different service, you have to adjust the `create-service` command to fit your environment. + +This connector also works with the [Cloud Service Broker](https://docs.vmware.com/en/Tanzu-Cloud-Service-Broker-for-Azure/1.2/csb-azure/GUID-index.html). + +Once the service is bound to your application, the connector's settings are available in `VCAP_SERVICES`. + +### Add IDistributedCache + +To use Microsoft's `IDistributedCache` in your application, add it to the service container: + +```csharp +using Steeltoe.Connector.Redis; +public class Startup { + public IConfiguration Configuration { get; private set; } + public Startup() + { + } + public void ConfigureServices(IServiceCollection services) + { + // Add Microsoft Redis Cache (IDistributedCache) + services.AddDistributedRedisCache(Configuration); + + // Add framework services + services.AddMvc(); + } +} +``` + +The `AddDistributedRedisCache(Configuration)` method call configures the `IDistributedCache` by using the configuration built by the application earlier and adds the connection to the service container. + +### Use IDistributedCache + +The following example shows how to inject and use the `IDistributedCache` in a controller once it has been added to the service container: + + ```csharp + using Microsoft.Extensions.Caching.Distributed; + ... + public class HomeController : Controller + { + private IDistributedCache _cache; + public HomeController(IDistributedCache cache) + { + _cache = cache; + } + ... + public IActionResult CacheData() + { + string key1 = Encoding.Default.GetString(_cache.Get("Key1")); + string key2 = Encoding.Default.GetString(_cache.Get("Key2")); + + ViewData["Key1"] = key1; + ViewData["Key2"] = key2; + + return View(); + } + } + ``` + +### Add IConnectionMultiplexer + +To use a StackExchange `IConnectionMultiplexer` in your application directly, add it to the service container in the `ConfigureServices()` method of the `Startup` class: + + ```csharp +using Steeltoe.Connector.Redis; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(...) + { + ... + } + public void ConfigureServices(IServiceCollection services) + { + // Add StackExchange IConnectionMultiplexer + services.AddRedisConnectionMultiplexer(Configuration); + + // Add framework services + services.AddMvc(); + ... + } + ... +} +``` + +The `AddRedisConnectionMultiplexer(Configuration)` method call configures the `IConnectionMultiplexer` by using the configuration built by the application and adds the connection to the service container. + +>If necessary, you can use both `IDistributedCache` and `IConnectionMultiplexer` in your application. + +### Use IConnectionMultiplexer + +Once you have configured and added the `IConnectionMultiplexer` to the service container, you can inject it and use it in a controller or a view: + +```csharp +using Microsoft.Extensions.Caching.Distributed; +... +public class HomeController : Controller +{ + private IConnectionMultiplexer _conn; + public HomeController(IConnectionMultiplexer conn) + { + _conn = conn; + } + ... + public IActionResult ConnData() + { + IDatabase db = _conn.GetDatabase(); + + string key1 = db.StringGet("ConnectionMultiplexerKey1"); + string key2 = db.StringGet("ConnectionMultiplexerKey2"); + + ViewData["ConnectionMultiplexerKey1"] = key1; + ViewData["ConnectionMultiplexerKey2"] = key2; + + return View(); + } +} +``` diff --git a/api/v4/connectors/usage.md b/api/v4/connectors/usage.md new file mode 100644 index 00000000..699b3ebf --- /dev/null +++ b/api/v4/connectors/usage.md @@ -0,0 +1,101 @@ +# Usage + +This page will cover some of the general details on how Connectors work, how to use them generally and some platform-specific details. The rest of the pages will cover information specific to each supported backing service type. + +In order to use any Steeltoe Connector, there are several steps to follow: + +1. Add a NuGet reference for the backing technology (for example: Redis, MySQL, RabbitMQ, etc) +1. Add Steeltoe NuGet Reference(s) +1. Use Steeltoe to get a connection +1. Optionally provide configuration details (see the page for any specific service type for more information) + +## Add NuGet References + +Depending on what functionality you wish to use, you may need one or more package references. This table provides a list of Steeltoe Connector packages, a brief description and the .NET framework of each: + +| Package | Description | .NET Target | +| --- | --- | --- | +| `Steeltoe.Connector.Abstractions` | Interfaces and objects used for extensibility. | .NET Standard 2.0 | +| `Steeltoe.Connector.ConnectorBase` | Includes abstractions. Connectors base package. | .NET Standard 2.0 | +| `Steeltoe.Connector.ConnectorCore` | Includes base. Adds ServiceCollection compatibility. | .NET Core 3.1+ | +| `Steeltoe.Connector.EFCore` | Includes base. Adds compatibility with Entity Framework Core | .NET Core 3.1+ | +| `Steeltoe.Connector.EF6Core` | Includes base. Adds compatibility with Entity Framework 6 | .NET Core 3.1+ | +| `Steeltoe.Connector.CloudFoundry` | Includes base. Adds Cloud Foundry compatibility | .NET Standard 2.0 | + +>As of Steeltoe 3.0, an extra NuGet reference such as `Steeltoe.Connector.CloudFoundry` may be required for platform-specific support + +## ServiceCollection Extensions + +`ServiceCollection` extensions are provided in `Steeltoe.Connector.ConnectorCore`, `Steeltoe.Connector.EFCore` and `Steeltoe.Connector.EF6Core`. These extensions will add all of the requirements for retrieving clients for the various supported technologies from a service container later on in your application. Additionally, they will typically add an `IHealthContributor` that will automatically include health checks for the connected service instance when used in conjunction with Steeltoe Management Actuators. These extensions are generally built on top of functionality provided by the underlying drivers for a given backing service and typically built the connection string for the underlying provider. As such, their usage will typically be quite similar to usage of the backing service without Steeltoe. For example, here's a comparison between adding an Entity Framework `IDbContext` with and without Steeltoe: + +```csharp +public void ConfigureServices(IServiceCollection services) +{ + // using Steeltoe, passing in the IConfiguration + services.AddDbContext(options => options.UseNpgsql(Configuration)); + + // without Steeltoe, passing in the connection string more directly + services.AddDbContext(options => options.UseNpgsql(Configuration.GetConnectionString("myPostgresConnection"))); +} +``` + +## ConnectionString Configuration Provider + +If you are only looking for the functionality of mapping credentials in configuration into connection strings, Connector functionality is now also available as an `IConfigurationProvider`. + +This example shows adding the ConnectionString Configuration provider: + +```csharp +return Host.CreateDefaultBuilder(args) + .ConfigureAppConfiguration(builder => builder.AddConnectionStrings()) + .Build(); +``` + +With the ConfigurationProvider for Connectors in place, connection strings will be built behind the scenes and made available (by type name or service binding name) as though they had been directly included in the configuration's ConnectionString block: + +```csharp +public void ConfigureServices(IServiceCollection services) +{ + // Using Steeltoe configuration provider, pass in the connection string that was build from configuration + // by service type name + services.AddDbContext(options => options.UseNpgsql(Configuration.GetConnectionString("postgres"))); + // or by service binding name + services.AddDbContext(options => options.UseNpgsql(Configuration.GetConnectionString("myPostgresConnection"))); +} +``` + +## ConnectionManager + +The `ConnectionStringConfigurationProvider` is built on top of another class named `ConnectionStringManager`, which is also accessible should you wish for yet another programming model. This class will retrieve service-typed 'IConnectionInfo`, where the connection string is available as a property. + +```csharp +var connStringManager = new ConnectionStringManager(Configuration); +var mongoInfo = connStringManager.Get(); +var mysqlInfo = connStringManager.Get(); +``` + +## Cloud Foundry + +Steeltoe Connectors were originally created to provide out-of-the-box support for discovering common services on Cloud Foundry, and as such they've historically had a pretty direct connection to each other. As of version 3.0, in preparation of support for other platforms, the Cloud Foundry specific pieces have been extracted to a separate NuGet package. No new code is required** to activate Cloud Foundry portion of Connectors (assuming the `CloudFoundryConfigurationProvider` has already been added), only the addition of a NuGet reference for `Steeltoe.Connector.CloudFoundry`. + +>** If you [publish your application as a single file](https://docs.microsoft.com/dotnet/core/deploying/single-file) prior to deployment, this assembly will not be included in the output unless there is a reference to it. Package version 3.0.2 adds the no-op method `CloudFoundryConnector.EnsureAssemblyIsLoaded()`, which can be called from anywhere in your application, to support this scenario. + +With the addition of this package, all connectors can use configuration information from Cloud Foundry's `VCAP_SERVICES` environment variable to detect and configure the available services. This example shows how to make connection strings built from Cloud Foundry service bindings available for `.GetConnectionString("connectionType")` later on: + +```csharp +return Host.CreateDefaultBuilder(args) + .ConfigureAppConfiguration(builder => + { + builder.AddCloudFoundry(); + builder.AddConnectionStrings(); + ) + .Build(); +``` + +`VCAP_SERVICES` is a Cloud Foundry standard that is used to hold connection and identification information for all service instances that have been bound to Cloud Foundry applications. For more information on `VCAP_SERVICES`, see the Cloud Foundry [documentation](https://docs.cloudfoundry.org/services/overview.html). + +>Depending on your hosting environment, service instances you create for the purpose of exploring the Quick Starts on these pages may have a cost associated. + +## Kubernetes + +Kubernetes doesn't currently have any built-in tooling or conventions that is quite the same as `VCAP_SERVICES` on Cloud Foundry. As the ecosystem continues to develop, the Steeltoe team will be monitoring the progress of the [Service Catalog](https://kubernetes.io/docs/concepts/extend-kubernetes/service-catalog/) and [Service Bindings](https://github.com/k8s-service-bindings/spec) projects. diff --git a/api/v4/developer-tools/cli.md b/api/v4/developer-tools/cli.md new file mode 100644 index 00000000..d732d72b --- /dev/null +++ b/api/v4/developer-tools/cli.md @@ -0,0 +1,222 @@ +# Steeltoe CLI + +The Steeltoe Tooling command-line interface (CLI) is a tool to assist developers in the code-test-debug lifecycle of DotNet projects. +The CLI uses the local Docker environment to run a project’s application and its dependencies (typically services). +Developers can attach a debugger to the running application, and, since the project file system is mounted in the Docker container, code changes can be made and observed while the application is live. + +## Getting Started + +To get started, you need to do the following: + +1. Set up Pre-Requisites +1. Install the CLI +1. Add DotNet Global Tools to your PATH Variable + + +### Set up Pre-Requisites + +See [docker-compose](https://docs.docker.com/compose/) + + +### Install the CLI + +Steeltoe Tooling is a [DotNet Global Tools](https://docs.microsoft.com/dotnet/core/tools/global-tools) console executable named `st`. Use `dotnet tool install` to install. + +```sh +$ dotnet tool install -g Steeltoe.Cli --version 0.7.1-2785 --add-source https://www.myget.org/F/steeltoedev/api/v3/index.json +``` + + +### Add DotNet Global Tools to your PATH Variable + +DotNet Global Tools are installed in an OS-dependent user directory + +* Windows: `%USERPROFILE%\.dotnet\tools` +* OS X/Linux: `$HOME/.dotnet/tools` + +After adding of the path to your `PATH` environment variable, you can run the `st` executable: + +```sh +$ st --version +0.7.1 (build 2785 -> https://dev.azure.com/SteeltoeOSS/Steeltoe/_build/results?buildId=2785) +``` + + +## Using the CLI + +You can create the sample application used by using the [Steeltoe Initializr](https://start.steeltoe.io/). + +To create it in your environment: + +```sh +$ mkdir MyRedisApp +$ curl https://start.steeltoe.io/starter.zip -o MyRedisApp.zip \ + -dprojectName=MyRedisApp \ + -dtargetFrameworkVersion=netcoreapp3.1 \ + -ddependencies=redis +$ unzip MyRedisApp.zip -d MyRedisApp +$ cd MyRedisApp +``` + +### Using show + +The following example shows how to use the `show` command: + +```sh +Displays project details + +Usage: st show [options] + +Options: + -?|-h|--help Show help information + +Overview: + *** under construction *** + +Examples: + Show the details of the project in the current directory: + $ st show +``` + +The `show` command displays the deployment structure of the project. +This structure is subsequently used by the `run` command to start the project and any dependent services. + +Running `show` in our example application shows that the project application is a `netcoreapp3.1` application that listens on port `5000` for HTTP requests. +The application depends on Redis to be listening on port `5672`. + +```sh +$ st show +configuration: MyRedisApp +project: + name: myredisapp + file: MyRedisApp.csproj + framework: netcoreapp3.1 + image: mcr.microsoft.com/dotnet/core/sdk:3.1 + protocols: + - name: http + port: 5000 + services: + - name: redis + image: steeltoeoss/redis-amd64-linux:4.0.11 + port: 5672 +``` + +### Using run + +The following example shows how to use the `run` command: + +```sh +Runs project in the local Docker environment + +Usage: st run [options] + +Options: + -g|--generate-only Only generate configuration files (do not run in Docker) + -?|-h|--help Show help information + +Overview: + Starts the project application and its dependencies in the local Docker environment. + +Examples: + Run the default configuration: + $ st run + +See Also: + stop +``` + +The `run` command runs the project in your local Docker environment. + +The command generates a [Docker Compose](https://docs.docker.com/compose/) file that you can use to run the project in Docker. + +>The current version of the CLI regenerates the file each time the command is run. An upcoming version will regenerate the file only upon request. + +A Docker container is created to mount the project directory. Any changes made to the application while the container is running are evident in the running app. + +If the project has service dependencies, Docker containers are created for each service. + +Running `run` in our example app starts up the application and its dependent Redis service: + +```sh +$ st run +running 'myredisapp' in Docker +> docker-compose up --build +Creating network "myredisapp_default" with the default driver +Building myredisapp +Step 1/4 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1 + ---> d9d656b4ceb2 +Step 2/4 : WORKDIR /myredisapp + ---> Running in c04db49ee23d +Removing intermediate container c04db49ee23d + ---> c3cff79c1a51 +Step 3/4 : RUN mkdir -p /usr/local/share/dotnet/sdk/NuGetFallbackFolder + ---> Running in 265a6a397765 +Removing intermediate container 265a6a397765 + ---> da59d48eb855 +Step 4/4 : CMD ["dotnet", "watch", "run", "--urls", "http://0.0.0.0:5000"] + ---> Running in b3eced1e83ba +Removing intermediate container b3eced1e83ba + ---> 07943f359520 + +Successfully built 07943f359520 +Successfully tagged myredisapp_myredisapp:latest +Pulling redis (steeltoeoss/redis-amd64-linux:4.0.11)... +4.0.11: Pulling from steeltoeoss/redis-amd64-linux +Digest: sha256:2c1d4ea5491a726d944b23f18082bd6dfe41d66d94a9e540f074cbb9f94ab8e3 +Status: Downloaded newer image for steeltoeoss/redis-amd64-linux:4.0.11 + + +Creating myredisapp_myredisapp_1 ... done +Attaching to myredisapp_redis_1, myredisapp_myredisapp_1 +redis_1 | 1:C 23 Apr 14:39:51.076 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo +redis_1 | 1:C 23 Apr 14:39:51.076 # Redis version=4.0.11, bits=64, commit=00000000, modified=0, pid=1, just started +redis_1 | 1:C 23 Apr 14:39:51.076 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf +redis_1 | 1:M 23 Apr 14:39:51.078 * Running mode=standalone, port=6379. +redis_1 | 1:M 23 Apr 14:39:51.078 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. +redis_1 | 1:M 23 Apr 14:39:51.078 # Server initialized +redis_1 | 1:M 23 Apr 14:39:51.082 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. +redis_1 | 1:M 23 Apr 14:39:51.082 * Ready to accept connections +myredisapp_1 | watch : Polling file watcher is enabled +myredisapp_1 | watch : Started +myredisapp_1 | Hosting environment: Development +myredisapp_1 | Content root path: /myredisapp +myredisapp_1 | Now listening on: http://0.0.0.0:5000 +myredisapp_1 | Application started. Press Ctrl+C to shut down. +``` + +### Using stop + +The following example shows how to use the `stop` command: + +```sh +Stops project running in the local Docker environment + +Usage: st stop [options] + +Options: + -?|-h|--help Show help information + +Overview: + Stops the project application and its dependencies in the local Docker environment. + +Examples: + Stop the running project: + $ st stop + +See Also: + run +``` + +Running `stop` stops the project running in your local Docker environment. + +Running `stop` in our example application tears down the project's Docker containers: + +```sh +$ st stop +stopping 'myredisapp' in Docker +> docker-compose down +Stopping myredisapp_redis_1 ... +Stopping myredisapp_redis_1 ... done +Removing myredisapp_myredisapp_1 ... done +Removing network myredisapp_default +``` diff --git a/api/v4/developer-tools/index.md b/api/v4/developer-tools/index.md new file mode 100644 index 00000000..6451402a --- /dev/null +++ b/api/v4/developer-tools/index.md @@ -0,0 +1,11 @@ +# Developer Tools + +## Steeltoe CLI + +The Steeltoe command-line interface (CLI) simplifies the process of running and deploying Steeltoe applications. With this tooling you can, with minimal commands, run your application locally while also being able to deploy to Kubernetes or Cloud Foundry. + +## Initializr + +The Steeltoe Initializr project is an application generator meant to get cloud-native .NET developers going very quickly. + +See [Getting Started Guide for Initializr](https://steeltoe.io/initializr) diff --git a/api/v4/discovery/discovering-services.md b/api/v4/discovery/discovering-services.md new file mode 100644 index 00000000..570d2302 --- /dev/null +++ b/api/v4/discovery/discovering-services.md @@ -0,0 +1,115 @@ +# Discovering Services + +Depending on which Discovery service technology (for example, Eureka or Consul) you use, the behavior of the client differs. + +With Eureka, once the application starts, the client begins to operate in the background, both registering and renewing service registrations and also periodically fetching the service registry from the server. + +With Consul, once the app starts, the client registers any services (if required) and (if configured to do so) starts a health thread to keep updating the health of the service registration. The Consul client fetches no service registrations until you ask to look up a service. At that point, a request is made to the Consul server. As a result, you probably want to use the Steeltoe caching load balancer with the Consul service discovery. + +## Using HttpClientFactory + +The recommended approach for discovering services is to use `HttpClient` supplied through [HttpClientFactory](https://docs.microsoft.com/aspnet/core/fundamentals/http-requests), augmented with the `DiscoveryHttpMessageHandler` (provided by Steeltoe). + +`DiscoveryHttpMessageHandler` is a `DelegatingHandler` that you can use, to intercept requests and to evaluate the URL to see if the host portion of the URL can be resolved from the current service registry. The handler does this for any `HttpClient` created by the factory. + +After initializing the discovery client, you can configure `HttpClient` to include `DiscoveryHttpMessageHandler` with the extension `AddServiceDiscovery`: + +```csharp +public class Startup +{ + ... + public void ConfigureServices(IServiceCollection services) + { + ... + // Configure HttpClient + services.AddHttpClient("fortunes") + .AddServiceDiscovery() + .AddTypedClient(); + ... + } + ... +} +``` + +This `HttpClient` can be injected into `FortuneService` for a nice, clean experience: + +```csharp +public class FortuneService : IFortuneService +{ + private const string RANDOM_FORTUNE_URL = "https://fortuneService/api/fortunes/random"; + private HttpClient _client; + public FortuneService(HttpClient client) + { + _client = client; + } + public async Task RandomFortuneAsync() + { + return await _client.GetStringAsync(RANDOM_FORTUNE_URL); + } +} +``` + +Check out the Microsoft documentation on [`HttpClientFactory`](https://docs.microsoft.com/aspnet/core/fundamentals/http-requests) to see all the various ways you can make use of message handlers. + +>`DiscoveryHttpMessageHandler` has an optional `ILoadBalancer` parameter. If no `ILoadBalancer` is provided through dependency injection, a `RandomLoadBalancer` is used. To change this behavior, add an `ILoadBalancer` to the DI container or use a load-balancer first configuration, as described within section 1.4 on this page. + +## DiscoveryHttpClientHandler + +Another way to use the registry to look up services is to use the Steeltoe `DiscoveryHttpClientHandler` with `HttpClient`. + +This `FortuneService` class retrieves fortunes from the Fortune microservice, which is registered under a name of `fortuneService`: + +```csharp +using Steeltoe.Discovery.Client; + +... +public class FortuneService : IFortuneService +{ + DiscoveryHttpClientHandler _handler; + private const string RANDOM_FORTUNE_URL = "https://fortuneService/api/fortunes/random"; + public FortuneService(IDiscoveryClient client) + { + _handler = new DiscoveryHttpClientHandler(client); + } + public async Task RandomFortuneAsync() + { + var client = GetClient(); + return await client.GetStringAsync(RANDOM_FORTUNE_URL); + } + private HttpClient GetClient() + { + // WARNING: do NOT create a new HttpClient for every request in your code + // -- you may experience socket exhaustion if you do! + var client = new HttpClient(_handler, false); + return client; + } +} +``` + +First, notice that the `FortuneService` constructor takes an `IDiscoveryClient` as a parameter. This is Steeltoe's interface for finding services in the service registry. The `IDiscoveryClient` implementation is registered with the service container for use in any controller, view, or service during initialization. The constructor code for this class uses the client to create an instance of Steeltoe's `DiscoveryHttpClientHandler`. + +Next, notice that when the `RandomFortuneAsync()` method is called, the `HttpClient` is created with the Steeltoe handler. The handler's role is to intercept any requests made with the `HttpClient` and to evaluate the URL to see if the host portion of the URL can be resolved from the service registry. In this example, the `fortuneService` name should be resolved into an actual `host:port` before letting the request continue. + +If the name cannot be resolved, the handler ignores the request URL and lets the request continue unchanged. + +>By default, `DiscoveryHttpClientHandler` performs random load balancing. That is, if there are multiple instances registered under a particular service name, the handler randomly selects one of those instances each time the handler is invoked. + +## Using IDiscoveryClient + +In the event the handler options do not serve your needs, you can always make lookup requests directly on the `IDiscoveryClient` interface. + +The methods available on an `IDiscoveryClient` provide access to services and service instances available in the registry: + +```csharp +/// +/// Gets all known service Ids +/// +IList Services { get; } + +/// +/// Get all ServiceInstances associated with a particular serviceId +/// +/// the serviceId to lookup +/// List of service instances +IList GetInstances(string serviceId); +``` diff --git a/api/v4/discovery/hashicorp-consul.md b/api/v4/discovery/hashicorp-consul.md new file mode 100644 index 00000000..aedcf879 --- /dev/null +++ b/api/v4/discovery/hashicorp-consul.md @@ -0,0 +1,124 @@ +# HashiCorp Consul + +The Consul client implementation lets applications register services with a Consul server and discover services registered by other applications. This Steeltoe client uses a Consul .NET package provided by either the (now archived) [Playfab](https://github.com/PlayFab/consuldotnet) or [G-Research](https://github.com/g-research/consuldotnet) `consuldotnet` open source project. + +This project is based on the [Spring Cloud Consul](https://spring.io/projects/spring-cloud-consul) project. + +## Consul Settings + +To get the Steeltoe discovery client to properly communicate with the Consul server, you need to provide a few configuration settings to the client. There are two sections you may need to configure. + +The first section pertains to configuring the information needed to connect to the Consul server. All of these settings should start with `Consul:` + +| Key | Description | Default | +| --- | --- | --- | +| `Host` | Address of the Consul server. | `localhost` | +| `Port` | Port number the Consul server is listening on. | 8500 | +| `Scheme` | Scheme to use with the Consul server (http or https). | `http` | +| `Datacenter` | The datacenter name passed in each request to the server. | none | +| `Token` | The auth token passed in each request to the server. | `true` | +| `WaitTime` | The time a Watch request blocks or waits. | none | +| `Username` | Username for HTTP authentication. | none | +| `Password` | Password for HTTP authentication. | none | + +The second set of settings you may need to specify pertain to service registration and service discovery. All of these settings should start with `Consul:Discovery` + +| Key | Description | Default | +| --- | --- | --- | +| `Enabled` | Enable to disable the Consul client. | `true` | +| `Register` | Whether to register as a service. | `true` | +| `CacheTTL` | Time in seconds local cache entries are valid | 15 | +| `Deregister` | Whether to de-register on shutdown. | `true` | +| `ServiceName` | The service name to register. | computed | +| `Scheme` | Scheme to register for service. | `http` | +| `Hostname` | Hostname to use when registering server. | computed | +| `IpAddress` | IP address to register. | computed | +| `Port` | Port number to register. | none | +| `PreferIpAddress` | Register IP address instead of hostname. | `false` | +| `UseAspNetCoreUrls` | Register with the address ASP.NET Core is listening on | `true` | +| `InstanceId` | The instance id registered for service. | computed | +| `Tags` | The list of tags used when registering a service. | none | +| `DefaultQueryTag` | Tag to query for in service list if one is not listed in serverListQueryTags. | none | +| `QueryPassing` | Enable or disable whether to add the 'passing' parameter to health requests. This pushes health check passing to the server. | `false` | +| `RegisterHealthCheck` | Enable or disable health check registration. | `true` | +| `HealthCheckUrl` | The health check URL override. | none | +| `HealthCheckPath` | Alternate server health check path. | `/actuator/health` | +| `HealthCheckInterval` | How often to perform the health check. | 10s | +| `HealthCheckTimeout` | Timeout for health check. | 10s | +| `HealthCheckCriticalTimeout` | Timeout to de-register services critical for longer than this value. | 30m | +| `HealthCheckTlsSkipVerify` |Skip health check TLS verification. | `false` | +| `InstanceZone` | Instance zone to use during registration. | none | +| `InstanceGroup` | Instance group to use during registration. | none | +| `DefaultZoneMetadataName` | Metadata tag name of the zone. | `zone` | +| `FailFast` | Throw exception if registration fails. | `true` | +| `Retry:Enabled` | Enable or disable retry logic. | `false` | +| `Retry:InitialInterval` | Starting interval. | 1000ms | +| `Retry:MaxAttempts` | Max retries if retry enabled. | 6 | +| `Retry:MaxInterval` | Maximum retry interval. | 2000ms | +| `Retry:Multiplier` | Retry interval multiplier. | 1.1 | +| `Heartbeat:Enabled` | Enable or disable heartbeat logic. | `true` | +| `Heartbeat:TtlValue` | Time to live heartbeat time. | 30 | +| `Heartbeat:TtlUnit` | Time to live heartbeat unit. | s | +| `Heartbeat:IntervalRatio` | The interval ratio. | 2.0/3.0 | + +## Enable Logging + +Sometimes, you many want to turn on debug logging. To do so, add the following to your `appsettings.json`: + +```json +{ + "Logging": { + "IncludeScopes": false, + "LogLevel": { + "Default": "Information", + "Steeltoe": "Debug" + } + } +} +``` + +## Health Contributor + +The Consul package provides a Steeltoe Management Health contributor (`ConsulHealthContributor`) that you can use monitor Consul server health. + +If you use the `AddDiscoveryClient()` extension method and you have configured Consul as your service discovery choice, this contributor is automatically added to the container and is automatically used. + +## Configuring Health Check + +The health check for a Consul service instance defaults to `/actuator/health`, which is a good default when you have enabled the Steeltoe management features in your application. You can change this path and provide your own implementation by using the `Consul:Discovery:HealthCheckPath` setting. You can also configure the interval that Consul uses to check the health endpoint. You can change this setting by using the `Consul:Discovery:HealthCheckInterval`. You should use settings such as "10s" and "1m" to represent 10 seconds and 1 minute, respectively. + +## Configuring Metadata + +Steeltoe `IServiceInstance` has an `IDictionary Metadata` property that is used to obtain metadata settings for an instance. Consul previously did not support including metadata with service instance registrations. The Steeltoe Consul client currently uses the Consul tags feature to approximate metadata registration. + +Tags with the form of `key=value` are split and used as `IDictionary` keys and values, respectively. Tags without the equal sign are used as both the key and the value. You can add metadata with the `consul:discovery:tags` string array: + +```json +{ + "Consul": { + "Discovery": { + "Tags": [ + "somekey=somevalue", + "someothervalue" + ] + } + } +} +``` + +The preceding tag list results in metadata that looks like this: + +```json +{ + "somekey": "somevalue", + "someothervalue": "someothervalue" +} +``` + +## Configuring InstanceId + +By default, if no other values are configured, a Consul service instance is registered with an ID that is equal to the application name concatenated with a random value. + +You can change that by configuring the `Spring:Application:InstanceId` or `vcap:application:instance_id` setting to some value. Then the ID equals to the application name concatenated with that value. Note that, on Cloud Foundry, `vcap:application:instance_id` is automatically set for you if you use the Steeltoe Cloud Foundry configuration provider. + +You can completely override all of the above by setting `Consul:Discovery:InstanceId` to some other value. diff --git a/api/v4/discovery/index.md b/api/v4/discovery/index.md new file mode 100644 index 00000000..d33b0e49 --- /dev/null +++ b/api/v4/discovery/index.md @@ -0,0 +1,12 @@ +# Service Discovery + +Steeltoe provides a set of generalized interfaces for interacting with multiple service registry options. This section covers the general components first. If you are looking for something specific to the registry server you are using, skip ahead to the section on that provider. + +In order to use any Steeltoe Discovery client, you need to: + +* Add the appropriate NuGet package reference(s) to your project. +* Configure the settings the discovery client uses to register services in the service registry. +* Configure the settings the discovery client uses to discover services in the service registry. +* Use the discovery client service in the application. + +>The Steeltoe discovery implementation (for example: the decision between Eureka and Consul) is automatically set up within the application, based on the application configuration provided. diff --git a/api/v4/discovery/initialize-discovery-client.md b/api/v4/discovery/initialize-discovery-client.md new file mode 100644 index 00000000..b3b019a1 --- /dev/null +++ b/api/v4/discovery/initialize-discovery-client.md @@ -0,0 +1,142 @@ +# Initialize Discovery Client + +This section describes how to configure the Steeltoe discovery client. + +Fundamentally, three things need to happen to use the clients: + +1. Add NuGet References +1. Services need to be configured and added to the service collection +1. Services need to be started + +## Add NuGet References + +The simplest way to get started with Steeltoe Discovery is to add a reference to the package(s) containing the client technology you may wish to use. Any client package also includes all the relevant dependencies. + +| Package | Description | .NET Target | +| --- | --- | --- | +| `Steeltoe.Discovery.Abstractions` | Interfaces and objects used for extensibility. | .NET Standard 2.0 | +| `Steeltoe.Discovery.ClientBase` | Service Discovery base package. | .NET Standard 2.0 | +| `Steeltoe.Discovery.ClientCore` | Includes base. Adds WebHost compatibility. | ASP.NET Core 3.1+ | +| `Steeltoe.Discovery.Eureka` | Eureka Client functionality. Depends on ClientBase. | .NET Core 3.1+ | +| `Steeltoe.Discovery.Consul` | Consul Client functionality. Depends on ClientBase. | .NET Core 3.1+ | +| `Steeltoe.Discovery.Kubernetes` | Kubernetes Client functionality. Depends on ClientBase. | .NET Core 3.1+ | + +To add this type of NuGet to your project, add an element resembling the following `PackageReference`: + +```xml + +... + +... + +``` + +If you are using `WebHost` to run your application, you will need to also add a reference to `Steeltoe.Discovery.ClientCore`. If you would like the option of switching between clients using configuration, add a reference for each client you may wish to use. + +>As of version 3.0, a direct reference to any applicable discovery client is required. If you find log messages saying `No discovery client has been configured...`, this is why. + +## HostBuilder Extensions + +After installing the NuGet package(s), the next step is to add the Steeltoe Discovery client to the service container and use it to cause the client to start communicating with the server. + +You can do both at once with the extension methods for `IHostBuilder` and `IWebHostBuilder`. The following example uses `IHostBuilder`, and the usage is the same for `IWebHostBuilder`: + +```csharp +public class Program +{ + public static void Main(string[] args) + { + BuildWebHost(args).Run(); + } + public static IHost BuildHost(string[] args) => + Host.CreateDefaultBuilder(args) + .AddDiscoveryClient() + .Build(); +} +``` + +The `AddDiscoveryClient` extension shown above uses reflection to find assemblies containing a discovery client. Specifically, assemblies are located by the presence of the attribute `DiscoveryClientAssembly`, which contains a reference to an `IDiscoveryClientExtension` that does the work in configuring options and injecting the required service for the `IDiscoveryClient` to operate. + +>If no discovery client package is found a [NoOpDiscoveryClient](https://github.com/SteeltoeOSS/Steeltoe/blob/master/src/Discovery/src/ClientBase/SimpleClients/NoOpDiscoveryClient.cs) will be used. This will happen when no client has been added or if you publish your application with [`/p:PublishSingleFile=true`](https://docs.microsoft.com/dotnet/core/deploying/single-file)) + +To avoid this reflection-based approach, use declarative configuration of the client(s) you plan to use, like this: + +```csharp +public class Program +{ + public static void Main(string[] args) + { + BuildWebHost(args).Run(); + } + public static IHost BuildHost(string[] args) => + Host.CreateDefaultBuilder(args) + .AddServiceDiscovery(options => options.UseEureka()) + .Build(); +} +``` + +As of version 3.0.2, you may add multiple `Usexxx()` statements to this options builder, so long as only one is configured at runtime. + +>If no extension is supplied for `AddServiceDiscovery`, a [NoOpDiscoveryClient](https://github.com/SteeltoeOSS/Steeltoe/blob/master/src/Discovery/src/ClientBase/SimpleClients/NoOpDiscoveryClient.cs) will be used. + +## Other Extensions + +Alternatively, you can register and activate the client in the `ConfigureServices()` and `Configure()` methods of the `Startup` class: + +```csharp +using Steeltoe.Discovery.Client; + +public class Startup { + ... + public IConfiguration Configuration { get; private set; } + public Startup(...) + { + ... + } + public void ConfigureServices(IServiceCollection services) + { + // Add any NuGet-referenced Discovery Client services + services.AddDiscoveryClient(); + // or add a specific Discovery Client + services.AddServiceDiscovery(options => options.UseConsul()); + + // Add framework services. + services.AddMvc(); + ... + } + public void Configure(IApplicationBuilder app, ...) + { + ... + app.UseStaticFiles(); + app.UseMvc(); + + // Activate the Steeltoe Discovery Client service background thread + // This line is not needed for Steeltoe 3.1.0 and above + app.UseDiscoveryClient(); + } + ... +} +``` + +## Registering Services + +If you configured the client settings to register services, the service is automatically registered when the `UseDiscoveryClient()` method is called in the `Configure()` method. You need not do anything else to cause service registration. + +## Enable Debug Logging + +Sometimes, you may want to turn on debug logging in the discovery client. To do so, you can modify the `appsettings.json` file and turn on Debug level logging for the Steeltoe components: + +The following example shows a typical `appsettings.json` file: + +```json +{ + "Logging": { + "IncludeScopes": false, + "LogLevel": { + "Default": "Warning", + "Steeltoe": "Debug" + } + }, + ... +} +``` diff --git a/api/v4/discovery/kubernetes.md b/api/v4/discovery/kubernetes.md new file mode 100644 index 00000000..def1aab6 --- /dev/null +++ b/api/v4/discovery/kubernetes.md @@ -0,0 +1,36 @@ +# Kubernetes + +Kubernetes itself is natively capable of service discovery (see [the docs](https://kubernetes.io/docs/concepts/services-networking/service/#discovering-services)). This built-in functionality removes the need for any service registration, and it is still possible to use the discovery client interface to avoid lock-in and/or [customize the load balancing](./load-balancing.md) experience. Steeltoe provides two separate clients, depending on whether you want your application to interact with the management API (and customize load balancing or talk more directly to app instances) or use the built-in option. + +## Api-based + +The Kubernetes discovery client lets applications query Kubernetes endpoints by name (see [services](https://kubernetes.io/docs/user-guide/services/)). A service is typically exposed by the Kubernetes API server as a collection of endpoints that represent `http` and `https` addresses and that a client can access from any application running as a pod. + +### Settings + +Additional settings are available to customize the service discovery behavior with Kubernetes. All of these settings should start with `Spring:Cloud:Kubernetes:Discovery:` + +| Key | Description | Default | +| --- | --- | --- | +| `Enabled` | Whether or not to enable API interactions | `true` | +| `ServiceName` | The name of the application | `Spring:Application:Name` or executable name | +| `Namespace` | The namespace the application is deployed to | `default` | +| `AllNamespaces` | Whether to discover in all namespaces | `false` | +| `KnownSecurePorts` | List of port numbers that are considered secure and use HTTPS | 443, 8443 | +| `Metadata:AddLabels` | Whether Kubernetes labels of the services will be included | `true` | +| `Metadata:LabelsPrefix` | Prefix for the keys in Metadata hash table | not set | +| `Metadata:AddAnnotations` | Whether the Kubernetes annotations of the services will be included | `true` | +| `Metadata:AnnotationsPrefix` | Prefix to the key names in the metadata hash table | not set | +| `Metadata:AddPorts` | Whether named Kubernetes service ports will be included | `true` | +| `Metadata:PortsPrefix` | Prefix to the keys on metadata entries for ports | `port.` | +| `CacheTTL` | Time in seconds local cache entries are valid | 15 | + +>Neither `Spring:Application:Name` nor the `ServiceName` above will affect the name registered for the application within Kubernetes + +## Native + +Using native Kubernetes service discovery ensures compatibility with additional tooling, such as [Istio](https://istio.io), a service mesh that is capable of load balancing, circuit breaker, failover, and much more. + +The calling service then need only refer to names resolvable in a particular Kubernetes cluster. This may be as simple as using the service name as the host name, or it may require a fully qualified domain name (FQDN), such as `{service-name}.{namespace}.svc.{cluster}.local:{service-port}` depending on your environment. + +In order to use both the discovery client programming model and the platform's native capabilities, a [NoOpDiscoveryClient](https://github.com/SteeltoeOSS/Steeltoe/blob/master/src/Discovery/src/ClientBase/SimpleClients/NoOpDiscoveryClient.cs) can be used by either disabling other discovery clients, or not including them in the first place. diff --git a/api/v4/discovery/load-balancing.md b/api/v4/discovery/load-balancing.md new file mode 100644 index 00000000..b392495f --- /dev/null +++ b/api/v4/discovery/load-balancing.md @@ -0,0 +1,152 @@ +# Load Balancing + +Any time a client needs to select a service instance to which to send a request, some mechanism is required for selecting the instance to call. `Steeltoe.Common` provides an abstraction named `ILoadBalancer`, which provides configurable load balancing. + +## ILoadBalancer + +The `ILoadBalancer` interface defines two methods: + +```csharp + public interface ILoadBalancer + { + /// + /// Evaluates a Uri for a host name that can be resolved into a service instance + /// + /// A Uri containing a service name that can be resolved into one or more service instances + /// The original Uri, with serviceName replaced by the host:port of a service instance + Task ResolveServiceInstanceAsync(Uri request); + + /// + /// A mechanism for tracking statistics for service instances + /// + /// The original request Uri + /// The Uri resolved by the load balancer + /// The amount of time taken for a remote call to complete + /// Any exception called during calls to a resolved service instance + /// A task + Task UpdateStatsAsync(Uri originalUri, Uri resolvedUri, TimeSpan responseTime, Exception exception); + } +``` + +Any implementation of `ILoadBalancer` is expected to know how to interact with some form of service registry. The included load balancers expect an `IServiceInstanceProvider` to be available in the DI service container, so they still require configuration of some other mechanism for providing service instances. + +### Random Load Balancer + +The `RandomLoadBalancer`, as the name implies, randomly selects a service instance from all instances that are resolved from a given service name. The `ILoadBalancer` implementation adds the (optional) ability to cache service instance data, which is useful for `IServiceInstanceProvider` or `IDiscoveryClient` implementations that do not provide their own caching (such as the Consul provider). Service instance data caching happens automatically if an `IDistributedCache` instance is provided through constructor injection. + +>`RandomLoadBalancer` does not track stats or exceptions. `UpdateStatsAsync` returns `Task.CompletedTask` + +#### Using HttpClientFactory + +To add a service registry-backed random load balancer to an `HttpClient` constructed by using `HttpClientFactory`, you can use the `AddRandomLoadBalancer()` extension: + +```csharp + services.AddHttpClient("fortunes") + .AddRandomLoadBalancer() +``` + +#### Using an HttpClientHandler + +You can use the random load balancer with the included `HttpClientHandler`, which works with any `ILoadBalancer`: + +```csharp + private HttpClient _httpClient; + public FortuneService(IDiscoveryClient discoveryClient) + { + var loadBalancer = new RandomLoadBalancer(discoveryClient); + var handler = new LoadBalancerHttpClientHandler(loadBalancer); + _httpClient = new HttpClient(handler); + } +``` + +### Round Robin Load Balancer + +The provided round robin load balancer sends traffic to service instances in sequential order, as they are provided by the `IServiceInstanceProvider`. Like the `RandomLoadBalancer`, the `RoundRobinLoadBalancer` also includes the (optional) ability to cache service instances if an `IDistributedCache` instance is provided through constructor injection. Additionally, when a provided `IDistributedCache` instance is shared among clients (for example, by using a shared Redis cache for multiple front-end application instances) the round robin sequence tracking is shared across clients, ensuring an even load distribution. + +>`RoundRobinLoadBalancer` does not track stats or exceptions. `UpdateStatsAsync` returns `Task.CompletedTask` + +#### Using with HttpClientFactory + +To add a service registry-backed round robin load balancer to an `HttpClient`, you can use the `AddRoundRobinLoadBalancer()` extension. This example also adds a Redis cache so that, regardless of which client service instance makes the call, backend service instances are called in round robin order: + +```csharp + services.AddDistributedRedisCache(Configuration); + services.AddHttpClient("fortunes") + .AddRoundRobinLoadBalancer() +``` + +#### Using with HttpClientHandler + +You can use the round robin load balancer with the included `HttpClientHandler`, which works with any `ILoadBalancer`: + +```csharp + private HttpClient _httpClient; + public FortuneService(IDiscoveryClient discoveryClient) + { + var loadBalancer = new RoundRobinLoadBalancer(discoveryClient); + var handler = new LoadBalancerHttpClientHandler(loadBalancer); + _httpClient = new HttpClient(handler); + } +``` + +### Setting Cache Configuration + +For both Random and Round Robin load balancers, there are two ways to configure cache entries. The simplest is to use the `CacheTTL` property in the client configuration for your discovery client. The other option is to inject your own `DistributedCacheEntryOptions` into the service container before the call to configure service discovery. + +This example sets cache expiration to 30 seconds after an entry is recorded: + +```csharp + services.AddSingleton(cacheOptions => new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(30) }); + services.AddDiscoveryClient(config); +``` + +### Custom ILoadBalancer + +If the provided load balancer implementations do not suit your needs, you can create your own implementation of `ILoadBalancer`. + +The following example shows a load balancer that would always return the first listed instance, no matter what: + +```csharp + private readonly IServiceInstanceProvider _serviceInstanceProvider; + + public FirstInstanceLoadBalancer(IServiceInstanceProvider serviceInstanceProvider) + { + _serviceInstanceProvider = serviceInstanceProvider; + } + + public Task ResolveServiceInstanceAsync(Uri request) + { + var availableServiceInstances = _serviceInstanceProvider.GetInstances(request.Host); + return Task.FromResult(new Uri(availableServiceInstances[0].Uri, request.PathAndQuery)); + } + + public Task UpdateStatsAsync(Uri originalUri, Uri resolvedUri, TimeSpan responseTime, Exception exception) + { + return Task.CompletedTask; + } +``` + +#### Usage with HttpClientFactory + +You can add custom load balancers to the `HttpClient` pipeline with an included generic extension: + +```csharp + services.AddHttpClient("fortunes") + .AddLoadBalancer() +``` + +With this model, a `LoadBalancerDelegatingHandler` expects an `ILoadBalancer` to be provided through dependency injection, so be sure to add yours to the DI container. + +#### Using with an HttpClientHandler + +Additionally, you can also use your custom load balancer with the included `HttpClientHandler`. To do so, create an instance of your load balancer, pass it to a `LoadBalancerHttpClientHandler`, and create an `HttpClient` that uses that handler: + +```csharp + private HttpClient _httpClient; + public FortuneService(IDiscoveryClient discoveryClient) + { + var loadBalancer = new FirstInstanceLoadBalancer(discoveryClient); + var handler = new LoadBalancerHttpClientHandler(loadBalancer); + _httpClient = new HttpClient(handler); + } +``` diff --git a/api/v4/discovery/netflix-eureka.md b/api/v4/discovery/netflix-eureka.md new file mode 100644 index 00000000..d2633769 --- /dev/null +++ b/api/v4/discovery/netflix-eureka.md @@ -0,0 +1,198 @@ +# Netflix Eureka + +The Eureka client implementation lets applications register services with a Eureka server and discover services registered by other applications. + +In addition to the Quick Start below, the following Steeltoe sample applications may help you to understand how to use this client: + +* [MusicStore](https://github.com/SteeltoeOSS/Samples/tree/master/MusicStore): A sample application showing how to use all of the Steeltoe components together in a ASP.NET Core application. This is a microservices-based application built from the ASP.NET Core MusicStore reference app provided by Microsoft. +* [FreddysBBQ](https://github.com/SteeltoeOSS/Samples/tree/master/FreddysBBQ): A polyglot microservices-based sample application showing interoperability between Java and .NET on Cloud Foundry. It is secured with OAuth2 Security Services and uses Spring Cloud Services. + +## Eureka Settings + +To get the Steeltoe Discovery client to properly communicate with the Eureka server, you need to provide a few configuration settings to the client. + +What you provide depends on whether you want your application to register a service and whether it also needs to discover services with which to communicate. + +General settings that control the behavior of the client are found under the prefix with a key of `Eureka:Client`. Settings that affect registering services are found under the `Eureka:Instance` prefix. + +The following table describes the settings that control the overall behavior of the client. + +All of these settings should start with `Eureka:Client:` + +| Key | Description | Default | +| --- | --- | --- | +| `ShouldRegisterWithEureka` | Enable or disable registering as a service. | `true` | +| `ShouldFetchRegistry` | Enable or disable discovering services. | `true` | +| `ShouldGZipContent` | Enable or disable GZip usage between the client and the Eureka server. | `true` | +| `ServiceUrl` | Comma-delimited list of Eureka server endpoints. | `http://localhost:8761/eureka` | +| `ValidateCertificates` | Enable certificate validation. | `true` | +| `RegistryFetchIntervalSeconds` | Service fetch interval. | 30s | +| `ShouldFilterOnlyUpInstances` | Whether to fetch only UP instances. | `true` | +| `InstanceInfoReplicationIntervalSeconds` | How often to replicate instance changes. | 40s | +| `ShouldDisableDelta` | Whether to disable fetching of delta and, instead, get the full registry. | `false` | +| `RegistryRefreshSingleVipAddress` | Whether to be interested in only the registry information for a single VIP. | none | +| `ShouldOnDemandUpdateStatusChange` | Whether status updates are trigger on-demand register/update. | `true` | +| `AccessTokenUri` | URI to use to obtain OAuth2 access token. | none | +| `ClientSecret` | Secret to use to obtain OAuth2 access token. | none | +| `ClientId` | Client ID to use to obtain OAuth2 access token. | none | +| `CacheTTL` | Time in seconds local cache entries are valid | 15 | +| `EurekaServer:ProxyHost` | Proxy host to Eureka Server. | none | +| `EurekaServer:ProxyPort` | Proxy port to Eureka Server. | none | +| `EurekaServer:ProxyUserName` | Proxy user name to Eureka Server. | none | +| `EurekaServer:ProxyPassword` | Proxy password to Eureka Server. | none | +| `EurekaServer:ShouldGZipContent` | Whether to compress content. | `true` | +| `EurekaServer:ConnectTimeoutSeconds` | Connection timeout. | 5s | +| `EurekaServer:RetryCount` | Number of times to retry Eureka Server requests. | 3 | +| `Health:Enabled` | Enable or disable management health contributor. | `true` | +| `Health:CheckEnabled` | Enable or disable Eureka health check handler. | `true` | +| `Health:MonitoredApps` | List of applications the management health contributor monitors. | All apps in registry | + +**NOTE**: **Some settings affect registering as a service as well.** + +The following table describes the settings you can use to configure the behavior of the client as it relates to registering services: + +| Key | Description | Default | +| --- | --- | --- | +| `AppName` | Name of the application to be registered with Eureka. | `Spring:Application:Name` or `unknown` | +| `Port` | Port on which the instance is registered. | 80 | +| `HostName` | Address on which the instance is registered. | computed | +| `InstanceId` | Unique ID (within the scope of the `AppName`) of the instance registered with Eureka. | computed | +| `AppGroupName` | Name of the application group to be registered with Eureka. | none | +| `InstanceEnabledOnInit` | Whether the instance should take traffic as soon as it is registered. | `false` | +| `SecurePort` | Secure port on which the instance should receive traffic. | 443 | +| `NonSecurePortEnabled` | Non-secure port enabled. | `true` | +| `SecurePortEnabled` | Secure port enabled. | `false` | +| `LeaseRenewalIntervalInSeconds` | How often client needs to send heartbeats. | 30s | +| `LeaseExpirationDurationInSeconds` | Time the Eureka server waits before removing instance. | 90s | +| `VipAddress` | Virtual host name. | `{HostName}:{Port}` | +| `SecureVipAddress` | Secure virtual host name. | `{HostName}:{SecurePort}`| +| `MetadataMap` | Name/value pairs associated with the instance. | none | +| `StatusPageUrlPath` | Relative status page path for this instance. | `/Status` | +| `StatusPageUrl` | Absolute status page for this instance. | computed | +| `HomePageUrlPath` | | `/` | +| `HomePageUrl` | Absolute home page for this instance. | computed | +| `HealthCheckUrlPath` | | `/healthcheck` | +| `HealthCheckUrl` | Absolute health check page for this instance. | computed | +| `SecureHealthCheckUrl` | Secured absolute health check page for this instance. | computed | +| `IpAddress` | IP address to register. | computed | +| `PreferIpAddress` | Whether to register by using IpAddress instead of hostname. | `false` | +| `RegistrationMethod` | How to register service on Cloud Foundry. Can be `route`, `direct`, or `hostname`. | `route` | + +All of the settings in the preceding table should start with `Eureka:Instance:`. + +> As of Steeltoe 3.1.1, `HealthCheckUrlPath` and `StatusPageUrlPath` will be automatically configured to be the `Health` and `Info` actuator paths (respectively) if those actuators are configured. + +You should register by using the `direct` setting mentioned earlier when you want to use container-to-container networking on Cloud Foundry. You should use the `Hostname` setting on Cloud Foundry when you want the registration to use whatever value is configured or computed as `Eureka:Instance:HostName`. + +For a complete understanding of the effects of many of these settings, we recommend that you review the documentation on the [Netflix Eureka Wiki](https://github.com/Netflix/eureka/wiki). In most cases, unless you are confident that you understand the effects of changing the values from their defaults, we recommend that you use the defaults. + +## Bind to Cloud Foundry + +When you want to use a Eureka Server on Cloud Foundry and you have installed [Spring Cloud Services](https://docs.pivotal.io/spring-cloud-services/), you can create and bind an instance of the server to the application by using the Cloud Foundry CLI: + +```bash +# Create eureka server instance named `myDiscoveryService` +cf create-service p-service-registry standard myDiscoveryService + +# Wait for service to become ready +cf services + +# Bind the service to `myApp` +cf bind-service myApp myDiscoveryService + +# Restage the app to pick up change +cf restage myApp +``` + +For more information on using the Eureka Server on Cloud Foundry, see the [Spring Cloud Services](https://docs.pivotal.io/spring-cloud-services/) documentation. + +Once the service is bound to your application, the connection properties are available in `VCAP_SERVICES`. + +>As of Steeltoe 3.0.0, an additional NuGet reference for `Steeltoe.Connector.CloudFoundry` is required to read in service bindings. Just adding the reference will be enough for service bindings to be discoverable. + +## Configuring Health Contributors + +The Eureka package provides two different Steeltoe Management Health contributors that you can use to monitor Eureka server health. + +The first one, `EurekaServerHealthContributor`, is used to determine and report the health of the connection to the Eureka servers. It looks at the status of last good registry fetch or the last heartbeat attempt and uses that information to compute the health of the connection. + +If you use the `AddDiscoveryClient()` extension method and you have configured Eureka as your service discovery choice, this contributor is automatically added to the container and is automatically used. + +By default, the contributor is enabled but can be disabled by setting `Eureka:Client:Health:Enabled=false`. + +The second contributor that you can enable is the `EurekaApplicationsHealthContributor`. By default, this contributor is not enabled, so you must add it to the service container yourself: + +```csharp + services.AddSingleton(); +``` + +You can use the `EurekaApplicationsHealthContributor` to report the health of a configurable list of registered services based on the status of the service in the registry. For each service it is configured to monitor, it looks at all of the instances of that service and, if all of the instances are marked `DOWN`, the service is reported as being in bad health. You can configure the services that it monitors by using the `Eureka:Client:Health:MonitoredApps` configuration setting. Typically you would set this to the list of external service names the application depends on and that, were they unavailable, would impact the operation of the app. + +## Configuring Health Checks + +By default, Eureka uses the client heartbeat to determine if a client is up. Unless specified otherwise, the Eureka client does not propagate the current health status of the application, as calculated by the health contributors configured for the application. Consequently, after successful registration, Eureka always announces that the application is in 'UP' state. You can alter this behavior by enabling Eureka health checks, which results in propagating application status to Eureka. As a consequence, every other application does not send traffic to applications in states other then 'UP'. + +To enable this behavior, you need to add the `IHealthCheckHandler` to your service container (the handler is not added to the container by default): + +```csharp + services.AddSingleton(); +``` + +You can enable or disable the handler by using the `Eureka:Client:Health:CheckEnabled` configuration settings. It is enabled by default. + +If you require more control over the health check, consider implementing your own `IHealthCheckHandler`. + +## Configuring Multiple Service Urls + +You can specify a comma-delimited list of Eureka server URLs that the client uses when registering or fetching the service registry. Those servers should be part of a properly configured Eureka server cluster and should be using peer-to-peer communications to keep in sync. + +The Eureka client automatically fails over to the other nodes in the cluster. When a failed Eureka server node comes back up, the Eureka client automatically reconnects back to the server at some point. + +## Configuring Metadata + +It is worth spending a bit of time understanding how the Eureka metadata works so that you can use it in a way that makes sense in your application. + +Standard metadata information (such as hostname, IP address, port numbers, status page, and health check endpoint) is associated with every service registration. These are published in the service registry and are used by clients to contact the services in a straightforward way. + +You can add additional metadata to instance registrations by using the configuration setting `Eureka:Instance:MetadataMap`. The metadata you supply by using this configuration is added to the service registration and becomes accessible in remote clients. + +In general, additional metadata does not change the behavior of the client, unless the client is made aware of the meaning of the metadata. + +## Configuring Mutual TLS + +In cases where customizations to communications with the Eureka Server are needed (for example: when using mutual TLS authentication), `IHttpClientHandlerProvider` is available. In order to simplify mTLS setup in applications, `Steeltoe.Common.Http.ClientCertificateHttpHandlerProvider` is automatically injected when `IHttpClientHandlerProvider` is not detected and `IOptions` is available. + +```csharp +// Add an ICertificateSource to your configuration builder +var configurationBuilder = new ConfigurationBuilder() + .AddPemFiles("instance.crt", "instance.key"); + /* OR */ + .AddCertificateFile("instance.p12"); + /* OR */ + config.Add() + +var services = new ServiceCollection(); +// Add Options and configure CertificateOptions +services.AddOptions(); + +// generally configure CertificateOptions with certificate path information +services.Configure(config); + +// actually load the certificate into CertificateOptions +services.AddSingleton, ConfigureCertificateOptions>(); +// or +services.AddSingleton, PemConfigureCertificateOptions>(); +// or +services.AddSingleton, {ConfigureYourCertificateOptions}>(); + +services.AddDiscoveryClient(config); +``` + +If you wish to supply your own `IHttpClientHandlerProvider`, add it into the service collection before calling `AddDiscoveryClient`: + +```csharp +services.AddSingleton(new MyCustomHttpClientHandlerProvider()); +services.AddDiscoveryClient(config); +``` + +>You can use a single `ICertificateSource` for both Eureka and [Config Server mTLS connections](../configuration/config-server-provider.md#configuring-mutual-tls). diff --git a/api/v4/fileshares/index.md b/api/v4/fileshares/index.md new file mode 100644 index 00000000..bba7c5fe --- /dev/null +++ b/api/v4/fileshares/index.md @@ -0,0 +1,5 @@ +# Windows Network File Shares + +Steeltoe's `WindowsNetworkFileShare` provides a simplified experience for interacting with SMB file shares by making [P/Invoke calls](https://docs.microsoft.com/cpp/dotnet/how-to-call-native-dlls-from-managed-code-using-pinvoke) to underlying Windows APIs, specifically to `mpr.dll`. For more background on SMB, see [Microsoft's SMB documentation](https://docs.microsoft.com/windows/desktop/fileio/microsoft-smb-protocol-and-cifs-protocol-overview) + +Network shares are not the most cloud-native way to deal with files. For new development, consider exploring message queues, caches, blob stores, and NoSQL stores. The alternatives offer greater resiliency and decoupling from backing services. That said, sometimes the alternatives are n0t viable. For .NET applications deployed to Microsoft Windows Servers, Steeltoe provides a stepping stone towards cloud-native in the form of the `WindowsNetworkFileShare`. For applications deployed to Linux hosts on TAS, [volume services](https://docs.pivotal.io/pivotalcf/opsguide/enable-vol-services.html) are available. diff --git a/api/v4/fileshares/usage.md b/api/v4/fileshares/usage.md new file mode 100644 index 00000000..1dc1ff3c --- /dev/null +++ b/api/v4/fileshares/usage.md @@ -0,0 +1,55 @@ +# Usage + +Before starting with Steeltoe's Windows Network File Share library, you should already have a plan for interacting with the file system. Steeltoe only manages the connection to the file share. + +## Add NuGet References + +Use the NuGet Package Manager or a `PackageReference` to add a reference to `Steeltoe.Common.Net` + +## Managing the Connection + +The state of the connection to the file share is managed through the lifecycle of `WindowsNetworkFileShare`. To open the connection, instantiate a `WindowsFileShare`: + +```csharp +var fileShare = new WindowsNetworkFileShare(@"\\server\path", new System.Net.NetworkCredential("username", "password")); +``` + +The constructor opens the connection with the equivalent of the `net use` command by calling [`WNetAddConnection2`](https://docs.microsoft.com/windows/desktop/api/winnetwk/nf-winnetwk-wnetaddconnection2a) with the information provided in the constructor. + +To close the connection, call dispose on the `WindowsNetworkFileShare`: + +```csharp +fileShare.Dispose(); +``` + +Because `WindowsNetworkFileShare` implements `IDisposable`, you can also manage the `WindowsNetworkFileShare` with a `using` statement: + +```csharp +using (new WindowsNetworkFileShare(@"\\server\path", new System.Net.NetworkCredential("username", "password"))) +{ + // Interact with an attached network share here +}; +``` + +>WARNING: Levels of support for accessing SMB shares on TAS for Windows may vary by installed version. Support for IP-based SMB shares was included with the initial 2.4 release and in patch releases for lower versions. Support for FQDN-based SMB shares will be included in PASW 2.5 and in patch releases for lower versions. See the [TAS Release notes](https://docs.pivotal.io/pivotalcf/2-4/pcf-release-notes/windows-rn.html) to confirm the relevant patch version required. + +### Managing Credentials + +Credentials are generally required for interacting with SMB shares. `WindowsNetworkFileShare` does not have an opinion on where those credentials are stored. However, as a general guideline, storing credentials with your application's code or standard configuration is not recommended. Consider using the [CredHub Service Broker](https://docs.pivotal.io/credhub-service-broker/) for storing and retrieving your credentials. + +When used in conjunction with the Cloud Foundry Configuration Provider, you can access the values as follows: + +```csharp +public SomeClassConstructor(IOptions serviceOptions) +{ + var userName = serviceOptions.Services["credhub"] + .First(q => q.Name.Equals("my-network-share")) + .Credentials["share-username"].Value; + var password = serviceOptions.Services["credhub"] + .First(q => q.Name.Equals("my-network-share")) + .Credentials["share-password"].Value; + + // create credential object to pass to WindowsNetworkFileShare + var _shareCredential = new NetworkCredential(userName, password); +} +``` diff --git a/api/v4/initializr/images/default.png b/api/v4/initializr/images/default.png new file mode 100644 index 0000000000000000000000000000000000000000..76d47759fd12cfc7586f0cd135ae77d91b5651ee GIT binary patch literal 173502 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 znAΠ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 literal 0 HcmV?d00001 diff --git a/api/v4/initializr/images/explore.png b/api/v4/initializr/images/explore.png new file mode 100644 index 0000000000000000000000000000000000000000..7e4247ab58cd6203f2b1af0d65c349a53f0fb116 GIT binary patch literal 211245 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

jOIs!fZB}2y zZW-(OFsyujsX@5Ee!WDkLBaNzR32CRaxlS9EDWR* zH!VYZiMcooJoz^Jlqz0_xq9FZKAWzQ8g|4j(!;wLet_}PpX;2+`ly3Amle#fl}rMg z=Q3?}fe6tWHnVLUF#^Q_V%tfv)1Ugp8jk0*T-k+%$NJ0JKn4ETryL-@jrN>yvFD6Pj=R8avLAI6KZH3D$O6hQaeA_8koG%bWU1+{n({_w@Jj3xf(yZv!O*W%ZYL;6cs#@825ZC@!}PxABgs>f z=PqgujtT3spcja)4p5{I{{+I91*dt?3O%oib&S$q_#1%ZVT-HYvhlwvw|`$3P{qab z2@mbYJVn17PrXBILV6D}DtylQ>|rJxB`_f;8!Uhp^o6O6#R0$2AZ+NPh&UJiYQmB2 z+F+qg?`ghbYuTpElsWl0GlW@=3|<_i!)|6^uTi4bZ0)O|C{~CSK-rH+08mLb0OKqT z9=&UC6n8>xm#uiCAfNib>&XAPno#Ks+sE43B@u=*aR@h#Ia+?g@Oq%E%q2`ybVh(jgfAsksW$4 z>@9M*h;kn`+X0CI!xuAr4;J)YMsMJ13V)_>9yerbErrj)Y1)l2p9Raf6OXcOgqiLD z#2~HGX8r&3ddA;-53aqpM|xucX(7x3_qa=v3s~+>r=lE*kwn8N6j$%AqCD<0hsbE1 zO(@fE<$kbZlunihxU$dUGra){#>$piZ;HA}jUlntL80xDfsN;qGezTmD36Q}q?+*_ zK}tSS_!jsCJx3pSTY<|&^M*ubBh>jk>c8!3U#^%4fie2he%%0^#&oRLO>1YALjgVl z6S;KCH|{i-?WB324ZL38_GsaLzqArTQ#VgM3*6X;Q>kQ@()UJ@+}A-sua~y0<$Q47 z^Zv*HsKG}QtDX;Zo{R3Li%%EV0Eak(n%n)5$N?*Qo>iZYsi(TpuZJQp9#wVbu z^O;v#3eUEmsPdQVK@SX$Iq1c%aO1@5+3kAI{PF5~ljrXW{O>hXRUKZ@Q%CTmU44dk zvkwOfIE>?Wd$GGJ$y zeTxg3kOxYhJda(S#>~Pz=y09^0N?AO&Zyo255Tf<=WL|byf%vYJJlBrjEU6e{LxG_wD8u?;6zmYnrIHfyEr%0K`_Y_ZF36R(_ zz2+$_ui^2y>u$Y2#sL_kDm)B8O48oc#+cWW-G?^!|A)5kjB2Xex>iI1QK4-Ezlp-okijatibdV-U?;#){3P=+~Dbia21qB6(6r~1CLV$0_N4?(n-gk`m z&o_p{arl#*?6c3>Yt1>=T+@hUK4?N5xJ#j~csAxpj@vf5gD;JuE`n(Yz283u%&Jgp z&k`}`=aUU3dO`{J7JY$aq6?fe+hY79u)(#EuSyW0nNj~#nBcZuR~;%2a|yvNj$C{= zr;P?uf~;MV01Bg2=(g^`Dbyg3>O_f4NUQB($L1?yxNxO;XUcOPgfu8q zn+;7Dl?Y~e?36FE?az|@xv-eE(HAa8sF$D}4GcydF>>o5)hTIQrxxt?`|6AUu`wVnoD?NO*fOL!#R41OqB^aXDa4t>$J>XwIm$T?_IgbJFgrbm= zlRO5_jH-6L`>O$M%{erC@8ZwTWWZ!eS~D+>wCX5RfFFKj1RAaBA#<`Xtxg<1xeGix-VbtI?)%Tsc_CfhdYcBzz-QJ+mR z#ofXPxveq5^`yJ^^R;u3jJb=Go`I;$c>EVreW9(V=hXZ;7o1ucOWdS&iRaXgb9a3R z#&6}fWvBGr*N^7W)GXDx|svu z?W#>hdli@L6x%N%#-W)*Hs9Ufw1!?%aXN#a5pj;=Qp+v$2mmwE>sDj_=SI#@XAA3H zbF?2h`l`LY9B z2+)#j>MVXg#`LVFPolZwxabpFk}&xL&{pCtn0~lLlz-KRb2!4yBRW zjqX7A>V@*5zTGPNC{6ns{EyPfo||pw)D~J4CVBL7E`;{h==u+cbmJo*#Ui{-zad@; zjYT4|*+W>xZhz%Ch=FloQMl#F1bxKpM{5)BkEGQmEjT;K8cRKp*!``O_C@TgXPYo3w=JbS5$+?y`rpNlqkWp)gM+DKX$- zav9De(mLL(ZGild@L^TD#K|$-eMJWn#AZE$`p)c6i62ss81mMny1 za#XKv=m&Z}snOkO`*e>Qd^)AAUHPE=${s07*c`NNB_)RN&umu(bOOiO7sO2NZE#%k zRv#W201G<2Mag}8=&`g=!}+QS+}3>>r%!dx)6by!vx5}cd9u)s?Abgz=^=ujm|Af6 zhZ_;vZ8D2l##$%PC%79Y4J7%Z4bY#ZyZBmyf{!tjKqUWZne&NKbGr6P%%s32vW>G3Fx zDK9SsT9{0X(#c5ygr!Ul5-cwx*Ph4w_>Th;~47Q-)bkfi{5p00&OOt#{ z&fnrEY*+kaXN9E>>~9@k1RVozUq-7CK%m*1em^}xwa(YApuKHs6Xml~-3C{>*}-Q* z_fyz8tU=*=nX)FDy3cSLAZ5;gxEnxbG{j|F{{Y0=gogZ_AETzF`xgwEzt3dzf&P4y z>mFh0z|8f&P6e<78-Rr1)>|BSz4IpS%xvWbZgevH+UJQixLs79CJ&|wTO~ZF(fkQt zWWCOO6e3^O6Ulx3k!qYqsoEV<_A7QBxYt`>zqO!sy6IeZt4ib{p<>KzfcXj4r3Z^y z39&LHxQ)^@!Ew$iBj!@m}Dbr}zzDh{TGE&u`({956UcBPgksYwR=Gx9smQj(O^w0k9J#!> zg38A_Y304g8-DcthVu?e+AIDO4oVn-%OC2mGi3Z&V{>V27wz2Sn|-L!k0Y2sobqax z6nI{2g_@#h+K;=~SrJgx&yy#QC?t))U1dc;zqQRGvtms9L+9CMQ}@HJ1S-B%p1Ehi zm$6D(#KR1WROH2o3!C|f{B%7=O^O2XlO<@6#Y++@{Y7Zysf-T(0fEv@DTfv4rKyCF zk_F*oCADV;gskkxzBGlWncVwiO(-|%>3SEH>~56h+8(!Y;aWD-dt*L{#^3pwM*CPc zI?Y%?I1A&LIwqE8CjroJp}ROg+~-J&>P6Y-p+7#Jzx~mF@~VW&?KtX>z~g#~sQ8IO zbv;aetz~Nt7!aCN8@4oeSG}i}4s%UAgb<8pS9rGS-Xl9{C!M!wClURj-ZlNzx2?n& z>r-rxVTLD_zr@+x(A#1Nc&J&cnZX*k{)72AyHEjb5$&sEi0v163-o4MiZwYpdU`oiCK{#IS%k(*mZ`@XRe?ClY*v)w&6*e&#S+EWiX4r zUnvo0TBN%Gcj)vSmqA({SnXNad3WMI(;(iVc7Y^w76pUd{*){F(SJN;a;fg|Pb}F_ zll$XHwEF#l<{zb>9LfeyjKoY5aqV80uMb*Y`{Ev+z|I`{;$wxlHqU*P&BZs3)gw!v zr?UB=ad9hE2ZmlRrhk>C!zq;cp7{}}gvi>{1nguvmKi@X!4k@{HEbp2>~Sho*<*gF zA!PWv42(eIwUD0YV@_{q3oD->K^)??)M&8bsrf`&S^Swwj&ifOf3~$-?!8;`n%}~fvsf~KGE45Q3aq4g2tYSauGYG2^&m%c z5>_f_yz6oc9bgQB?#G#1JEA&M3Dg^@DGE5l z^n!SiHVmEhijzG$?Y!j*8}(v8BcmhJJ$HsU_sdxK8nGBTUw&OvWMU^IAq^jWRA#~H zgxbPnshM>%QIW&)yc)CYv{621SdB|}7x1`mheGPHpZeIde&>PeY=?8=M%_`i63-Dq znqHHyOK=QWlpMYD7M6oVrQN&02gP%rGKI3tCF%1Vp`A-53h=w-=J$GI(#IcBawb%9pwIpRkyzAgQ?14Wy`w%(QxZF<^xwCL|DMrZyZRHIP znez8fuONUD=0e<*kDnG7&97<&q}pZK50j4-mdK2&C7ZukmeheyjG*+DJurIQ{HZMIi;P?9dV2_eXj|zP=#tk8y zM?0dy_@yTvIkW&sK=|I7LZde92puZKvgt<>WMK3|%q}nj=}K&?Snax+qb69&^}4-7gl zv$b;U`U@lq3`1>GFapf~+C~-R$7nd&v(DqtL!dEACGfi8`7n^cS9*^ONkmUkzs75; zcKXGysGVnKz_mKxYs*5uOx&JO~^Sf2~snT!ke>`@DHJ&dDQts1NGeduetH&u)SQf z2AO}*jj&vUe6(_ziyH@V!HRRWAd$jc-`*Ep{YInYMz~t!{o$bX>Kwh_lV`P#|-2R9azDfG&99@a93FJ2o_RO}L59}yA4Bdb2ZE`|1wm5M;-)*bl0d-xo? z#*y$TkTR8d!f>Kj%cuUyhyVHCR^aJISC-$cGx3*%$@@R) zcie&K!vE|=5Jz5}({rjDcewM?uP9#5;TTn5-#@?PW%eOLq~9rnB`*3$ZiZSSyTgvd zruTDA+wF6JKEZHigExwPE35ca-iJ!NA zZJMJn#UhY3!ai44$&RW}G_lXRmc3j2RAQl;-Pbc~srv7w``7ib5+#Yey|iqy7x6)P zG-TK}lXb9?rI$%VfZde7CEJm3VNx>#ngczX$&}ILV@IT`W=xk`&P`S7l$abg+wX$;!7y>hukTf8B_Rj(S2h92B0(*{(1a{4Qaa`s%G(wNSQPrEgMw1P~vm6+_sTO8Y^sE zObR9LwrL(`cHcQ+^FsH#IIwqe6qG$y7%i8}6U>onL-scm?0$#i|FJ?~?Ja6g$S`A1 zN{FQI^M>l$QnN-&K&%~?%ROXAZw=dcbPHs-#noe(3Jiz z01K0>%rVgJ_ToLg1NW86tvd5a8Kl*F-e^KCC4o>9X=ZT7f36S8r9mm5118~gdgNj# zpZW+)UbpWB&*wGfcRBcP%b3qhM`AK|>WZ<zbUwy#>m0h*V=d5gG}4=# zU#@!I7RRGGGE~%gPC^e2iLa=FgUQ*+ZQ}R-?d<*6qgP+!8P38o`?1w>Vmab&n~z~K z74!p>-HP++9~o@uk)_Si<#`hpx>;f^*rQG8QE!W&jUvov5evLeWj_8VME3J>sN@0G z<>8G{Hqz(HaQB)WfIWIz<9LCdhQM)s?!tkFDRhv0Ysr`?D%02{wPXJ9jrS7FRoSf9 zP9O{xRt)xKKm}e+M`F@k0EXG_nG>Iz#0NbF|06E>4Q+!O!N!dI>?Do&ll>760=0sx zt9>X(@8+|0QgpeWZ^o~A!dca2`C3c|uZXj)-V!XYYw6ml&~k=EMVbc<5o$CpxJ@jK zM)ir7=kSLQUzLjK&s?%614Nj~^`@oL8i4RmaI}F5NiL(s`rfapggOjFD;YskGiv3l z$#0xJY%=l{@N{MyQr(@!{@A|S7y|GeX8=`%h9)bN|4PEJ+$1!4RIT{V;@FOjNN8M9 zPd@0tZU2(^=-%ynT)J#7>>S5jjNr8>X~BU9I9KIL5&sush;<%j-5h+sms^xv&Y2#M zqkQ5fY(l7HPjB3<5rwP**dFfD{u7OjMPyaOlpobSZ~Q#;lo1{!Epe#UOK>>s6>!6S zd=$k7e9qsnAPZ@WNvv6CH$c7Rm&=NrBTidIX`NCi4zE`Fwbh(1@<{D9aJcM;p0As} zaqzLb<5hUuY}HLuHqg@OLL^M4cg0G+WTE(Wuq388kO7e%l;3LJ0JKDxgwh%-u*!GB zexL45d=}fpI`mHsClw|D%lBzGW`9JBLE}==TP?L?`#`evG6m%I5?O6PB@rs%(b`vO&+L@T{csDys;2y zCs08$U2>o}_d8qB&iBzg{_=>Y<-tQPUw(CQ_dOj?-LLK*m6T@W7q|_g&6Zu>U`>kRVDesBmgTB zf861N^*1z$fMKd^3fV`<25o)`#5}%M9%}gP9MFqrBlIzT5)3vIltzXJYIneZ=)lcr zp((E%>oVX&aa!xaiReb(uU+9Z%C!5<^&Ew+g`kFKNaps}JfZAkH?wxnJ;g_1ZH7(D zU(q3FUsKgo2c9$^S_5bwRI|N;+oyb7*CZ@T zHS|%exrqYmBTGDh+LTo{M_z7xLDHIks3rY7j=)9aukg+b=oHsmyFYy>ZM>)%5x$wDH zllC2O)1De=0x$GbU3z_&Xmtxc33!iml)xWlq|@s4}`^1UiCC31|=;p3O!U)X#U z=2w&!Qp}?)-w~td!&}>hK0cgAZIrGNzvz~1>mk84R}?X9Pb8${z5++Z&LgU0|{U z7g%ne*3>=61A_JVR}xnlvYC<>M*?xd2R+AarnlL}w^y8Z#Jy&A2D5{LI6CfNN1$6D zK=@KHQAB-r%p^gy-MgR@=feSjCFH9bF_{g(_hOS(;Mm^K0TD(>Uow9-WZgy>$GwHB zCQoipyl9nmBs(B+@`5FXpIu29`^>@FiYN4!yy`3o0&~qvb+Nv_MtCCes~XK*Rl{7& zM(O#NBA}=D2{E>+%M!kFY4-SBU*^C(v+G35!lO$Vf0EO{MtU1j$9$}<*fDAH7AQIw zJ`nF2uL13j z<0xFKzf;%Z*ii;o;-VGJmWE{Xq0YVspc7k`S5srAabJDxV4iVxLOru_cO2fwj?mZV zG9Q25U2!)2SI#j^P3dQOpstqGb??Tr;%#Pk1@Qu}h5M;;8tPPf^wEnhcCSJZR-GRr>&=TqkT;~_>@F~+9)B5!G>yMQ3>{2 zg*r`zY}GrmmKr@y))6H%T#BK-24*pEQ8+UpdmB8jf;oVFD=H-I4RB6LB+V~#04!1q zjO=xKBiM?Q;d=*Lc?WSo@^x1A06+9KWFftq3!yAnY#sgd>K2oj4eeUc(49?IFq?Am z-K{q#xAqsC*I!c~`J5Emo~p72sP2o41h5-3j%o!~1BTMoV-kpH&yrsq%s!KdoW#ok z0gd#;#Jg&;1(=jE7D3hg*mxvmB#JucrbL-K-AwHpEtlxe?8 zW|(}4%*;KMfQ=?Wq#(psiJgKxxP=At2NeQOA7%p@hHoGrg53DfAP=B5A1+=7vhgz0 zA|JMP%CN6lv&5^apF2c^O`N?)DaVA4@Y3?YKl=2EUu1Xw2DslKirXXt_ITT{K=m1eINrBFYL)Hc{ezK=bR)wV!X!h{ZR`gt_J%5>lkQ2Tfq13qN+!cEVe1 zY69{#&hTFnSS82&-p!nxmkG8$MF=`nYJv`e!~x-|dFqIknlcl&U#rUMCVMO|l{t_mtHO6N|Ct*6+tb@U2VL+WK?10A@WrGhfDiEjt76Ipj=lhxDJNL_of$4?pK_z zKGRD(17-X0=k@d$;u?tUnpj5kD7YKAm`|3mN06?m3 z1mG?kk&lk&hn>-8dwE9!*ublRoCh)pj|P~DjyE$SG7DqpuRDHobz7~k`tyK%(3+hU zg>BjO$K)ubRopfBK#TN`=^HNv>OVMJM52^6>&`~<;-QhyGWUs^$!ZG4in;z zCl@a^-{ZsUNiQ+&mAoBN49v6@p_KJuJQUB6IxBOUeIXvoo0{MU8MHHMtp$x0A_1vU z7Az~goS``jLV3>T+8p-LUeaN!e6Q^FC}l{l7n}c04xrkSoPQ^a<;$km>V;(Q(a15Y z5*neWw55SZZ|)QE_+rKY9Xe`AT;J=y$kVSGs3|NXf7`I zSEg$_$m)o>18~~qH!r>GOJZN8ilof7?yebE2hWcCxg4QU<$J`|V%GYB{c`!iD)efY z2f@8QkR*@fM%M8sxz>DWGqBwcIOP3LkbR|AJW0e1?Z#o4;zCiAzFXrE} zw|j4jAdzhpG*RPL3k>cgiMXSZO8+dyiw~PGtEFzAYc7I6; z2@j2_?wD)(8ClfV___DAY$*v;wiLEh1S$fBm%DI@l~$e~qrm_llhq*7*l3}^eg&FE z%m|rYl0@aPk6xAGI%q0&@~05ZA?M*{b862>F3&T5&K;-9)c&T^Dubyor1mtkS{#nW z%UR_1d#mgz;*(gsGHc&fAV+VZMWOSG6OKw+=F{MNZ>rAvzuFcC^cCovI0j(*L zpLC7p%r_d+qsL$sPoBlt-5b;WFy7I*key)bKW;e>PTnAJ(w=G;4Pz^DWKsx?IMkJ6 zO6e43*Fp#YBZNAxsqMZ8sr?UW9*GSULM!srz{V^PJ}fZU*1}!tXS>`$* zwF*^j?+{qAmsN#4GL^I6^U+cHO&$S4PPI!Wy+N6+*wG1*Zg7d3T(HDiN*Ab1sB>c{7n1xO zhjo_{3Ix0;)9jwb>y5>D4~>%4XgWz%X@nF{_(3O?m~ueXVoH~k`UYiOwOWL|yb zyN-y35*~V=iVBM$?0+FzP!!X`zB;gSS?RlTppF_ z@=25>wRfliXwq^HrN{8m`(KTcqrbt5=k1rFw|+b378jV)SuLassWw$}8HgLRg>r@Z z?U&qxQGQ7|nin`1O>__YAYjS*LxU%EoE6zfDlNsPylt1kENAzxqi(s`@=N1!(L~bO z3~*B{J6ZU#Q@ui^HY2^Fb%KSfZL?u2*N!+u|4K^4_``Z59Sab8h8lO0CNxF%bef<` zvFrB*U$Yw!&q(eXh(GY=lsP>oBIFyzWB)*|l$dF~ED2&kZ!E&ze3&F$IO<#@Mm{E3 z>tsN%VTZE_Br*XjSp$s%3BE)*12r1&qnh5reZ(k>j7{mm581IPyhNWH(qXw^dfg%b ze};f~;gV4GtT&hCO=$<_mV^D>c`%~RMRmMmC5n`(eFKGyKkSz5)NJpPHbpfLud}zo zfAS56d|`9OOiNsDe2U-r_KFzq7Z-8s>ccd+3gSnEjG=_s4tfJZpwyBiIxWxci{v&} zmlVd_ntfRrCnsZkWAWiJ$};Zb20glqUoY3tr>0>sXSg(cSJiV{$tz3BARDL`= z1gMMURIwYB$C0IsN7_y%b8qj?u|00O9#1LeS^aGTL~Bj_Ke`dA$T%|c&YFKDxSLKHS7 z%5P}@WN$l)217#7NLhCW)@P5^p=7{L@g(Qp+}Up$9;;4Pg3;he*$>-k*B6)y26dze zWS}4cgh#U%1$pv|%DAydB5Gb3y-5`Ez%AFH)6Isy_%t7i$zoy=Xg?zi~OZT|k|Ukrr$kkG5pcRj;027BSEOOmN^ zmvQ=@DDmf71hZvHH=&p}c2hArA~`ytxL)X%ne{4P-llXHdnJ!0TUN5nPN0`5`2?SA zyqs8ak4a;Yg)UDG5cZ1 z!u`|t&9d6OWKXu%^Xfq?k2CvYQfa8%kLZ)7GV#=ioV2`oJ3UH=%a=AkO49s5Y5B-LfAw~>1(*-&AkY_Udg>uk!#vHgGOXYCK74R z=8X!@`s`*o3h0X`1f*ms9P85f{4Kjt(p8Yvl-F)9QT8!9mlQ-S*Dfhwx;&L~4(-Z6wL0x5|eW1NrvTQx4w*4&L@yrV?c-}*@r2l&7`RV_V zT7m~=LKmG0hB-uI?-kjWt0weO{5xfp=7#;1LKZddCJIZIO3^SJpE_OQGrJ?h8A6a) zNJxfZo6j6H$1FeE8gqeEhWw$0!e%r+fqE&1}pm!5}UOhrXc+26|p}rVod1Jm!na!8qPf z5LX-cYjM?Sgw{!%2>{vHujTE{%kLb7Hbz!Y^!@n-fhvHnHEy!E|&p_0Z%Hor>wW1UtDJKH_Ac|zGg`uE)H_N^lH7tk<6mJK0A-4 zcS!lq?pJ4~?9WwE!t_6806AdgVBy+Ax;SGv3Yftx=5Pv{1d
p-7Q?I62bL0n9s12-q^I>qnRB{eX1?5Mu?_$m+*=s0)8~PU{a7dC z_+<~OmhWCS6B7~F^W^8EhPsZ6o{0B6@C&Vs{Vf`FA~O^T>)qCJ<5G6x8C5Qh)N|C} z`^>OYj4Jl18tXFHi)b9RE;EdEFK+u3o|J_IlnDDM!c4Y0&8!hTb-{Y)>kib`W=wBF zx@yZTDr0o6pBU3LKoDe15NFJT7QeRBrmugcQ+CF}66ZWlrjD!5@}#-_zHcW8{ZBYp zXBvRvc1C(Xj7avJ#xQg7E_9zo8R#pLlGq(D@kX0MyMar<3#0EJvt)lUfUY@!)k?+E zxU&bV&?sXe34-BPnpqSnYPQFxsNgJKao)AeaS;4S>0pKoTl8gmF#IrNgYVI1I)Nq> z(7?79T9Gn$X~I(V*eq@t#KFZ=gByjr>fD&#@*z5}`r0acuXjf#LjbE*j*%T%{n`2U zn?mZ;yNg)A=v6mfNE(pPD_Skq_4bqi8KQA@Xybv`3@z8*+in+7i=n^&(H}US;l7|? z7cO{jn`uucGXa}dKYkt;V}9+}p=dqV3*@}pd?zlqoTU&Z24;x1SyY}4pf6Z_v#u2( zI;oXs;v_<|Rjbii@=*-ITK{L)i=86-z#)*8uIhDj=gCFLtxxLyjdpS5$4U+7nOn-a z?l8GHMgF2ofdF`e{H#zhHe9`e5J`NOcWPbiCt*6~?m?+qnQ>nL5T?fmA1oCWCw{r7 zehHanR;S1;g_C;F)=^`1^wRcSx@JcKCyBQmmqc(Ex*Y{tYdyCN zQwq4iIqz5_%w}70FI7%6+Pxj!cXU`XMKZRVHd+dQ!NXk4j5nESP%)eV1sIKQCGFpPz`J);E!WIif8a^=uw+h&1AO5X z7Z^YT!O*@y)$!`lW#qe(iANnhn|`$Q1uYaV z2AU=N>Dr$_Y12<0!s`J!Qc3lr!Y>Jr+X(3T_~Qdd^S4d4%aHP853_#V+S6~e>XQ$j zhVN@|gx)vXTjXl`)`EtzAP1B&dcLOi^H{^l_Pp#EEqm5PKbD27oPv813g}C6(aHmY z4~;bH4%63A#d%X{Vbfhmv={Q^yy%!+mrZ&IIh9)cXG4ynFJn84E*#1WndW1EsaIZx zzv{}mPG3>k8XPjmkQXyj^kSJKcIPa~6XoYWCeg6oX$LnxH+J9A@Ex8SJ=@~~&Z$O( zXwW5jyHEjZ+Rbbqsi?ZBnz~seF`!4F5eUVtOF>;ww&RhDAoiRzZf8?04m+pbctJe5 z5$CqSf7K{J1uPvmEhOYU%e*ajXuqjM7eu2tUJ_CZA#SJQkH+Kv(z`5LlFwkf&i^Ri z4zBt06l3$$7t&OKF^&Mg#v9NRzN;?XKCFg@MOzg%rjEK~ycyF&0O@0NqRg4)3>o%i z*C)aFlC@8lCK+p2ol4B9k*ElB`s{eqZW|Us1j-M)^-1(iWDpk8rPwQ4AtxA@fz zh%%A%PhH{5xTW?;sIPh5R4J?`6C)`>=F<8nCHuYD|15d%kuWnZja|2LMDd21R?=0? zMr~|5ubM(oCTrGGKe;-bd?6#_UQx@2-u=-eiLS@7J?Zr!vVsc<^m_k+Pya~_|Go%w z(E2xo){oQ<%g?FLPDXZ*&P$v7=Zv&2NJt$wp-hz13j>LyzpU?UQI1hHz?*NT;sp}M z2OJeJx+i{zlV7jp?-B>g^fT`$ZL&n@<4f?btQAjfHwkW(fu&F3#-+8EoAXKm^S5%V zJ$^YJK!!v%Ig3cZl{ZI@(Pr>FxSK5ZPWZsvo(Wx%__GcF9Gu`H_)OTN?Znz@AOtjn zPn`9lFh-)>U5s-^^U3+h3(bUi>5ga9k6_OE_WJO6tc)v8WnfH&F90Tw81MmHY`+8e!Cf$dDt3tl~{yCxDzw3nmzeNc+oHLcNsJKZgfL>d?0*xQNpfEZny#oIbSFy&TO^D~km51j6gP>6}&lk+8%P^c|qYvjQ}0}qk6FJX`Sj3oA(zwC#FJh`!dl$x<> zpvUpQE{svW5QFf{j>p9Vz1<~~J)K~hrj!1;rB=r^v*ud4$Nr4iDhR2=43sbY)Jk4@dzdXHN2 zGna;v@o@79qY~N}C8;i8KOd2zGD(dx#D4B3PBnE1f#x!2DX4FBHGHAq7j#g3zpLa| zj{0v~hxA&FoEw%eew^=}j~I^B=jxe)Ub5b{<(FaX+JOEA5tQJi(iN>RsBy<${HA3d z<}3Gh>!){*>FytW>n0k;q|c>E%jV=;+ZTj(&D6?*J5wbSg@Zz2>b*pCbEcXx355T* zZ~o^`Q13mJ0vg)Wa_>0^hL77s+;RjxmQ#<>J>Yks%dUSl46}!J^Glc-Tqx|wsDMJ& zT~q~h*=O#gE*6J?vftZ%%c;MpO67BP#((&E{LV#kfhLSgE>jnUczO$z{iC+)DHCRw z&QYYSYDV8KlZ%1T;3=fbDvK|*RDSa@AG7=1Tir$c8$gUpu#;#}&7 zEX6vHVuz0za$&gnd-BZYQJLp8xU4X%2K)8z|G0Sx4hxWh$wCRBa%lXVo$eScf*D*; zfBtvmaRPAcm{6ar8<+iv+OX5p)lo-}trwN0?USI-q?Gq~TG(S`Bz#%Duu90X!kNK; zuj4FTtSW|EUEi+|wiPYn*tKo^FnH1f?))!_c$2ylsU_gmeX5Nw3@~&~#D#4D&~*b* z*m6Si*zdd?ggvJus-HN)D9|tx;x`T3+>akJMM|fr7pEB3LQLfJr3#J3x(o`U6l(t` zNKmuy$6pj*M=Ibey&nAQ&`5dKJ1Y6p0&z4_(WU?M$ZOhCe$5gOIj{p;%Qw3tfr(Qm1^xSftakqa$1Kg$_yNE??1f7KBc*^{TZ zCH1n`8iRDG-w^#DYUWpSJnLpn=RK^NE_n=q9xUa<9G!nHaXuXhArXlp8s=PyUXt|R zJU?ZapBg#kTkKgVT~jS8a8tV@M>vV14ciLj18U9Byk&%j9fym=idCwb>jjL zDXQ2FpKmC(BgA6QxQn~-#~GR@?G&1^o??x~fXc~GYJ|m$(;bp&n578M=!%BIr!ssV z1x@KLhj{5cbY_JUzQUN)U)!1^8ugZ0_RF73h18i2h)(0qQ8*F=q)I$;rw!oF!a`fW zYjk z#J!I>=O`jxALONGa09N;I>Aa^2unIwD1e-6nsi48yjrVKXPWTVhw)hk&2OB&Y-Dxnn7!U9YMjd~RYG-J`C z?vNN5N)he~2eY8|HJj0h#q=?s_ z(L!_Ugpz^J;qIK9ZArl}5;tlu3=j+0_mF|K{S-T&69x+< z4wJQwfMXau2k}2DP;=(*bF+0EtW?QJ3`rbdBM&q9GppB#EZ zGqBJ??P=LqB(JVLb&{GFXBWV}L(HBlCc=%@G#)`tCqBCj2c&i(%k-*L+GfV)pF<###qaE{34Sh9PU~R5$7dlzb=S>&`Es11;6wW2FNriY{x=z0 zJKDLp47%1$i56Z8BsZCVWlMi$l#8dy&qjI{Be9@ZzL$#4D}Ca<+<%Ch4t3(}b}ZyR zZ(P>Q;Rr4o--Yz@_le%o7qFLcOH8;Arb}8;y!D&XFgA-1gPTZ^|LxN`NNGn?IYLk9 za*CS>h$U_V^kb}KH^GbfjLg&^)r^a+G%;B<+MGUyVVsr@-* z{ylBM3X%bDi(y!CO+JzY5ZIa+#?=j99h@RprGH49TDFz?nqe>aBuFImEzEwpasu8~-VwCn!*%aXl@(EwdH&?rmd3&VaI zx|*uZOY0Q}q0+XyB{6?L#piPc1B^bKye#gG9V*P#gyVph6DD$3wihP$zx{wfvNY?R zf7wzz|G(Q(h+eLE{(mXZg8wPda!N@Bn#g@FJYBXNjXxpi?%x$!vO-K&d1FEzXGoyT zdCLkf0%L{y{v59q<`<9u_hThp=bxt)-lnTfEG0l$C1n}i1yc>R5h9x@DZjcy4-d<0 z1R0yOo6ZFCYi?w6c%Qi@A?P@@Ii8WKWWas7U+CXeM1Q?X|9Zdve^hCp#TQeY_hg@- zNzl+&QyBktyZ1@GcgSjBAtdDo(WI+2K3$Sg-P|M>= zNjJH(RFXai_=V-CjbIw2{94YQ+D6AbN0+BkpfuU+`{(K3&IiuCJm2+U1;Mnnw$cze zCA+h;1H|*rJ0(KL7DhdOHg*CjaPxQf*>5?KYeCma6)JJJnJQ**zsyS}*?eY4b@C0t zYZDAQRz=!mxLT=C!dWku4e)cK?5p`H;U(3}sgy>FJ*nlEYSG3`e%bQq(}tkEyqT^*8O6RE@;c!#3KK16Y0Drp<;7yBl%7R=O<{D ztlX5;WlsyiY^J=YuNO_B-N9)tQ;m(mikV?vt*i4w67ZVuJ;>a+JsR8<_|E&UZ#GbS zJ3ZSK)%z|Ve1|@6G!AiOip+!#;haJ+{bw3Ohue3%K|V5?x(?rr*mm{bO3&HC3=BMZgqB>|5=uw}z4m9MTU*Whl~-P6z&|A5 zMJBPqkt0n_5UyC&*=#an(=&xQPy)l6!*|m5LNw1NJ^fX% zz0#!pl-i!H;Oh*mi^ktSzdB&hW;FDq9`yvs*h#ILruiQqvZ=(q>Yj}Iq*1Hzy{0R6 z+GU$EclD{H0MEBwHs}+z{FV24#%d9(Kk}kJTF2U;+F^|^T2L$AN?A2Pf!w8|*394h zaz5u~>=;aqul~;NPNRzVXb0}c%O6*gF#Ee}u|mlWTR<4pQJQswDP{B>u=W>Lw`M0d(tewiWRr>aHXrT(U0HAJ{O;1O$M{y*XxSk};MT}hg!ZtVV z=Ruj|p`X!_aCkQ^zO^Xeo0$QXjN*u8?x%}4-uBwZjB^b7R{pnL+GmU8RVvXK^#$AdT?kTV3xMb;Z0g<^1Ks-T%?F zAPy{;vn>YpamU$9Hl=U;DK|hiSc@{BUqa?396oZa<7(DThaA$B-Hxpx73L!pr=IMb zJaew&o<&+$p|wda{fOEg0RogkS@$+u6FNgN%BC8l`45xV_GvtJ# zp+9tqL0LPEZL$h;*+P5|N^XuzzHk$rzTp$?5sexy)YGg( zM;|@MKf#ug`+*w zT43nz?(T+xVR*OaJm;&=dDrv%gEfoAV(&fozVA<7pX)jqPHAQG;;%c%3+zq{0>C2~ zp`Op~S<5i<*7@h?96rf`OCs~0Pu6TQx7`MQT4>#Od0vgx>QMjMo!hj@X-CH<*hONM z?rMkfyOdS(<6eE-tr)wn%mYyJu>&aEbYLoAJK_0T31WAh(28;8`Ho;5U+xOq>u zrYyAku*M`SRwsN|<;n{H=HXhQcL7pw_9_%R*@#==VWJh9)5{UD3gprnOCmSN4Zx&K zo78-R&5eD@J^F5Yn>rCdF_@$EsgULq}8!_$`EqY2N_*5ak1YaoZyH;%3+Z>&t8 zfh_}uvMf?!q;Rvdcru}_GS*wQqv3CQSYGAcVL{iy<{x$ERCK+Dl~pXZ*APMj`x|t5 z&Je;5C1zvVx?hvf?$+`*QgM@S=UWPE`#0?T*vOo37?RUkQxR zajXW+x-u%OB&rQwW|KD-e4Y=VvtKOQtAC8-gJCzA|W> zyDa$zL$=p?Wl)+YzWRhj@*fD6VK0K;pjpf2B684V!U)~uCsVS zGM*;PuV!LUZQ-&@gDZiYqEz;)=3%@X0Zi13)r&Ut6O%SmlGy7E(MG2MW-*cF7OjEh zynCjJg=vIBu2uVDiZyo9?(aAX??eHC{j3kNlYLT$Hmur7w>9)6hIV_mTgADvK_Fw7 zoNa5~7At44V;@o z?Tm4Ot`+{b&d!8}3qq}AlHvAAbk4)L6@~_O3ILPz zcDQWJNj9Wj&m_hmJnP|>D=nDlanjx5P7`5tc0CV2%;Kb_JkK81HBsT`2$C{GB+Xr{ zErjO-Zi`9uC@P|zL+D0D7`d{1h&tX(N(|MRKbyWG+0?2*$|Wa~UuEeKm7=e&+DC8B zB!M}fBarDgIY|B5`R0}! z6&8oGuH1~oNbY&f;~Xc~I~=Udat*cl^vY&ScTOT>}%Pwd2UY+A{txWT+L01f( zZ|(^vtK@1?VN;>59psBbgy^ZV_k)xL2l=+^D)(s*^WuBt!B8P?EXFa-)i>Pf+(kXF zJ~hj8DHzWiEbj+ipIfkKb?=wZVdVc%e? zLwuYfDDQSj%0-`mG~%b5kcJ`US9`I3 zpp?37H(xCou+)h$tQeksMhs~SZ#|Q6WT|)qaChvq_y-19{OZwqwr0G-Ob~(6;DM0@ zibFGv!``_f__*-?q`ra-O+h(P48!$LH{)yF+vM(f1?`SUG{%Y~o8dByW%p*Wg#iDR7CnkN#Mo!gWodS6LPbuZ(NYABh@x9+JEWZy9MDQ65p z<_QnOW2cO5W0eIeER%(GIj_sl#uy1tRltj39BZjnZ?O9Pt19Y$R+&wCSR}hkl-EE< ztcpp{^g-%Bv8%!shRzl(&@t2X&iV4o(>h~UDV@tu;Am;+|%$}`R!(m=e_7oSLJ?`o* zZWUNZXU-0_g$iW2=YOxebsYh#W1Z*xxDq9^3Na0^dH&3{=Fq=-Bg6hpr2E=ei$i_E z)9O=gy_{ij$`u)JK%uj~dXE!^x7WNBTb~wo<>x;YJAb{GC$}KT4te6Wcn4g3h3i;* zFShOXocuntz4m8d#q-Z2)r_Bd6*EQv0_V7!+wOZayjg1Co0|<8GXzcT{$s!y%Jcza z9(y!^c(amLWJZjJRUL&ZK!%NIyzx|tefus5FXT?Lmwd7R$FpF{44j-?LIe5qcWYm7 zert}z|E#{ext-~QM=E5bvm^Hm**-C(m@zof6nv^wYE-Ni+BRqMa*&ZiVX5E=*_j5tOo@#8ux%^319rc zBubao8u>gZSs!ffG_}^IUs%BvL5Q2-d)jy8@z#cZIHA9jo=A2BezTv*;LC=087C!^%$+B�Wr-WMapvF%#2!?{F=*zC0fY2Wyi$? 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

JAYm6=5g)(N^? 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 literal 0 HcmV?d00001 diff --git a/api/v4/initializr/images/generate.png b/api/v4/initializr/images/generate.png new file mode 100644 index 0000000000000000000000000000000000000000..b8c1ab54675e6473e097a61c5f7d8bc4182cf32d GIT binary patch literal 175833 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�vxcY+7+==!4PrDWZg!fAA<$K8p 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%0D+m}ip46rYP| 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

+n_)M=6aOrHE_z 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