Bagikan melalui


integrasi .NET AspireRabbitMQ

Meliputi: integrasi hosting dan integrasi Client

RabbitMQ adalah broker olahpesan dan streaming yang andal, yang mudah disebarkan di lingkungan cloud, lokal, dan di komputer lokal Anda. Integrasi .NET AspireRabbitMQ memungkinkan Anda terhubung ke instans RabbitMQ yang ada, atau membuat instans baru dari .NET dengan gambar kontainer docker.io/library/rabbitmq.

Integrasi hosting

Integrasi hosting RabbitMQ memodelkan server RabbitMQ sebagai jenis RabbitMQServerResource. Untuk mengakses jenis ini dan API-nya, tambahkan paket NuGet 📦Aspire.Hosting.RabbitMQ di proyek host aplikasi .

dotnet add package Aspire.Hosting.RabbitMQ

Untuk informasi selengkapnya, lihat dotnet menambahkan paket atau Mengelola dependensi paket di aplikasi .NET.

Menambahkan sumber daya server RabbitMQ

Di proyek host aplikasi Anda, panggil AddRabbitMQ pada instans builder untuk menambahkan sumber daya server RabbitMQ:

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(rabbitmq);

// 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/rabbitmq, gambar tersebut membuat instans server RabbitMQ baru di komputer lokal Anda. Referensi ke server RabbitMQ Anda (variabel rabbitmq) ditambahkan ke ExampleProject. Sumber daya server RabbitMQ mencakup kredensial default dengan username"guest" 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 RabbitMQ yang sudah ada, panggil AddConnectionString sebagai gantinya. Untuk informasi selengkapnya, lihat Referensi sumber daya yang ada .

Menambahkan sumber daya server RabbitMQ dengan plugin manajemen

Untuk menambahkan plugin manajemen RabbitMQ ke sumber daya server RabbitMQ, panggil metode WithManagementPlugin:

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging")
                      .WithManagementPlugin();

builder.AddProject<Projects.ExampleProject>()
        .WithReference(rabbitmq);

// After adding all resources, run the app...

Plugin manajemen RabbitMQ menyediakan API berbasis HTTP untuk manajemen dan pemantauan server RabbitMQ Anda. .NET .NET Aspire menambahkan gambar kontainer lain docker.io/library/rabbitmq-management ke host aplikasi yang menjalankan plugin manajemen.

Tambahkan sumber daya server RabbitMQ dengan volume data

Untuk menambahkan volume data ke sumber daya server RabbitMQ, panggil metode WithDataVolume pada sumber daya server RabbitMQ:

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging")
                      .WithDataVolume(isReadOnly: false);

builder.AddProject<Projects.ExampleProject>()
        .WithReference(rabbitmq);

// After adding all resources, run the app...

Volume data digunakan untuk mempertahankan data server RabbitMQ di luar siklus hidup kontainernya. Volume data dipasang di jalur /var/lib/rabbitmq di kontainer server RabbitMQ dan ketika parameter name tidak disediakan, nama dihasilkan secara acak. Untuk informasi lebih lanjut tentang volume data dan alasan mengapa mereka lebih disukai daripada mount bind, lihat dokumen Docker: Volumes.

Menambahkan sumber daya server RabbitMQ dengan pemasangan ikatan data

Untuk menambahkan pemasangan ikatan data ke sumber daya server RabbitMQ, panggil metode WithDataBindMount:

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging")
                      .WithDataBindMount(
                          source: @"C:\RabbitMQ\Data",
                          isReadOnly: false);

builder.AddProject<Projects.ExampleProject>()
        .WithReference(rabbitmq);

// After adding all resources, run the app...

Penting

Pemasangan ikat data memiliki fungsionalitas terbatas dibandingkan dengan volume , yang menawarkan performa, portabilitas, dan keamanan yang lebih baik, membuatnya lebih cocok untuk lingkungan produksi. Namun, bind mounts memungkinkan akses langsung dan modifikasi file pada sistem host, ideal untuk pengembangan dan pengujian ketika perubahan waktu nyata diperlukan.

