Merhaba RabbitMQ

504

RabbitMQ mesaj alıp bu mesajı gönderen bir ara yazılımdır. RabbitMQ’nun sitesinde yazılım için, postahane metaforu kullanılmıştır. RabbitMQ posthane gibi, mesajı alıp bu mesajı iletmekten sorumludur. Temel rabbitMQ kavramları:

Producer: Mesaj gönderen her bir uygulama.
Producing: Mesaj gönderme eylemi
Consumer: Mesaj alan her bir uygulama
Consuming: Mesaj alma eylemi
Queue: Mesajların rabbitmq üzerinden, bir uygulamadan bir uygulamaya gönderilirken saklandığı kutudur.

Producer, queue ve consumer aynı makinada da olabilir farklı makinalarda da olabilir. RabbitMQ bir çok programlama dilleri için API’ler sunar. Biz örneklerimizi Java ile yapacağız.

Mac için Kurulum:

Bir kaç farklı yöntem mevcut. Ben homebrew ile kurulum yaptım. Kurulum için aşağıdaki komutu çalıştırmanız yeterli.

Kurulum sonrası, ‘/usr/local/sbin’ altından rabbitmq uygulamamızı başlatıp durdurabiliriz.

Başlatma

Durdurma

Kurulum esnasında, admin yetkisine sahip guest isimli bir kullanıcı eklenir. Tanımlı kullanıcıları görmek için:

komutunu çalıştırırız.

Kurulum sonrası ‘Merhaba RabbitMQ’ uygulamamızı geliştirelim.
İki uygulamaya ihtiyacımız var. Birincisi Producer uygulamamız olacak ve queue ya mesaj koyacak. İkinci uygulamamız ise, queue daki mesajı alacak olan Consumer uygulamamız olacak.

Uygulamaları Eclipse IDE üzerinde Java 8 ile Maven 3.3 kullanarak geliştireceğiz.

Producer

Uygulamamız rabbitmq ya bağlanıp queue’ya mesaj ekleyecek.

1* Eclipse üzerinde bir java projesi oluşturuyoruz.

2* Uygulamamıza sağ tıklayıp Configure -> Convert to Maven Project yapıyoruz. Böylece uygulamamız maven uyumlu hale geliyor.

3* pom.xml:

4* SenderStarter.java:

ConnectionFactory: rabbitmq’ya bağlanmak için, java api tarafından sunulan soket soyutlama katmanıdır. Kimlik doğrulama vb işlemleri bizim için yapar. Connection nesnesini ConnectionFactory üzerinden alırız.

Connection: Uygulamadan rabbitmq ya açılan TCP connection’dır.

Channel: tek bir TCP bağlantısını kullanalan sanal bağlantılar olarak adlandırılabilir. Bazı durumlarda rabbitmq’ya bir den fazla tcp bağlantısı ihtiyacımız olabilir. TCP bağlantısı açmak hem yeni kaynak tüketimine neden olur hem de yönetim zorlukları içerir. Bu sebeple Channel interface’i kullanılır. Her bir thread başına bir channel açılması önemlidir.

Channnel oluşturduktan sonra queue tanımı yapıyoruz. Queue ismi önemli burada. Consumer uygulamamızda, aynı isimli queue’ya bağlanacak. Bu tanımda, verilen isim ile daha önceden tanımlanmış bir queue var ise birşey yapılmaz, yok ise queue oluşturulur. Ardından ilk mesajımızı gönderiyoruz.

Consumer
1* Eclipse üzerinde bir java projesi oluşturuyoruz.

2* Uygulamamıza sağ tıklayıp Configure -> Convert to Maven Project yapıyoruz. Böylece uygulamamız maven uyumlu hale geliyor.

3* pom.xml:

4* ReceiverStarter.java:

Producer uygulamamızdan farklı olan kod satırı, Queue’dan mesajları almamızı sağlayacak olan Consumer arayüzüdür. DefaultConsumer implementasyon sınıfının handleDelivery metodunu override ettik. Böylece bir callback metot oluşturduk. Queue’ya mesaj geldiğinde, bu metot çağrılır ve mesaj receiver uygulamaya ulaşır.

Şuan uygulamalarımızı çalıştırmaya hazır hale geldik. Önce producer uygulamamızı çalıştıralım. Uygulama başarılı şekilde çalıştıktan sonra aşağıdaki komut ile, queue içerisindeki mesaj sayısını görelim.

Şimdi Receiver uygulamamızı çalıştıralım. Aşağıdaki çıktıyı almış olmalıyız.

Şimdilik bu kadar. İnşallah faydalı olmuştur.

İyi Çalışmalar

ÖrnekProje

 

Yorum yaz

Email adresiniz yayınlanmayacaktır.