Last active
May 22, 2021 09:52
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
static void Main(string[] args) | |
{ | |
//Öncelikle RabbitMQ'ya bağlanıyoruz. | |
var factory = new ConnectionFactory(); | |
factory.Uri = new Uri("amqp://guest:guest@localhost:5672"); | |
//Bağlantı açıyoruz | |
using var connection = factory.CreateConnection(); | |
//Yukarıda oluşturduğumuz bağlantı üzerinden bir kanal oluşturuyoruz. | |
IModel channel = connection.CreateModel(); | |
/*Eğer Cunsumer'ı ayağa kaldırdığımızda aşağıdaki kuyruk gibi bir kuyruğumuz | |
yoksa hata alırız. Publisher'ın aynı isimde kuyruğu oluşturduğuna eminsek | |
yorum satırı yapabiliriz. Diğer bir önemli not: Parametreleri | |
değiştirmemeliyiz.Yani Publisher tarafında aynı isimde bir kuyruk varsa ve | |
burada da her ihtimale karşı hata alamamak adına aynı isimde kuyruk | |
oluşturuyorsak parametreleri aynı olmalı aksi halde yine hata alırız. */ | |
channel.QueueDeclare(queue: "logs", durable: true, exclusive: false, autoDelete: false); | |
/*Yukarıdaki kodlar zaten publisher kısmında yazdığımız kodlarla birebir aynı. | |
Standart bağlantı-kanal-kuyruk açma kodları. Şimdi consumer ile ilgili | |
kodlarımızı yazıyoruz.*/ | |
/*prefetchSize -> Mesaj boyutunun bizim için önemli olmadığını 0 vererek | |
ifade ediyoruz. | |
prefetchCount-> Dağıtım adetini ifade eder. | |
global-> false -> prefectCount kadar gönder örneğin 5'er 5'er | |
true -> prefectCount'ı paylaştır örneğin 6 mesajımız ve 2 | |
consumer'ımız olsun 3'er 3'er ver demek ya da örneğin 6 | |
consumer varsa 1-1 ver demek*/ | |
channel.BasicQos(prefetchSize:0, prefetchCount:1, global:false); | |
//İlgili kanal üzerinden mesajlarımızı tüketecek consumer'ı oluşturuyoruz. | |
var consumer = new EventingBasicConsumer(channel); | |
/*Kanal üzerinden consumer'ın hangi kuyruğu dinleyeceğini tanımlıyoruz. | |
autoAck -> Kuyruğun silinip silinmeme kararı, eğer true dersek -> Mesajın | |
doğru işlenip işlenmediğine bakılmaksızın sil demek Eğer false dersek -> | |
Sen silme ben haber vereceğim sileceğin zaman*/ | |
channel.BasicConsume(queue:"logs", autoAck:false, consumer:consumer); | |
consumer.Received += (object sender, BasicDeliverEventArgs e) => | |
{ | |
var message = Encoding.UTF8.GetString(e.Body.ToArray()); | |
Thread.Sleep(1500); | |
Console.WriteLine("Gelen Mesaj: " + message); | |
/*Mesajların doğru bir şekilde işlendiğini ve kuyruktan silineceğini | |
bildiriyoruz.multiple -> işlenmiş ama rabbitmq'dan silinmemiş | |
mesajları da silsin istersek true demeliyiz.Biz sadece kendi | |
mesajımızla ilgileneceğimiz için false diyoruz.*/ | |
channel.BasicAck(deliveryTag:e.DeliveryTag, multiple:false); | |
}; | |
Console.ReadKey(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment