Publikasikan pesan dengan AWS Message Processing Framework untuk.NET - AWS SDK for .NET

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Publikasikan pesan dengan AWS Message Processing Framework untuk.NET

Ini adalah dokumentasi prarilis untuk fitur dalam rilis pratinjau. Dokumentasi dapat berubah.

AWS Message Processing Framework untuk.NET mendukung penerbitan satu atau beberapa jenis pesan, memproses satu atau beberapa jenis pesan, atau melakukan keduanya dalam aplikasi yang sama.

Kode berikut menunjukkan konfigurasi untuk aplikasi yang menerbitkan jenis pesan yang berbeda ke AWS layanan yang berbeda.

var builder = WebApplication.CreateBuilder(args); // Register the AWS Message Processing Framework for .NET builder.Services.AddAWSMessageBus(builder => { // Register that you'll send messages of type ChatMessage to an existing queue builder.AddSQSPublisher<ChatMessage>("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd"); // Register that you'll publish messages of type OrderInfo to an existing SNS topic builder.AddSNSPublisher<OrderInfo>("arn:aws:sns:us-west-2:012345678910:MyAppProd"); // Register that you'll publish messages of type FoodItem to an existing EventBridge bus builder.AddEventBridgePublisher<FoodItem>("arn:aws:events:us-west-2:012345678910:event-bus/default"); });

Setelah Anda mendaftarkan kerangka kerja selama startup, suntikkan generik IMessagePublisher ke dalam kode Anda. Panggil PublishAsync metodenya untuk mempublikasikan salah satu jenis pesan yang dikonfigurasi di atas. Penerbit generik akan menentukan tujuan untuk mengarahkan pesan berdasarkan jenisnya.

Dalam contoh berikut, pengontrol ASP.NET MVC menerima ChatMessage pesan dan OrderInfo peristiwa dari pengguna, dan kemudian menerbitkannya ke Amazon SQS dan Amazon SNS masing-masing. Kedua jenis pesan dapat dipublikasikan menggunakan penerbit generik yang telah dikonfigurasi di atas.

[ApiController] [Route("[controller]")] public class PublisherController : ControllerBase { private readonly IMessagePublisher _messagePublisher; public PublisherController(IMessagePublisher messagePublisher) { _messagePublisher = messagePublisher; } [HttpPost("chatmessage", Name = "Chat Message")] public async Task<IActionResult> PublishChatMessage([FromBody] ChatMessage message) { // Perform business and validation logic on the ChatMessage here. if (message == null) { return BadRequest("A chat message was not submitted. Unable to forward to the message queue."); } if (string.IsNullOrEmpty(message.MessageDescription)) { return BadRequest("The MessageDescription cannot be null or empty."); } // Send the ChatMessage to SQS, using the generic publisher. await _messagePublisher.PublishAsync(message); return Ok(); } [HttpPost("order", Name = "Order")] public async Task<IActionResult> PublishOrder([FromBody] OrderInfo message) { if (message == null) { return BadRequest("An order was not submitted."); } // Publish the OrderInfo to SNS, using the generic publisher. await _messagePublisher.PublishAsync(message); return Ok(); } }

Untuk merutekan pesan ke logika penanganan yang sesuai, kerangka kerja menggunakan metadata yang disebut pengenal tipe pesan. Secara default, ini adalah nama lengkap dari jenis .NET pesan, termasuk nama rakitannya. Jika Anda mengirim dan menangani pesan, mekanisme ini berfungsi dengan baik jika Anda membagikan definisi objek pesan Anda di seluruh proyek. Namun, jika pesan didefinisikan ulang di ruang nama yang berbeda, atau jika Anda bertukar pesan dengan kerangka kerja atau bahasa pemrograman lain, Anda mungkin perlu mengganti pengenal jenis pesan.

var builder = Host.CreateDefaultBuilder(args); builder.ConfigureServices(services => { // Register the AWS Message Processing Framework for .NET services.AddAWSMessageBus(builder => { // Register that you'll publish messages of type GreetingMessage to an existing queue builder.AddSQSPublisher<GreetingMessage>("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd", "greetingMessage"); }); });

Penerbit khusus layanan

Contoh yang ditunjukkan di atas menggunakan generikIMessagePublisher, yang dapat mempublikasikan ke AWS layanan apa pun yang didukung berdasarkan jenis pesan yang dikonfigurasi. Kerangka kerja ini juga menyediakan penerbit khusus layanan untuk Amazon SQS, Amazon SNS, dan Amazon. EventBridge Penayang khusus ini mengekspos opsi yang hanya berlaku untuk layanan itu, dan dapat disuntikkan menggunakan jenisISQSPublisher,, ISNSPublisher dan. IEventBridgePublisher

Misalnya, saat mengirim pesan ke antrean SQS FIFO, Anda harus menyetel ID grup pesan yang sesuai. Kode berikut menunjukkan ChatMessage contoh lagi, tetapi sekarang menggunakan ISQSPublisher untuk mengatur opsi khusus SQS.

public class PublisherController : ControllerBase { private readonly ISQSPublisher _sqsPublisher; public PublisherController(ISQSPublisher sqsPublisher) { _sqsPublisher = sqsPublisher; } [HttpPost("chatmessage", Name = "Chat Message")] public async Task<IActionResult> PublishChatMessage([FromBody] ChatMessage message) { // Perform business and validation logic on the ChatMessage here if (message == null) { return BadRequest("A chat message was not submitted. Unable to forward to the message queue."); } if (string.IsNullOrEmpty(message.MessageDescription)) { return BadRequest("The MessageDescription cannot be null or empty."); } // Send the ChatMessage to SQS using the injected ISQSPublisher, with SQS-specific options await _sqsPublisher.SendAsync(message, new SQSOptions { DelaySeconds = <delay-in-seconds>, MessageAttributes = <message-attributes>, MessageDeduplicationId = <message-deduplication-id>, MessageGroupId = <message-group-id> }); return Ok(); } }

Hal yang sama dapat dilakukan untuk SNS dan EventBridge, menggunakan ISNSPublisher dan IEventBridgePublisher masing-masing.

await _snsPublisher.PublishAsync(message, new SNSOptions { Subject = <subject>, MessageAttributes = <message-attributes>, MessageDeduplicationId = <message-deduplication-id>, MessageGroupId = <message-group-id> });
await _eventBridgePublisher.PublishAsync(message, new EventBridgeOptions { DetailType = <detail-type>, Resources = <resources>, Source = <source>, Time = <time>, TraceHeader = <trace-header> });

Secara default, pesan dari jenis tertentu dikirim ke tujuan yang dikonfigurasi sebelumnya. Namun, Anda dapat mengganti tujuan untuk satu pesan menggunakan penayang khusus pesan. Anda juga dapat mengganti AWS SDK for .NET klien yang mendasari yang digunakan untuk mempublikasikan pesan, yang dapat berguna dalam aplikasi multi-penyewa di mana Anda perlu mengubah peran atau kredensialnya, tergantung pada tujuan.

await _sqsPublisher.SendAsync(message, new SQSOptions { OverrideClient = <override IAmazonSQS client>, QueueUrl = <override queue URL> });