Mesaj Üretme ve Tüketme
MassTransit ile mesaj gönderin ve işleyin.
Mesaj Üretme ve Tüketme, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
MassTransit Kaydetme
MassTransit'i DI içinde yapılandırın: kaydedin, bir taşıma altyapısına (burada RabbitMQ) yönlendirin ve tüketicilerinizi bulmasını sağlayın.
builder.Services.AddMassTransit(x =>
{
x.AddConsumers(typeof(Program).Assembly);
x.UsingRabbitMq((context, cfg) =>
{
cfg.Host("localhost");
cfg.ConfigureEndpoints(context);
});
});Tüketici Tanımlama
Bir tüketici, işlediği ileti türü için IConsumer<T> uygular. Mantığınız, bir ConsumeContext<T> alan Consume içinde yer alır.
public class OrderPlacedConsumer : IConsumer<OrderPlaced>
{
public async Task Consume(ConsumeContext<OrderPlaced> context)
{
OrderPlaced message = context.Message;
// handle the event
}
}Olay Yayınlama
IPublishEndpoint bağımlılığını ekleyin ve olayı tüm abonelere yayınlamak için Publish çağrısını yapın.
public class OrderService
{
private readonly IPublishEndpoint _publish;
public OrderService(IPublishEndpoint publish) => _publish = publish;
public Task PlaceOrderAsync(Guid id, string email) =>
_publish.Publish(new OrderPlaced(id, email));
}Komut Gönderme
Komutlar belirli bir uç noktaya gider. Hedef için bir ISendEndpoint çözümleyin ve Send çağrısını yapın.
var endpoint = await _sendProvider
.GetSendEndpoint(new Uri("queue:charge-payment"));
await endpoint.Send(new ChargePayment(orderId, amount));Publish ve Send Özeti
Publish olaylar içindir ve abone olmuş her tüketiciye ulaşır; Send komutlar içindir ve tek bir kuyruğu hedefler. Doğru seçimi yapmak, yönlendirme davranışınızı belirler.
ConsumeContext'in Gücü
ConsumeContext, iletinin kendisinden fazlasını sunar: ilişkilendirme kimlikleri, üstbilgiler ve bir tüketicinin içinden yayınlama veya yanıt verme olanağı sağlayarak ileti zincirlemeyi mümkün kılar.
public async Task Consume(ConsumeContext<OrderPlaced> context)
{
await context.Publish(new InvoiceRequested(context.Message.OrderId));
}İstek-Yanıt
MassTransit, iletişimin istek-yanıt biçimini de destekler. Bir istek istemcisi istek gönderir ve türü belirlenmiş bir yanıtı bekler. Bu yaklaşım, bir yanıta ihtiyaç duyduğunuzda ve yine de ileti aracısından ayrıştırılmış kalmak istediğinizde kullanışlıdır.
var response = await _client
.GetResponse<OrderStatus>(new GetOrder(orderId));
OrderStatus status = response.Message;Uç Nokta Adlandırma
ConfigureEndpoints, kuralları kullanarak her tüketici için bir alma uç noktasını (kuyruğu) otomatik olarak adlandırır. Gerektiğinde adları biçimlendiricilerle veya açık yapılandırmayla özelleştirebilirsiniz.
İleti Serileştirme
MassTransit, varsayılan olarak iletileri JSON biçiminde serileştirir ve üstverileri (ileti türü, kimlikler) içerir. Üreticiler ve tüketiciler, genellikle paylaşılan bir pakette bulunan ileti sözleşmesi türlerini paylaşır.
Eşzamanlılık
Bir tüketici birçok iletiyi paralel olarak işleyebilir. İş hacmi ile alt sistem kapasitesini dengelemek için PrefetchCount değerini ve eşzamanlılık sınırlarını ayarlayın.
cfg.ReceiveEndpoint("orders", e =>
{
e.PrefetchCount = 16;
e.ConcurrentMessageLimit = 8;
e.ConfigureConsumer<OrderPlacedConsumer>(context);
});Tüketicileri Sınama
MassTransit, gerçek bir ileti aracısı olmadan bir ileti yayınlayıp bir tüketicinin bunu işlediğini doğrulayabilmeniz için bellek içi bir sınama düzeneği sunar.
Hızlı Kontrol
Üretme ve tüketmeyi sınayın.
Özet
MassTransit'i AddMassTransit, bir taşıma katmanı ve ConfigureEndpoints ile kaydedin. Tüketiciler, Consume yöntemine sahip IConsumer<T> uygulamalarıdır. Olaylar için IPublishEndpoint.Publish (tüm aboneler), komutlar için ISendEndpoint.Send (tek kuyruk) kullanın. ConsumeContext zincirleme ve istek-yanıt olanağı sağlar; bir sınama düzeneği de tüketicileri bellek içinde doğrular.
Sıkça Sorulan Sorular
“Mesaj Üretme ve Tüketme” dersi ücretsiz mi?
Evet — “Mesaj Üretme ve Tüketme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“Mesaj Üretme ve Tüketme” dersinde ne öğreneceğim?
MassTransit ile mesaj gönderin ve işleyin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Mesaj Üretme ve Tüketme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Mesajlaşma Kavramları
- Mesaj Üretme ve Tüketme
- Saga'lar ve İş Akışları
- Hata İşleme ve Yeniden Denemeler