integrasi .NET AspirePostgreSQL
Meliputi: integrasi hosting dan integrasi
Client
PostgreSQL adalah sistem database relasional objek sumber terbuka yang kuat dengan bertahun-tahun pengembangan aktif yang telah memberinya reputasi yang kuat untuk keandalan, ketahanan fitur, dan performa. Integrasi .NET AspirePostgreSQL menyediakan cara untuk terhubung ke database PostgreSQL yang ada, atau membuat instans baru dari .NET dengan gambar kontainer docker.io/library/postgres
.
Integrasi hosting
Integrasi hosting PostgreSQL memodelkan berbagai sumber daya PostgreSQL sebagai jenis berikut.
Untuk mengakses jenis dan API ini untuk mengekspresikannya sebagai sumber daya di proyek host aplikasi Anda, instal paket NuGet 📦Aspire.Hosting.PostgreSQL:
dotnet add package Aspire.Hosting.PostgreSQL
Untuk informasi selengkapnya, lihat dotnet menambahkan paket atau Mengelola dependensi paket di aplikasi .NET.
Menambahkan sumber daya server PostgreSQL
Di proyek host aplikasi Anda, panggil AddPostgres pada instans builder
untuk menambahkan sumber daya server PostgreSQL lalu panggil AddDatabase pada instans postgres
untuk menambahkan sumber daya database seperti yang ditunjukkan dalam contoh berikut:
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...
Saat .NET.NET Aspire menambahkan gambar kontainer ke host aplikasi, seperti yang ditunjukkan dalam contoh sebelumnya dengan gambar docker.io/library/postgres
, gambar tersebut membuat instans server PostgreSQL baru di komputer lokal Anda. Referensi ke server PostgreSQL dan instans database PostgreSQL Anda (variabel postgresdb
) digunakan untuk menambahkan dependensi ke ExampleProject
. Sumber daya server PostgreSQL mencakup kredensial default dengan username
"postgres"
dan password
yang dihasilkan secara acak menggunakan metode CreateDefaultPasswordParameter.
Metode WithReference mengonfigurasi koneksi di ExampleProject
bernama "messaging"
. Untuk informasi selengkapnya, lihat siklus hidup sumber daya Kontainer.
Tips
Jika Anda lebih suka menyambungkan ke server PostgreSQL yang sudah ada, panggil AddConnectionString sebagai gantinya. Untuk informasi selengkapnya, lihat referensi sumber daya yang ada.
Menambahkan sumber daya pgAdmin PostgreSQL
Saat menambahkan sumber daya PostgreSQL ke builder
dengan metode AddPostgres
, Anda dapat menautkan panggilan ke WithPgAdmin untuk menambahkan kontainer dpage/pgadmin4. Kontainer ini adalah klien lintas platform untuk database PostgreSQL, yang melayani dasbor admin berbasis web. Pertimbangkan contoh berikut:
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...
Kode sebelumnya menambahkan kontainer berdasarkan gambar docker.io/dpage/pgadmin4
. Kontainer digunakan untuk mengelola server PostgreSQL dan sumber daya database. Metode WithPgAdmin
menambahkan kontainer yang melayani dasbor admin berbasis web untuk database PostgreSQL.
Mengonfigurasi port tuan rumah pgAdmin
Untuk mengonfigurasi port host untuk kontainer pgAdmin, panggil metode WithHostPort pada sumber daya server PostgreSQL. Contoh berikut menunjukkan cara mengonfigurasi port host untuk kontainer pgAdmin:
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...
Kode sebelumnya menambahkan dan mengonfigurasi port host untuk kontainer pgAdmin. Port host ditetapkan secara acak.
Menambahkan sumber daya pgWeb PostgreSQL
Saat menambahkan sumber daya PostgreSQL ke builder
dengan metode AddPostgres
, Anda dapat merangkai pemanggilan ke WithPgWeb untuk menambahkan kontainer sosedoff/pgweb. Kontainer ini adalah klien lintas platform untuk database PostgreSQL, yang melayani dasbor admin berbasis web. Pertimbangkan contoh berikut:
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...
Kode sebelumnya menambahkan kontainer berdasarkan gambar docker.io/sosedoff/pgweb
. Semua instans PostgresDatabaseResource terdaftar digunakan untuk membuat file konfigurasi per instans, dan setiap konfigurasi terikat ke pgweb direktori bookmark kontainer. Untuk informasi selengkapnya, lihat dokumen PgWeb: Server penanda koneksi.
Konfigurasikan port host pgWeb
Untuk mengonfigurasi port host untuk kontainer pgWeb, panggil metode WithHostPort pada sumber daya server PostgreSQL. Contoh berikut menunjukkan cara mengonfigurasi port host untuk kontainer pgAdmin:
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...
Kode sebelumnya menambahkan dan mengonfigurasi port host untuk kontainer pgWeb. Port host sebaliknya ditetapkan secara acak.
Tambahkan sumber daya server PostgreSQL dengan volume data.
Untuk menambahkan volume data ke sumber daya server PostgreSQL, panggil metode WithDataVolume pada sumber daya server PostgreSQL:
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...
Volume data digunakan untuk mempertahankan data server PostgreSQL di luar siklus hidup kontainernya. Volume data dipasang di jalur /var/lib/postgresql/data
di kontainer server PostgreSQL dan ketika parameter name
tidak disediakan, nama dihasilkan secara acak. Untuk informasi lebih lanjut tentang volume data dan detail mengapa volume data lebih disukai dibandingkan dengan bind mounts , lihat dokumen Docker: Volume.
Menambahkan sumber daya server PostgreSQL dengan pemasangan ikatan data
Untuk menambahkan pemasangan ikatan data ke sumber daya server PostgreSQL, panggil metode WithDataBindMount:
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...
Penting
Pemasangan bind data memiliki fungsionalitas terbatas dibandingkan dengan volume, yang menawarkan performa, portabilitas, dan keamanan yang lebih baik, sehingga lebih cocok untuk lingkungan produksi. Namun, bind mount memungkinkan akses langsung dan modifikasi file pada sistem host, yang ideal untuk pengembangan dan pengujian ketika perubahan secara real-time diperlukan.
Pemasangan bind mount data mengandalkan sistem file dari komputer host untuk menjaga data server PostgreSQL tetap ada setiap kali kontainer dimulai ulang. Mount data bind dipasang di C:\PostgreSQL\Data
pada jalur Windows (atau /PostgreSQL/Data
di Unix) pada mesin host di kontainer server PostgreSQL. Untuk informasi selengkapnya tentang data bind mounts, lihat dokumen Docker: Bind mounts.
Tambahkan sumber daya server PostgreSQL dengan init untuk bind mount
Untuk menambahkan ikatan mount init ke sumber daya server PostgreSQL, panggil metode WithInitBindMount.
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...
Bind mount init bergantung pada sistem berkas mesin host untuk menginisialisasi database server dengan folder init dari kontainer PostgreSQL. Folder ini digunakan untuk inisialisasi, menjalankan skrip shell yang dapat dieksekusi atau file perintah .sql setelah direktori postgres-data dibuat. Pemasangan bind mount init dipasang di lokasi C:\PostgreSQL\Init
pada Windows (atau /PostgreSQL/Init
di Unix) pada komputer host dalam kontainer server PostgreSQL.
Menambahkan sumber daya server PostgreSQL dengan parameter
Saat Anda ingin secara eksplisit memberikan nama pengguna dan kata sandi yang digunakan oleh gambar kontainer, Anda dapat memberikan kredensial ini sebagai parameter. Pertimbangkan contoh alternatif berikut:
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...
Untuk informasi selengkapnya tentang menyediakan parameter, lihat Parameter eksternal.
Pengecekan kesehatan integrasi hosting
Integrasi hosting PostgreSQL secara otomatis menambahkan pemeriksaan kesehatan untuk sumber daya server PostgreSQL. Pemeriksaan kesehatan memverifikasi bahwa server PostgreSQL sedang berjalan dan bahwa koneksi dapat dibuat untuknya.
Integrasi hosting bergantung pada paket 📦 AspNetCore.HealthChecks.Npgsql NuGet.
Client integrasi
Untuk memulai integrasi klien .NET AspirePostgreSQL, instal paket 📦Aspire.Npgsql NuGet dalam proyek yang menggunakan klien, yaitu proyek untuk aplikasi yang menggunakan klien PostgreSQL. Integrasi klien
dotnet add package Aspire.Npgsql
Menambahkan klien Npgsql
Dalam file Program.cs proyek yang menggunakan klien Anda, panggil metode ekstensi AddNpgsqlDataSource pada IHostApplicationBuilder mana pun untuk mendaftarkan NpgsqlDataSource
agar dapat digunakan melalui kontainer injeksi dependensi. Metode ini mengambil parameter nama koneksi.
builder.AddNpgsqlDataSource(connectionName: "postgresdb");
Tips
Parameter connectionName
harus cocok dengan nama yang digunakan saat menambahkan sumber daya server PostgreSQL di proyek host aplikasi. Untuk informasi selengkapnya, lihat Menambahkan sumber daya server PostgreSQL.
Setelah menambahkan NpgsqlDataSource
ke builder, Anda bisa mendapatkan instans NpgsqlDataSource
dengan menggunakan injeksi dependensi. Misalnya, untuk mengambil objek sumber data Anda dari contoh layanan, tentukan sebagai parameter konstruktor dan pastikan kelas ExampleService
terdaftar dengan kontainer injeksi dependensi:
public class ExampleService(NpgsqlDataSource dataSource)
{
// Use dataSource...
}
Untuk informasi selengkapnya tentang injeksi dependensi, lihat .NET injeksi dependensi.
Menambahkan klien Npgsql yang berkunci
Mungkin ada situasi di mana Anda ingin mendaftarkan beberapa instans NpgsqlDataSource
dengan nama koneksi yang berbeda. Untuk mendaftarkan klien Npgsql yang berkunci, panggil metode AddKeyedNpgsqlDataSource.
builder.AddKeyedNpgsqlDataSource(name: "chat");
builder.AddKeyedNpgsqlDataSource(name: "queue");
Kemudian Anda dapat mengambil instans NpgsqlDataSource
menggunakan injeksi dependensi. Misalnya, untuk mengambil koneksi dari layanan contoh:
public class ExampleService(
[FromKeyedServices("chat")] NpgsqlDataSource chatDataSource,
[FromKeyedServices("queue")] NpgsqlDataSource queueDataSource)
{
// Use data sources...
}
Untuk informasi selengkapnya tentang layanan terikat, lihat .NET injeksi dependensi: Layanan terikat.
Konfigurasi
Integrasi .NET AspirePostgreSQL menyediakan beberapa pendekatan dan opsi konfigurasi untuk memenuhi persyaratan dan konvensi proyek Anda.
Menggunakan string koneksi
Saat menggunakan string koneksi dari bagian konfigurasi ConnectionStrings
, Anda dapat memberikan nama string koneksi saat memanggil metode AddNpgsqlDataSource:
builder.AddNpgsqlDataSource("postgresdb");
Kemudian string koneksi akan diambil dari bagian konfigurasi ConnectionStrings
:
{
"ConnectionStrings": {
"postgresdb": "Host=myserver;Database=postgresdb"
}
}
Untuk informasi selengkapnya, lihat ConnectionString.
Menggunakan penyedia konfigurasi
Integrasi .NET AspirePostgreSQL mendukung Microsoft.Extensions.Configuration. Ini memuat NpgsqlSettings dari appsettings.json atau file konfigurasi lainnya dengan menggunakan kunci Aspire:Npgsql
. Contoh appsettings.json yang mengonfigurasi beberapa opsi:
Contoh berikut menunjukkan file appsettings.json yang mengonfigurasi beberapa opsi yang tersedia:
{
"Aspire": {
"Npgsql": {
"ConnectionString": "Host=myserver;Database=postgresdb",
"DisableHealthChecks": false,
"DisableTracing": true,
"DisableMetrics": false
}
}
}
Untuk skema PostgreSQL integrasi klien JSON lengkap, lihat Aspire. Npgsql/ConfigurationSchema.json.
Menggunakan delegasi sebaris
Anda juga dapat meneruskan delegasi Action<NpgsqlSettings> configureSettings
untuk menyiapkan beberapa atau semua opsi secara langsung, misalnya untuk menonaktifkan cek kesehatan:
builder.AddNpgsqlDataSource(
"postgresdb",
static settings => settings.DisableHealthChecks = true);
Client pemeriksaan kesehatan integrasi
Secara default, integrasi klien .NET.NET Aspire memiliki pemeriksaan kesehatan yang diaktifkan untuk semua layanan. Demikian pula, banyak integrasi hosting .NET.NET Aspire juga mengaktifkan titik akhir pemeriksaan kesehatan. Untuk informasi selengkapnya, lihat:
- .NET pemeriksaan kesehatan aplikasi di C#
- Pemeriksaan kesehatan di
- Menambahkan
NpgSqlHealthCheck
, yang memverifikasi bahwa perintah dapat berhasil dijalankan terhadap database Postgres yang mendasar. - Terintegrasi dengan titik akhir HTTP
/health
, yang menentukan semua pemeriksaan kesehatan terdaftar harus lulus agar aplikasi dianggap siap menerima lalu lintas
Pengamatan dan telemetri
.NET
.NET Aspire integrasi secara otomatis menyiapkan konfigurasi Pengelogan, Pelacakan, dan Metrik, yang terkadang dikenal sebagai pilar pengamatan. Untuk informasi selengkapnya tentang pengamatan integrasi dan telemetri, lihat gambaran umum integrasi .NET.NET Aspire. Bergantung pada layanan pendukung, beberapa integrasi mungkin hanya mendukung beberapa fitur ini. Misalnya, beberapa integrasi mendukung pengelogan dan pelacakan, tetapi bukan metrik. Fitur telemetri juga dapat dinonaktifkan menggunakan teknik yang disajikan di bagian Konfigurasi
Pencatatan
Integrasi .NET AspirePostgreSQL menggunakan kategori log berikut:
Npgsql.Connection
Npgsql.Command
Npgsql.Transaction
Npgsql.Copy
Npgsql.Replication
Npgsql.Exception
Menelusuri
Integrasi .NET AspirePostgreSQL akan memancarkan aktivitas pelacakan berikut menggunakan OpenTelemetry:
Npgsql
Metrik
Integrasi .NET AspirePostgreSQL akan memancarkan metrik berikut menggunakan OpenTelemetry:
- 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
Lihat juga
.NET Aspire