Pemasangan bind data mengandalkan sistem file komputer host untuk mempertahankan data server RabbitMQ selama mulai ulang kontainer. Pemasangan ikatan data dipasang di C:\RabbitMQ\Data pada jalur Windows (atau /RabbitMQ/Data di Unix) pada komputer host di kontainer server RabbitMQ. Untuk informasi selengkapnya tentang pemasangan ikatan data, lihat dokumen Docker: Pemasangan ikatan.

Menambahkan sumber daya server RabbitMQ 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 rabbitmq = builder.AddRabbitMQ("messaging", username, password);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(rabbitmq);

// After adding all resources, run the app...

Untuk informasi selengkapnya tentang menyediakan parameter, lihat Parameter eksternal.

Memfasilitasi pemeriksaan kesehatan integrasi

Integrasi hosting RabbitMQ secara otomatis menambahkan pemeriksaan kesehatan untuk sumber daya server RabbitMQ. Pemeriksaan kesehatan memverifikasi bahwa server RabbitMQ sedang berjalan dan bahwa koneksi dapat dibuat untuknya.

Integrasi hosting bergantung pada paket 📦 AspNetCore.HealthChecks.Rabbitmq NuGet.

Client integrasi

Untuk memulai integrasi klien .NET AspireRabbitMQ, instal paket NuGet 📦Aspire.RabbitMQ.Client di proyek yang menggunakan klien, yaitu proyek untuk aplikasi yang menggunakan klien RabbitMQ. Integrasi klien RabbitMQ mendaftarkan instans IConnection yang dapat Anda gunakan untuk berinteraksi dengan RabbitMQ.

dotnet add package Aspire.RabbitMQ.Client

Penting

Paket NuGet Aspire.RabbitMQ.Client tergantung pada paket NuGet RabbitMQ.Client. Dengan rilis RabbitMQ.Clientversi 7.0.0 , perubahan pemecahan biner diperkenalkan. Untuk mengatasi hal ini, paket integrasi klien baru, Aspire.RabbitMQ.Client.v7, dibuat. Paket Aspire.RabbitMQ.Client asli terus mereferensikan RabbitMQ.Client versi 6.8.1, memastikan kompatibilitas dengan versi integrasi klien RabbitMQ sebelumnya. Paket Aspire.RabbitMQ.Client.v7 baru mereferensikan RabbitMQ.Client versi 7.0.0. Dalam versi .NET.NET Aspiremendatang, Aspire.RabbitMQ.Client akan diperbarui ke 7.x versi dan paket Aspire.RabbitMQ.Client.v7 tidak akan digunakan lagi. Untuk informasi selengkapnya, lihat Migrasi ke RabbitMQ.NETClient 7.x.

Menambahkan klien RabbitMQ

Dalam file Program.cs dari proyek yang menggunakan klien Anda, panggil metode ekstensi AddRabbitMQClient pada IHostApplicationBuilder apa pun untuk mendaftarkan IConnection agar dapat digunakan melalui wadah injeksi dependensi. Metode ini mengambil parameter nama koneksi.

builder.AddRabbitMQClient(connectionName: "messaging");

Tips

Parameter connectionName harus cocok dengan nama yang digunakan saat menambahkan sumber daya server RabbitMQ di proyek host aplikasi. Untuk informasi selengkapnya, lihat Menambahkan sumber daya server RabbitMQ.

Anda kemudian dapat mengakses instans IConnection menggunakan injeksi dependensi. Misalnya, untuk mengambil koneksi dari layanan contoh:

public class ExampleService(IConnection connection)
{
    // Use connection...
}

Untuk informasi selengkapnya tentang injeksi dependensi, lihat .NET injeksi dependensi.

Tambahkan klien RabbitMQ yang terkode.

Mungkin ada situasi di mana Anda ingin mendaftarkan beberapa instans IConnection dengan nama koneksi yang berbeda. Untuk mendaftarkan klien yang dikunci RabbitMQ, panggil metode AddKeyedRabbitMQClient.

