Skip to content

Instantly share code, notes, and snippets.

@hakanyalitekingist
Last active May 22, 2021 09:52
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