public Consumer(string queueName) { _rabbitMQService = new RabbitMQService(); using (var connection = _rabbitMQService.GetRabbitMQConnection()) { using (var channel = connection.CreateModel()) { // Asıl işlemlerimizi gerçekleştirecek oldıuğumuz “consumer” nesnemizdir. var consumer = new EventingBasicConsumer(channel); // Received event'i sürekli listen modunda olacaktır. // Queue’daki ilgili mesajları sırasıyla almaktadır ve “Body” property’sinde barındırmaktadır. consumer.Received += (model, ea) => { var body = ea.Body; var message = Encoding.UTF8.GetString(body); Console.WriteLine("{0} isimli queue üzerinden gelen mesaj: \"{1}\"", queueName, message); }; // basic bir şekilde verilmiş olan Queue ismine göre mesajları alma işlemini başlatıyoruz. // queue: Hangi Queue’nun mesajları alınacak ise. // noAck: True olarak set edildiği taktirde, consumer mesajı aldığı zaman otomatik olarak mesaj Queue’dan silinecektir. channel.BasicConsume(queueName, false, consumer); Console.ReadLine(); } } }
public Publisher(string queueName, string message) { _rabbitMQService = new RabbitMQService(); using (var connection = _rabbitMQService.GetRabbitMQConnection()) { // CreateModel methodunu çağırarak, RabbitMQ üzerinde yeni bir channel/session yaratmaktayız. // Bu Channel sayesinde bir Queue oluşturabilirken, mesaj gönderme işlemlerini de gerçekleştirebilmekteyiz. using (var channel = connection.CreateModel()) { // yeni bir queue tanımlıyoruz. // durable: Bu parametre ile in-memory olarak çalışan Queue disk üzerinden çalışmaya başlayacaktır. // Bu sayede RabbitMQ servisi dursa bile Queue kaybolmayacaktır. // Her güzelliğin getirdiği bir kötü tarafın olduğu gibi bununda beraberinde getireceği latency problemi bulunmaktadır haliyle. channel.QueueDeclare(queueName, false, false, false, null); // BasicPublish methodu ile kolay bir şekilde oluşturmuş olduğumuz ilgili Queue’ya mesaj gönderiyoruz // exchange: Bu parametreyi es geçiyoruz. Exchange genel olarak mesajı ilgili Routing Key’e göre ilgili Queue’ya yönlendiren bölümdür. // Direct Exchange, Fanout Exchange ve Topic Exchange gibi tipleri bulunmaktadır. Bunları bir sonraki makalemde detaylı olarak ele alacağım. // routingKey: Burada girmiş olduğumuz key’e göre ilgili Queue’ya yönlendirilecektir mesaj. // Queue’ya göndermek istediğimiz mesajı byte[] tipinde gönderiyoruz. channel.BasicPublish("", queueName, null, Encoding.UTF8.GetBytes(message)); Console.WriteLine("{0} queue'su üzerine, \"{1}\" mesajı yazıldı.", queueName, message); } } }