RabbitMQ Nedir? Linux Server üzerine RabbitMQ kurulumu
Bu yazımda size RabbitMQ nedir ve Ubuntu Server a nasıl kurulur anlatmaya çalışacağım.RabbitMq Bir mesaj kuyruğu sistemidir. Amacı herhangi bir kaynaktan alınan bir mesajın, bir başka kaynağa sırası geldiği anda iletilmesidir.Genelde mesajlaşma sistemlerinde kullanılmaya başlansa da zaman içerisinde değişen ihtiyaçlardan dolayı kullanım alanları gittikçe genişledi.
Buna somut bir örnek vermemiz gerekirse; bir web sitesi üzerinden herhangi bir Word dosyasını PDF formatına dönüştürme hizmetini sağlayacaksanız. Buradaki işlem yoğunluğunu web uygulamasına yaptırmaktan kaçınılması gerekmektedir. Yapılması gereken RabbitMQ aracılığıyla oluşturulan bir kuyruğa tüm değerlerin sokulması ve süreçte ilgili kuyruğu dinleyen farklı bir uygulama aracılığıyla convert operasyonunun gerçekleştirilmesi gerekmektedir. Haliyle ana uygulamayı gereksiz bir Response Time’a maruz bırakmadan gerekli dönüşüm operasyonu başarıyla sonlandırılmış olacaktır.
Hatta zaman ayarlı message ve otomatik mailler de yine RabbitMq’ya güzel bir örnek olabilir. Sıraya alınan bu işlemlerin asenkron bir şekilde yapılması, hem çalışan uygulamanın boş yere bekletilmemesinden hem de sunucu üzerindeki işlem maliyetinin minimuma indirilmesinden dolayı RabbitMQ iyi bir tercih sebebi olabilir.
Kendi resmi sitesinde
- Robust messaging for applications: Uygulamalarınız için sağlam bir mesajlaşma altyapısı.
- Easy to use: Kullanımı kolay.
- Runs all major operating systems: Yaygın kullanılan işletim sistemlerinin hepsinde çalışır.
- Supports a huge number of developer platforms: Çok sayıda yazılım geliştirme platformunu destekler.
- Open source and commercially supported: Açık kaynak ve ticari lisanslı seçeneklerini destekler.
RabbitMQ İşleyişi
Şemada da görüldüğü üzere RabbitMQ temelinde Publisher ve Consumer olmak üzere iki aktör ve Exchange ve Queue component leri mevcuttur. Burada Publisher RabbitMQ mesaj kuyruğuna mesaj gönderen kişidir/uygulamadır. Publisher mesajı publish ettikten sonra ilgili mesajı Exchange karşılayacaktır. Exchange, kendisine belirtilen route ile ilgili mesajı kuyruğa yönlendirir. İlgili mesajın nasıl kuyruğa gideceği Exchange içerisindeki route dan öğrenilir. Ardından kuyruğa gelen mesajlar Queue de sıralanır. Queue ilk giren ilk çıkar mantığında(FIFO) çalışan bir mekanizmaya sahiptir. Kuyruktaki mesajları tüketen/alan kişi ise Consumer dır. Tüm bu süreçte RabbitMQ AMQP(Advanced Message Queuing Protocol) protokolünü kullanmakta ve ilgili protokol üzerinden faaliyetlerini gerçekleştirmektedir.
RabbitMQ nun az çok ne işe hizmet ettiğini anlatmaya çalıştım. Daha detaylı bilgi için kendi Web Sitesini ziyaret edebilirsiniz.
Şimdi Ubuntu bir server a RabbitMQ kuralım
Burda ben client bilgisayarıma multipass kurarak sanal linux makinaları oluşturacağım. Multipass ayrıntılı kurlum dökümanı için Tıklayınız
Terminalden aşağıdaki komutla 2 CPU lu 2GB ram li ve 10GB disk kapasiteli rabbitmq-server adından bir Ubuntu Sanal makina oluşturalım
multipass launch --name rabbitmq-server -c 2 -m 2G -d 10GBaşarılı bir kurulum ardından aşağıdaki gibi rabbitmq-server hazır. multipass bizim için istediğimiz konfigürasyonlarda Ubuntu 20.04 imagesinden bir Ubuntu server oluşturdu.
Aşağıdaki komutla rabbitmq-server sunucumuza bağlanıyoruz
multipass exec rabbitmq-server bashArtık sunucumuz hazır olduğuna göre RabbitMQ kurulumana başlayabiliriz.
RabbitMq kendi resmi sitesinden kurulum için 3 seçenek mevcut. Cloudsmith ile, PackageCloud ile yada manuel Dpkg kullanarak kurmak. Bunlardan üçüncü seçenek kendi resmi sitesinde de önerilmemekte. Daha detaylı bilgi için Tıklayınız. Resmi sitesindeki açıklama;
Modern RabbitMQ’yu Debian ve Ubuntu’ya kurmak için iki seçenek vardır:
Seçenek A: Cloudsmith’te uygun depoları kullanma (hızlı başlangıç komut dosyası)
Seçenek B: PackageCloud ve Launchpad’de uygun depoların bir kombinasyonunu kullanma (hızlı başlangıç komut dosyası)
Biz burada PackageCloud ile kurulumu anlatacağız.
Get selçuk meral’s stories in your inbox
Join Medium for free to get updates from this writer.
ilk olarak a HTTPS Aktarımı’nı etkinleştireceğiz ve Temel Bağımlılıkları yükleyeceğiz. RabbitMQ ve Erlang paketlerini PackageCloud, Cloudsmith.io veya Launchpad gibi hizmetlerden indirebilmesi için apt-transport-https paketinin kurulu olması gerekir.Aşağıdaki komutla bu işlemi gerçekleştiriyoruz
sudo apt-get install curl gnupg apt-transport-https -yDaha sonra aşağıdaki komutu çalıştırarak RabbitMQ’nun ana imzalama anahtarını ayarlıyoruz.
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/nullModern Erlang sürümleri sağlayan Launchpad PPA ayarlamalarını yapıyoruz
curl -1sLf "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xf77f1eda57ebb1cc" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg > /dev/nullPackageCloud RabbitMQ deposunu ayarlıyoruz
curl -1sLf "https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.packagecloud.rabbitmq.gpg > /dev/nullTeam RabbitMQ tarafından sağlanan uygun depoları ekleyin. Burada önemli bir nokta bulunmakta. Doğru paketi sağlayan uygun bir depo kurmak için işetim sistemimize göre dağıtım adını belirlemeliyiz.
- Ubuntu 20.04 için focal
- Ubuntu 18.04 için bionic
- Debian Buster için buster
olarak distribution adı belirlenir. Bizim sunucumuz Ubuntu 20.04 oldugundan focal olarak distribution i değiştiriyorum. sizde kurduğunuz sunucu işletim sitemine göre komut yerinde koyu renkli belirttiğim yere distribution adını yazabilirsiniz.
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
## "bionic" as distribution name should work for any reasonably recent Ubuntu or Debian release.
## See the release to distribution mapping table in RabbitMQ doc guides to learn more.
deb [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu bionic main
deb-src [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu bionic main
## Provides RabbitMQ
##
## Replace focal with the name of the Ubuntu release used.
## On Debian, "deb/ubuntu" should be replaced with "deb/debian"
deb [signed-by=/usr/share/keyrings/io.packagecloud.rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ focal main
deb-src [signed-by=/usr/share/keyrings/io.packagecloud.rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ focal main
EOFPaket dizinlerini güncelleyelim
sudo apt-get update -ySırada Erlang paketlerini yükleme işlemi var. Bunun için aşağıdaki komutu kullanıyoruz.
sudo apt-get install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerlRabbitmq-server ı ve bağımlılıklarını aşağıdaki komut ile kuruyoruz.
sudo apt-get install rabbitmq-server -y --fix-missingArtık RabbitMQ kurulumunu tamamladık. şimdi rabitmq-server i start yapıp statüsünü kontrol edebiliriz.
sudo systemctl start rabbitmq-server
sudo systemctl status rabbitmq-serverRabbitMQ logları için
sudo journalctl --system | grep rabbitmqŞimdi rabbitmq_management plugin i aktif hale getirerek RabitMQ arayüzüne ulaşıyoruz
rabbitmq-plugins enable rabbitmq_managementBrowser üzerinden http://<sunucu-ip>:15672/ adresine giderseniz sizi aşağıdaki gibi bir ekran karşılayacak.
Şimdi yetkili bir kullanıcı oluşturalım ben rabbitmq_admin adında bir kullanıcı oluşturup şifresini password belirliyorum. Daha sonra oluşturduğumuz bu kullanıcıya admin rolü ekliyoruz. Detaylı bilgi için Tıklayınız
sudo rabbitmqctl add_user rabbitmq_admin passwordsudo rabbitmqctl set_user_tags rabbitmq_admin administrator
Artık login olup RabbitMQ server arayüzüne bağlanabiliriz
Ve bingo artık RabbitMQ server hazır.
Bu yazımda size RabbitMQ nün ne iş yaptığını ve bir Ubuntu server üzerine nasıl kurulacağını dilim döndüğünce anlatmaya çalıştım. Bir sonraki yazımda RabbitMQ kullanarak demo bir proje hazırlayacağım. Bol kodlu günler :)










