.NET Aspire PostgreSQL integráció
Tartalmazza: Üzemeltetési integráció és
Client integráció
PostgreSQL egy hatékony, nyílt forráskódú objektum-relációs adatbázis-rendszer, amely sok éves aktív fejlesztéssel rendelkezik, amely erős hírnévre tett szert a megbízhatóság, a funkciók robusztussága és a teljesítmény tekintetében. A .NET AspirePostgreSQL integráció lehetővé teszi a meglévő PostgreSQL adatbázisokhoz való csatlakozást, vagy új példányok létrehozását a .NET-ból a docker.io/library/postgres
tárolóképfájllal.
Üzemeltetési integráció
A PostgreSQL integráció különféle PostgreSQL erőforrásokat modellez a következő típusokként.
Ha hozzá szeretne férni ezekhez a típusokhoz és API-khoz, hogy erőforrásként kifejezze őket a alkalmazásgazda projektben, telepítse a 📦Aspire.Hosting.PostgreSQL NuGet csomagot:
dotnet add package Aspire.Hosting.PostgreSQL
További információért lásd: dotnet add package vagy Csomagfüggőségek kezelése .NET alkalmazásokban.
PostgreSQL erőforrás hozzáadása a kiszolgálóhoz
Az alkalmazásgazdaprojektben hívja meg a AddPostgres-példány builder
, hogy adjon hozzá egy PostgreSQL kiszolgálóerőforrást, majd hívja meg a AddDatabase a postgres
-példányon, hogy adjon hozzá egy adatbázis-erőforrást az alábbi példában látható módon:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres");
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Amikor .NET.NET Aspire egy konténerképet ad hozzá az alkalmazás gazdagépéhez, ahogyan az a docker.io/library/postgres
-konténerkép előző példájában is látható, létrehoz egy új PostgreSQL szerverpéldányt a helyi gépen. A PostgreSQL kiszolgálóra és a PostgreSQL adatbázispéldányra (a postgresdb
változóra) mutató hivatkozások a ExampleProject
függőségének hozzáadására szolgálnak. A PostgreSQL kiszolgálóerőforrás alapértelmezett hitelesítő adatokat tartalmaz, username
"postgres"
és véletlenszerűen generált password
a CreateDefaultPasswordParameter metódus használatával.
A WithReference metódus konfigurál egy kapcsolatot a ExampleProject
nevű "messaging"
. További információért lásd: Tároló erőforrás életciklus.
Borravaló
Ha inkább egy meglévő PostgreSQL kiszolgálóhoz szeretne csatlakozni, hívja meg inkább a AddConnectionString. További információért lásd: Hivatkozás a meglévő erőforrásokra.
PostgreSQL pgAdmin-erőforrás hozzáadása
Amikor a PostgreSQL erőforrásokat a builder
-hez a AddPostgres
metódussal ad hozzá, akkor a WithPgAdmin hívások láncolásával hozzáadhatja a dpage/pgadmin4 tárolót. Ez a tároló egy platformfüggetlen ügyfél PostgreSQL adatbázisokhoz, amely egy webes rendszergazdai irányítópultot szolgál ki. Vegye figyelembe a következő példát:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithPgAdmin();
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Az előző kód hozzáad egy tárolót a docker.io/dpage/pgadmin4
képfájl alapján. A tároló a PostgreSQL kiszolgáló- és adatbázis-erőforrások kezelésére szolgál. A WithPgAdmin
metódus egy olyan tárolót ad hozzá, amely webes rendszergazdai irányítópultot szolgál ki PostgreSQL adatbázisokhoz.
A pgAdmin hosztport konfigurálása
A pgAdmin tároló gazdagépportjának konfigurálásához hívja meg a WithHostPort metódust a PostgreSQL kiszolgálóerőforráson. Az alábbi példa bemutatja, hogyan konfigurálhatja a gazdaportot a pgAdmin tárolóhoz:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithPgAdmin(pgAdmin => pgAdmin.WithHostPort(5050));
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Az előző kód hozzáadja és konfigurálja a host portot a pgAdmin konténerhez. A hosztport egyébként véletlenszerűen kerül hozzárendelésre.
PostgreSQL pgWeb-erőforrás hozzáadása
Ha PostgreSQL erőforrásokat ad hozzá a builder
a AddPostgres
módszerrel, a WithPgWeb hívások láncolásával hozzáadhatja a sosedoff/pgweb tárolót. Ez a tároló egy platformfüggetlen ügyfél PostgreSQL adatbázisokhoz, amely egy webes rendszergazdai irányítópultot szolgál ki. Vegye figyelembe a következő példát:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithPgWeb();
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Az előző kód hozzáad egy tárolót a docker.io/sosedoff/pgweb
képfájl alapján. Az összes regisztrált PostgresDatabaseResource példány egy konfigurációs fájl példányonkénti létrehozására szolgál, és minden konfiguráció a pgweb tároló könyvjelző-könyvtárához van kötve. További információért lásd a PgWeb-dokumentumokat: Server kapcsolati könyvjelzők.
A pgWeb-gazdagép portjának konfigurálása
A pgWeb-tároló gazdagépportjának konfigurálásához hívja meg a WithHostPort metódust a PostgreSQL kiszolgálóerőforráson. Az alábbi példa bemutatja, hogyan konfigurálhatja a gazdaportot a pgAdmin tárolóhoz:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithPgWeb(pgWeb => pgWeb.WithHostPort(5050));
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Az előző kód hozzáadja és konfigurálja a pgWeb-konténer host portját. A hosztport egyébként véletlenszerűen kerül hozzárendelésre.
Adjon hozzá PostgreSQL szerverkiszolgálói erőforrást adatmennyiséggel
Ha adatkötetet szeretne hozzáadni a PostgreSQL kiszolgálóerőforráshoz, hívja meg a WithDataVolume metódust a PostgreSQL kiszolgálóerőforráson:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithDataVolume(isReadOnly: false);
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Az adatkötet a tároló életciklusán kívüli PostgreSQL kiszolgálóadatok megőrzésére szolgál. Az adatkötet a /var/lib/postgresql/data
kiszolgálótároló PostgreSQL elérési útjára van csatlakoztatva, és ha nincs megadva name
paraméter, a rendszer véletlenszerűen hozza létre a nevet. További információk az adatmennyiségekről és arról, hogy miért részesítik előnyben őket a bind mount-okhelyett, lásd a Docker dokumentációt: Kötetek.
PostgreSQL szerver erőforrás hozzáadása adatok csatolásával
Ha adatkötési csatlakoztatást szeretne hozzáadni a PostgreSQL kiszolgálóerőforráshoz, hívja meg a WithDataBindMount metódust:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithDataBindMount(
source: @"C:\PostgreSQL\Data",
isReadOnly: false);
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Fontos
Az adatkötési bind mountok korlátozott funkcionalitással rendelkeznek a kötetekhez képest, amelyek jobb teljesítményt, hordozhatóságot és biztonságot nyújtanak, így jobban alkalmasak az éles környezetekben. A kötési csatlakoztatások azonban lehetővé teszik a fájlok közvetlen elérését és módosítását a gazdarendszeren, ami ideális fejlesztési és tesztelési célokra, ahol valós idejű módosításokra van szükség.
Az adatmegkötések a gazdagép fájlrendszerére támaszkodnak, hogy a tároló újraindításakor megőrizzék a PostgreSQL kiszolgáló adatait. Az adatkötés csatlakoztatása a Windows C:\PostgreSQL\Data
(vagy /PostgreSQL/Data
Unix) gazdaszámítógépének PostgreSQL kiszolgálótárolójában található elérési útjára van csatlakoztatva. Az adatkötési csatlakoztatásokkal kapcsolatos további információkért lásd Docker dokumentumokat: Kötési csatlakoztatások.
PostgreSQL kiszolgálói erőforrás hozzáadása bindelt csatolással inicializáláskor
Ha init bind-csatlakoztatást szeretne hozzáadni a PostgreSQL kiszolgálóerőforráshoz, hívja meg a WithInitBindMount metódust:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithInitBindMount(@"C:\PostgreSQL\Init");
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Az init csatolás a hosztgép fájlrendszerére támaszkodik, hogy inicializálja a PostgreSQL kiszolgálóadatbázist a konténerek init mappájával. Ez a mappa inicializálásra szolgál, és futtat minden végrehajtható rendszerhéj-szkriptet vagy .sql parancsfájlt a postgres-data mappa létrehozása után. Az inicializálási kötés csatlakoztatása a C:\PostgreSQL\Init
windowsos (vagy /PostgreSQL/Init
Unix) útvonalon van csatlakoztatva a gazdagépen a PostgreSQL kiszolgálótárolóban.
PostgreSQL szerver erőforrás hozzáadása paraméterekkel
Ha explicit módon meg szeretné adni a tárolólemezkép által használt felhasználónevet és jelszót, paraméterekként megadhatja ezeket a hitelesítő adatokat. Tekintse meg a következő alternatív példát:
var builder = DistributedApplication.CreateBuilder(args);
var username = builder.AddParameter("username", secret: true);
var password = builder.AddParameter("password", secret: true);
var postgres = builder.AddPostgres("postgres", username, password);
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
További információ a paraméterek megadásáról: Külső paraméterek.
Integrációs állapotellenőrzések üzemeltetése
A PostgreSQL üzemeltetési integráció automatikusan hozzáad egy állapotellenőrzést a PostgreSQL kiszolgálói erőforráshoz. Az állapot-ellenőrzés ellenőrzi, hogy a PostgreSQL kiszolgáló fut-e, és hogy létre lehet-e hozni vele kapcsolatot.
Az üzemeltetési integráció a 📦 AspNetCore.HealthChecks.Npgsql NuGet-csomagra támaszkodik.
Client integráció
Az .NET AspirePostgreSQL ügyfélintegráció megkezdéséhez telepítse az Npgsql 📦Aspireügyfelet használó projektben, vagyis abban a projektben, amelyik az PostgreSQL ügyfelet használó alkalmazásé. A PostgreSQL ügyfélintegráció egy olyan NpgsqlDataSource példányt regisztrál, amelyet használhat a PostgreSQL-hoz való interakcióhoz.
dotnet add package Aspire.Npgsql
Npgsql-ügyfél hozzáadása
Az ügyféloldali projekt Program.cs fájljában hívja meg a AddNpgsqlDataSource bővítménymetódusát bármelyik IHostApplicationBuilder-n a NpgsqlDataSource
regisztrálásához a függőséginjektáló konténeren keresztül történő használatra. A metódus egy kapcsolatnévparamétert használ.
builder.AddNpgsqlDataSource(connectionName: "postgresdb");
Borravaló
A connectionName
paraméternek meg kell egyeznie a PostgreSQL kiszolgálói erőforrás alkalmazásgazdaprojektben való hozzáadásakor használt névvel. További információért lásd: PostgreSQL szerver erőforrás hozzáadása.
Miután hozzáadta a NpgsqlDataSource
elemet az építőhöz, a NpgsqlDataSource
példányt függőséginjektálással kaphatja meg. Ha például egy példaszolgáltatásból szeretné lekérni az adatforrás-objektumot, konstruktorparaméterként határozza meg, és győződjön meg arról, hogy a ExampleService
osztály regisztrálva van a függőséginjektálási tárolóban:
public class ExampleService(NpgsqlDataSource dataSource)
{
// Use dataSource...
}
További információ a függőséginjektálásról: .NET függőséginjektálás.
Kulcsos Npgsql-ügyfél hozzáadása
Előfordulhatnak olyan helyzetek, amikor több NpgsqlDataSource
példányt szeretne regisztrálni különböző kapcsolatnevekkel. A kulcsos Npgsql-ügyfelek regisztrálásához hívja meg a AddKeyedNpgsqlDataSource metódust:
builder.AddKeyedNpgsqlDataSource(name: "chat");
builder.AddKeyedNpgsqlDataSource(name: "queue");
Ezután függőséginjektálással lekérheti a NpgsqlDataSource
példányokat. Ha például egy példaszolgáltatásból szeretné lekérni a kapcsolatot:
public class ExampleService(
[FromKeyedServices("chat")] NpgsqlDataSource chatDataSource,
[FromKeyedServices("queue")] NpgsqlDataSource queueDataSource)
{
// Use data sources...
}
További információ a kulcsos szolgáltatásokról: .NET függőséginjektálás: Kulcsos szolgáltatások.
Konfiguráció
A .NET AspirePostgreSQL integráció több konfigurációs módszert és lehetőséget kínál a projekt követelményeinek és konvencióinak teljesítéséhez.
Kapcsolati karakterlánc használata
Ha a ConnectionStrings
konfigurációs szakaszból használ kapcsolati sztringet, megadhatja a kapcsolati sztring nevét a AddNpgsqlDataSource metódus meghívásakor:
builder.AddNpgsqlDataSource("postgresdb");
Ezután a kapcsolati karakterlánc a ConnectionStrings
konfigurációs szakaszból kerül lekérésre.
{
"ConnectionStrings": {
"postgresdb": "Host=myserver;Database=postgresdb"
}
}
További információért lásd a ConnectionString.
Konfigurációs szolgáltatók használata
A .NET AspirePostgreSQL integráció támogatja a Microsoft.Extensions.Configuration. Betölti a NpgsqlSettings-t a appsettings.json-ből vagy más konfigurációs fájlokból a Aspire:Npgsql
kulcs használatával. Példa appsettings.json, amely konfigurál néhány beállítást:
Az alábbi példa egy appsettings.json fájlt mutat be, amely konfigurálja a rendelkezésre álló lehetőségek némelyikét:
{
"Aspire": {
"Npgsql": {
"ConnectionString": "Host=myserver;Database=postgresdb",
"DisableHealthChecks": false,
"DisableTracing": true,
"DisableMetrics": false
}
}
}
A teljes PostgreSQL ügyfél-integrációs JSON sémát lásd: Aspire. Npgsql/ConfigurationSchema.json.
Beágyazott delegátumok használata
A Action<NpgsqlSettings> configureSettings
delegáltat soros beállításokhoz is átadhatja, például az állapot-ellenőrzések letiltásához:
builder.AddNpgsqlDataSource(
"postgresdb",
static settings => settings.DisableHealthChecks = true);
Client integrációs egészségügyi ellenőrzések
Alapértelmezés szerint .NET.NET Aspireügyfélintegrációkállapotellenőrzések engedélyezve vannak minden szolgáltatásra. Hasonlóképpen számos .NET.NET Aspireüzemeltetési integráció is lehetővé teszi az állapot-ellenőrzési végpontokat. További információ:
- Hozzáadja a
NpgSqlHealthCheck
, amely ellenőrzi, hogy a parancsok sikeresen végrehajthatók-e a mögöttes Postgres adatbázison. - Integrálható a
/health
HTTP-végponttal, amely meghatározza, hogy az összes regisztrált állapot-ellenőrzésnek át kell mennie ahhoz, hogy az alkalmazás készen álljon a forgalom elfogadására
Megfigyelhetőség és telemetria
.NET .NET Aspire integrációk automatikusan beállítják a naplózási, követési és metrikakonfigurációkat, amelyeket más néven is ismert mint a megfigyelhetőség alappillérei. Az integráció megfigyelhetőségéről és telemetriáról további információt .NET.NET Aspire integrációk áttekintésében. A háttérszolgáltatástól függően egyes integrációk csak bizonyos funkciókat támogatnak. Egyes integrációk például támogatják a naplózást és a nyomkövetést, a metrikákat azonban nem. A telemetriai funkciók a Konfiguráció szakaszban ismertetett technikákkal is letilthatók.
Fakitermelés
Az .NET AspirePostgreSQL integráció a következő naplókategóriákat használja:
Npgsql.Connection
Npgsql.Command
Npgsql.Transaction
Npgsql.Copy
Npgsql.Replication
Npgsql.Exception
Nyomkövetés
Az .NET AspirePostgreSQL integráció a következő nyomkövetési tevékenységeket bocsátja ki a OpenTelemetryhasználatával:
Npgsql
Metrikák
Az .NET AspirePostgreSQL integráció a következő metrikákat bocsátja ki a OpenTelemetryhasználatával:
- Npgsql:
ec_Npgsql_bytes_written_per_second
ec_Npgsql_bytes_read_per_second
ec_Npgsql_commands_per_second
ec_Npgsql_total_commands
ec_Npgsql_current_commands
ec_Npgsql_failed_commands
ec_Npgsql_prepared_commands_ratio
ec_Npgsql_connection_pools
ec_Npgsql_multiplexing_average_commands_per_batch
ec_Npgsql_multiplexing_average_write_time_per_batch