builder.AddKeyedRabbitMQClient(name: "chat");
builder.AddKeyedRabbitMQClient(name: "queue");

Kemudian Anda dapat mengambil instance IConnection menggunakan penyuntikan dependensi. Misalnya, untuk mengambil koneksi dari layanan contoh:

public class ExampleService(
    [FromKeyedServices("chat")] IConnection chatConnection,
    [FromKeyedServices("queue")] IConnection queueConnection)
{
    // Use connections...
}

Untuk informasi selengkapnya tentang layanan bertanda kunci, lihat di .NET injeksi ketergantungan: Layanan bertanda kunci.

Konfigurasi

Integrasi .NET AspireRabbitMQ menyediakan beberapa opsi untuk mengonfigurasi koneksi berdasarkan 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 AddRabbitMQClient:

builder.AddRabbitMQClient(connectionName: "messaging");

Kemudian string koneksi diambil dari bagian konfigurasi ConnectionStrings:

{
  "ConnectionStrings": {
    "messaging": "amqp://username:password@localhost:5672"
  }
}

Untuk informasi selengkapnya tentang cara memformat string koneksi ini, lihat dokumen spesifikasi URI RabbitMQ.

Menggunakan penyedia konfigurasi

Integrasi .NET AspireRabbitMQ mendukung Microsoft.Extensions.Configuration. Ini memuat RabbitMQClientSettings dari konfigurasi dengan menggunakan kunci Aspire:RabbitMQ:Client. Cuplikan berikut adalah contoh file appsettings.json yang mengonfigurasi beberapa opsi:

{
  "Aspire": {
    "RabbitMQ": {
      "Client": {
        "ConnectionString": "amqp://username:password@localhost:5672",
        "DisableHealthChecks": true,
        "DisableTracing": true,
        "MaxConnectRetryCount": 2
      }
    }
  }
}

Untuk skema RabbitMQ integrasi klien JSON lengkap, lihat Aspire.RabbitMQ.Client/ConfigurationSchema.json.

Menggunakan delegasi sebaris

Anda juga dapat mengoper deleget Action<RabbitMQClientSettings> configureSettings untuk mengonfigurasi beberapa atau semua opsi secara langsung, misalnya untuk mematikan pemeriksaan kesehatan dari dalam kode.

builder.AddRabbitMQClient(
    "messaging",
    static settings => settings.DisableHealthChecks = true);

Anda juga dapat menyiapkan IConnectionFactory menggunakan parameter delegasi Action<IConnectionFactory> configureConnectionFactory dari metode AddRabbitMQClient. Misalnya untuk mengatur nama yang disediakan klien untuk koneksi:

builder.AddRabbitMQClient(
    "messaging",
    configureConnectionFactory:
        static factory => factory.ClientProvidedName = "MyApp");

Client pemeriksaan kesehatan integrasi

Secara default, integrasi .NET.NET Aspire memungkinkan pemeriksaan kesehatan untuk semua layanan. Untuk informasi selengkapnya, lihat gambaran umum integrasi .NET.NET Aspire.

Integrasi .NET AspireRabbitMQ:

  • Menambahkan pengecekan kesehatan ketika RabbitMQClientSettings.DisableHealthChecks berada di false, yang berupaya menghubungkan dan membuat saluran di server RabbitMQ.
  • Terintegrasi dengan titik akhir HTTP /health, yang menentukan bahwa semua cek kesehatan yang terdaftar harus berhasil 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 AspireRabbitMQ menggunakan kategori log berikut:

  • RabbitMQ.Client

Menelusuri

Integrasi .NET AspireRabbitMQ memancarkan aktivitas pelacakan berikut menggunakan OpenTelemetry:

  • Aspire.RabbitMQ.Client

Metrik

Integrasi .NET AspireRabbitMQ saat ini tidak mendukung metrik secara default.

Lihat juga