Basitçe RabbitMQ Kullanımı
Proje yapımız bu şekilde olacak.
Öğrenirken rahatlık olması açısından önden proje yapısını bu şekilde oluşturabilirsiniz.
Go üzerinde RabbitMQ'yu kullanabilmek için gerekli olan paketimizi kuralım.
go get github.com/streadway/amqp
producer.go
isminde bir dosya oluşturalım. Bu dosyamız RabbitMQ'ya mesaj gönderen kodlarımızı barındıracak.
Yorum satırı olarak yaptığım açıklamalar dışında ek olarak inceleyelim.
amqp.Dial()
fonksiyonu içerisinde ayağa kaldırdığımız RabbitMQ servisine bağlanmak için gerekli olan bilgileri girdik.
Daha sonra RabbitMQ servisimizle iletişimde bulunmak için kanal oluşturduk.
Mesajımızı bir kuyruğa göndereceğimiz için kuyruk oluşturduk ve bu kuyruğa kuyruk1
ismini verdik. Aslında bu işlemlerde çok fazla detay var ama basit kullanımını göstermek için özetle anlatıyor olacağım.
Publish()
fonksiyonu içerisinde mesajımızı göndereceğimiz ayarlamaları yaptık.
amqp.Publishing{}
yapısında göndereceğimizi içeriğin tipini belirttik ve mesajımızı byte dizisine çevirerek gönderdik.
Bu şekilde kuyruk1
isimli kuyruğumuza "Hello World!"
yazısını gönderdik ve bu yazımız kuyrukta bekliyor.
Programımızı her çalıştırdığımızda kuyruğumuza mesajımız bir kez daha eklenecektir.
Eğer RabbitMQ panelinden görmek isterseniz, http://localhost:15672 adresinden girişi yaparak gözlemleyebilirsiniz.
Varsayılan olarak Username
ve Password
kısımlarına guest
yazarak panele giriş yapabilirsiniz.
Oluşturduğumuz kuyruğu incelemek için Queues
sekmesine bakabilirsiniz.
Ready sütununda işlenmeye hazır bekleyen 7 adet mesajımızın olduğunu görebilirsiniz. Çünkü producer
kodlarımızı 7 defa çalıştırdım. Böylelikle RabbitMQ'ya 7 defa mesaj göndermiş oldu. Tablomuz ne kadar süper anlık olmasa da elinden geldiğince anlık bilgileri vermeye çalışıyor 😄
Mesajlarımız kuyruk1
'de birikti. Şimdi bu mesajlarımızı sıra sıra alacak bir consumer
oluşturalım.
Önce consumer.go
isimli bir dosya oluşturalım.
Detaylıca incelersek;
consumer.go
içerisinde yeniden kuyruğumuz yani kuyruk1
'in tanımlamasını yaptık. Aslında kuyruğumuzu producer kodlarında zaten tanımlamıştık. Peki burada neden yeniden kuyruk tanımlaması yaptığımızı açıklayalım.
consumer.go
'da kuyruk tanımlaması yapmadan çalıştırırsak, Consume()
fonksiyonunda kuyruk ismini belirterek dinleme yapmamız mümkündür. Fakat RabbitMQ sunucusunu yeniden başlattığımızda kuyruk1
isimli kuyruğun silindiğini göreceksiniz. Kuyruk tanımlaması yapmazsak consumer.go
dosyamız çalıştırıldığında kuyruk1
isimli bir kuyruk olmadığı hatasını verecektir. Bunun için işimizi garantiye alıp kuyruğumuzu tanımlıyoruz. Yani producer oluşturmadıysa consumer'ın kuyruğu oluşturmasını sağlıyoruz.
Yukarıdaki consumer örneğimizde, gelen mesajı ekrana bastırmak yerine uzun sürecek bir işlem yapabilirdik ki, zaten RabbitMQ'nun en çok kullanılan alanlarından biri de uzun süren işlemlerdir.
Fakat örnekte direkt olarak bir sonuç görmek ve başka alanlara sapmamak için basit olarak nasıl çalıştığını gösterdim.
Last updated