Merhaba arkadaşlar, bugün sizlerle beraber en populer açık kaynak message broker yapılarından olan rabbitmq ile basit bir örneği gerçekleştireceğiz. Fakat bu örneği yaparken bilgisayarımıza rabbitmq kurulumu yapmak yerine docker containerından faydalanacağız. Sadece rabbitmq değil kullanmak istediğiniz teknolojinin docker imajını bularak benzer şekilde kurulum yapmadan kullanabilirsiniz.
Öncelikle bilgisayarınızda docker kurulu değilse aşağıdaki linkten kurulumu gerçekleştirebilirsiniz.
Windows kullanıcıları eğer sorun yaşarsanız(ben yaşadım) buradaki linux kernel update ini kurmanız gerekir.
https://docs.microsoft.com/tr-tr/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package
https://docs.microsoft.com/tr-tr/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package
Örneğimizde docker üzerinden rabbitmq ayağa kaldıracağız. Daha sonra burayı besleyen bir producer .net5 apimiz olacak. Basit bir şekilde apiye parametre olarak gelen ismi kuyruğa gönderecek. Bir .net5 consumer konsol projemiz ise bu kuyruğa gelen isimleri ekrana yazdıracak.
Hadi başlayalım;
İlk olarak docker üzerinden rabbitmq containerımızı ayağa kaldıralım.
docker run -d --hostname docker-rabbitmq-example --name docker-rabbitmq-example -e RABBITMQ_DEFAULT_USER=enes -e RABBITMQ_DEFAULT_PASS=enes123 -p 5672:5672 -p 15672:15672 rabbitmq:3-management
Kontrol için;
Benim ayarlamalarıma göre aşağıdaki şekilde kontrol edebilirsiniz. Eğer ayarları değiştirdiyseniz yeni ayarları ilgili yerlere yazmanız gerekir (port-username vb.)
http://localhost:15672/
http://localhost:15672/
username: enes
password: enes123
Şimdi parametre olarak isim alıp bu ismi kuyruğa gönderecek olan servisimizi yazalım.
dotnet new webapi -o Net5RabbitMqProducerApi
Şimdi rabbitmq.client paketini bu projemizin içerisindeyken ekleyelim.
cd Net5RabbitMqProducerApi dotnet add package Rabbitmq.Client
Servisimizi yazalım ve startupa register edelim. Controllerda bu servisi inject ederek kullanalım.
public interface IRabbitMqService { void SendNameToQueue(string name); } public class RabbitMqService : IRabbitMqService { public void SendNameToQueue(string name) { var factory = new ConnectionFactory() { HostName = "localhost", UserName = "enes", Password = "enes123" };//Konfigurasyondan alınabilir using (IConnection connection = factory.CreateConnection()) using (IModel channel = connection.CreateModel()) { channel.QueueDeclare(queue: "NameQueue", durable: false, //Data saklama yöntemi (memory-fiziksel) exclusive: false, //Başka bağlantıların kuyruğa ulaşmasını istersek true kullanabiliriz. autoDelete: false, arguments: null);//Exchange parametre tanımları. var body = Encoding.UTF8.GetBytes(name); //Model alınarak json serialize uygulanabilir. channel.BasicPublish(exchange: "", routingKey: "NameQueue", body: body); } } }
services.AddTransient<IRabbitMqService,RabbitMqService>();
[ApiController] [Route("[controller]")] public class NameController : ControllerBase { private readonly IRabbitMqService _rabbitMqService; public NameController(IRabbitMqService rabbitMqService) { _rabbitMqService = rabbitMqService; } [HttpGet] public IActionResult Get(string name) { _rabbitMqService.SendNameToQueue(name); return Ok("Success"); } }
dotnet new console -o Net5RabbitMqConsumerConsole
Şimdi bu klasörün içerisine girerek yine Rabbitmq.Client nuget paketini ekleyelim.
cd Net5RabbitMqConsumerConsole dotnet add package Rabbitmq.Client
Kuyruğu dinleyip ekrana Welcome + isim yazalım.
static void Main(string[] args) { var factory = new ConnectionFactory() { HostName = "localhost", UserName = "enes", Password = "enes123" }; using (IConnection connection = factory.CreateConnection()) using (IModel channel = connection.CreateModel()) { var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Console.WriteLine($" Welcome {message}"); }; channel.BasicConsume(queue: "NameQueue", //Kuyruk adı autoAck: true, //Kuyruk adı doğrulanması consumer: consumer); Console.ReadLine(); } }

Bilgisayarımıza eksta bir kurulum yapmadan docker aracılığı ile basit bir rabbitmq örneği gerçekleştirdik. Umarım faydalı olmuştur.
Github Repo => https://github.com/EnesAys/DockerRabbitMqNet5
Kaynaklar
https://www.docker.com/
https://www.rabbitmq.com/
https://medium.com/devopsturkiye/d61f62513fc9
https://dotnetcorecentral.com/blog/rabbitmq-in-net-core/
https://www.rabbitmq.com/
https://medium.com/devopsturkiye/d61f62513fc9
https://dotnetcorecentral.com/blog/rabbitmq-in-net-core/