[{"data":1,"prerenderedAt":414},["ShallowReactive",2],{"post-\u002Ftr\u002Frabbitmq-nedir":3},{"page":4,"translation":245,"nav":263,"related":392,"random":403},{"id":5,"title":6,"body":7,"categories":243,"category":245,"date":246,"description":247,"draft":248,"extension":249,"image":250,"kind":245,"lang":138,"meta":251,"navigation":252,"path":253,"readingTime":254,"seo":255,"slug":256,"stem":257,"tags":258,"translationKey":245,"type":244,"updated":261,"__hash__":262},"postsTr\u002Ftr\u002Frabbitmq-nedir.md","RabbitMQ Nedir?",{"type":8,"value":9,"toc":234},"minimark",[10,43,46,49,52,57,60,62,66,69,72,77,80,83,86,94,98,105,108,115,118,122,125,127,131,207,209,213,216,219,221,226],[11,12,13,21],"blockquote",{},[14,15,16,17],"p",{},"💡 ",[18,19,20],"strong",{},"Özet (TL;DR):",[22,23,24,31,37],"ul",{},[25,26,27,30],"li",{},[18,28,29],{},"Nedir:"," Sistemler ve servisler arasında asenkron (eşzamanlı olmayan) veri alışverişini sağlayan, AMQP protokolü tabanlı açık kaynaklı bir mesaj kuyruğu (Message Broker) yazılımıdır.",[25,32,33,36],{},[18,34,35],{},"Çözdüğü Temel Sorun:"," Kullanıcı arayüzünde yapılması zaman alan (e-posta gönderimi, video işleme, veri analizleri vb.) işleri arka plana aktararak uygulamanın yanıt süresini (response time) düşürür ve sistem kaynaklarını optimize eder.",[25,38,39,42],{},[18,40,41],{},"Çalışma Mantığı:"," Producer (mesajı gönderen) mesajı bir Exchange'e iletir, Exchange bu mesajı kurallara (routing keys) göre Queue'lara (kuyruklar) dağıtır, Consumer (mesajı işleyen worker) ise kuyruktan mesajı alıp işler.",[14,44,45],{},"RabbitMQ, mesaj dağıtıcısı veya sıra yöneticisi olarak da bilinen bir mesaj kuyruğu (Message Queue) yazılımıdır. Basitçe söylersek, RabbitMQ ile kuyruklar tanımlar, bu kuyruklara mesaj gönderir ve istediğinizde de \"RabbitMQ, şu kuyruğumda yeni mesaj var mı söyle bakalım?\" dersiniz.",[14,47,48],{},"Bir başka deyişle, RabbitMQ yazılımlarınızın haberleşmesi için ortak bir platform ve mesajlarınız işlenene kadar bekleyecekleri posta kutuları sağlar.",[50,51],"hr",{},[53,54,56],"h3",{"id":55},"yazılımlar-arası-mesaj-ne-demek","Yazılımlar Arası Mesaj Ne Demek?",[14,58,59],{},"Mesaj; bir alıcıdan bir vericiye gönderilmesi gereken herhangi bir bilgi olabilir. Çalıştırılması gereken herhangi bir işle ilgili bilgi ve parametreler, gönderilecek bir e-postayla ilgili detaylar veya ihtiyacınıza göre basit bir metin mesajı olabilir. Örneklendirirsek daha anlaşılır olacaktır.",[50,61],{},[53,63,65],{"id":64},"rabbitmq-kullanım-senaryoları","RabbitMQ Kullanım Senaryoları",[14,67,68],{},"RabbitMQ veya genel adıyla mesaj kuyrukları, genellikle tamamlanması vakit alan işlemleri kullanıcıyı bekletmeden arka planda yürütmek için kullanılır. Böylece farklı işlemler için farklı altyapılar, programlama dilleri ve sunucular kullanmak da mümkün olur. Büyük sistemlerde kapasiteyi daha etkin kullanmayı ve yatayda kolayca genişletmeyi (scaling) sağlar.",[14,70,71],{},"Eğer mesaj kuyruğu kavramını ilk defa duyuyorsanız, ne olduğunu anlamanın en kolay yolu örnekler üzerinden gitmektir. Bunun için aşağıda bazı senaryolar üzerinden açıklamaya çalışacağım.",[73,74,76],"h4",{"id":75},"senaryo-1-e-posta-gönderimi","Senaryo 1: E-posta Gönderimi",[14,78,79],{},"Kullanıcının yaptığı işleme göre, kullanıcının kendisine veya sistemdeki diğer kişilere e-posta göndereceğimizi düşünelim. E-posta gönderimini gerçek zamanlı (senkron) olarak yaparsak kullanıcının işlem tamamlanana kadar beklemesi gerekecektir. Basit bir kullanıcı kaydı işleminden sonra, sunucu tarafında e-postayı gönderip tarayıcıya yanıt iletene kadar kullanıcıyı 3-4 saniye bekletmeniz gerekir. Peki ya kullanıcının yaptığı tek bir işlem için onu takip eden 1000 kişiye ayrı ayrı e-posta göndermeniz gerekiyorsa? Kullanıcıyı dakikalarca bekletecek misiniz?",[14,81,82],{},"Bu sorunu aşmak için gönderilmesi gereken e-postaları bir veritabanına yazar, arka planda düzenli çalışan bir script (cron job vb.) ile veritabanını sorgular, gönderdikçe ilgili satırları veritabanından silersiniz. (Kendim böyle bir mantık kurup PHP ve MySQL ile kodladığımda hem çok zevk almış hem de kendimle gurur duymuştum.)",[14,84,85],{},"Ancak bu tür bir veritabanı tabanlı kuyruk yapısı, veritabanınızı gereksiz yere yoracak, ölçekleme sorunları yaratacak ve tam olarak gerçek zamanlı (instant) çalışmayacaktır.",[14,87,88,89,93],{},"Bunun yerine RabbitMQ ile \"eposta\" kuyruğuna gerekli parametreleri mesaj olarak göndermeniz yeterlidir. E-posta gönderen asıl arka plan scriptinize (worker) ise ",[90,91,92],"em",{},"\"RabbitMQ'ya bağlan, eposta kuyruğuna yeni mesaj geldiğinde bunu al ve e-postayı gönder\""," dersiniz. RabbitMQ bu süreci yüksek performansla yönetir; ayrıca hata yönetimi, mesajların kaybolmaması (durability) ve yeniden deneme (retry) mekanizmaları gibi birçok hazır çözüm sunar.",[73,95,97],{"id":96},"senaryo-2-video-dosyası-i̇şleme-dönüştürme-ve-ölçekleme","Senaryo 2: Video Dosyası İşleme (Dönüştürme ve Ölçekleme)",[14,99,100,101,104],{},"YouTube veya Facebook'a bir video yüklediğimizde ",[90,102,103],{},"\"Videonuz işleniyor, tamamlandığında bilgilendirileceksiniz\""," mesajıyla karşılaşırız.",[14,106,107],{},"Yüklenen videonun farklı format ve çözünürlüklere (1080p, 720p, 480p vb.) çevrilmesi çok fazla CPU\u002FGPU gücü gerektiren ve zaman alan bir işlemdir. Bu işlem, dosyayı yüklediğimiz web sunucusu tarafından değil, genellikle video işlemeye özel donanımlara sahip arka plan sunucuları tarafından yürütülür.",[14,109,110,111,114],{},"Biz videoyu gönderdikten sonra, web uygulamamız ",[90,112,113],{},"\"Şu kullanıcının yüklediği şu video dosyasını işle\""," mesajını kuyruğa yazar. Video dönüştürme işini yapan arka plan işlemi (proses\u002Fworker) bu mesajı kuyruktan çekerek dönüştürme işlemini sırayla başlatır. Bu yapı, hem web sunucusunun yükünü hafifletir hem de aynı anda gelen yüzlerce yükleme isteğinin sistemi çökertmeden sırayla işlenmesini sağlar.",[14,116,117],{},"Eğer işleri hızlandırmak istersek, bu kuyruğu dinleyen worker (arka plan işlemi) sayısını artırmamız yeterlidir. RabbitMQ gelen mesajları bu worker'lara yük durumuna göre dengeli şekilde (round-robin vb.) dağıtır. Eğer bir worker hata verir ve çökerse, RabbitMQ mesajın işlendiğine dair onay (acknowledgement) alamadığı için o mesajı otomatik olarak tekrar kuyruğa alır ve başka bir worker'a yönlendirir.",[73,119,121],{"id":120},"senaryo-3-mobil-bildirim-gönderme-push-notifications","Senaryo 3: Mobil Bildirim Gönderme (Push Notifications)",[14,123,124],{},"Video işleme tamamlandığında kullanıcının ekranına bildirim gider ve takipçilerine haber verilir. Video dönüştürme gibi ağır bir iş için özel olarak yapılandırılmış ekran kartlı sunucumuzu mobil bildirim göndermek için neden meşgul edelim? İlgili bildirim kuyruğuna bir mesaj bırakalım ve sadece bildirim göndermekle görevli mikroservisimiz işi oradan devralıp tamamlasın.",[50,126],{},[53,128,130],{"id":129},"rabbitmq-temel-bileşenleri","RabbitMQ Temel Bileşenleri",[132,133,134,151],"table",{},[135,136,137],"thead",{},[138,139,140,145,148],"tr",{},[141,142,144],"th",{"align":143},"left","Bileşen",[141,146,147],{"align":143},"Tanımı",[141,149,150],{"align":143},"Görevi",[152,153,154,168,181,194],"tbody",{},[138,155,156,162,165],{},[157,158,159],"td",{"align":143},[18,160,161],{},"Producer (Üretici)",[157,163,164],{"align":143},"Mesajı yaratan ve RabbitMQ'ya gönderen uygulama\u002Fservis.",[157,166,167],{"align":143},"İş emrini kuyruğa iletmek üzere tetikler.",[138,169,170,175,178],{},[157,171,172],{"align":143},[18,173,174],{},"Exchange (Yönlendirici)",[157,176,177],{"align":143},"Mesajları kurallara göre ilgili kuyruklara dağıtan mekanizma.",[157,179,180],{"align":143},"Gelen mesajın nereye gideceğine karar verir (Direct, Fanout, Topic, Headers).",[138,182,183,188,191],{},[157,184,185],{"align":143},[18,186,187],{},"Queue (Kuyruk)",[157,189,190],{"align":143},"Mesajların işlenene kadar depolandığı bellek\u002Fdisk alanı.",[157,192,193],{"align":143},"Mesajları sırayla saklar (FIFO - First In, First Out).",[138,195,196,201,204],{},[157,197,198],{"align":143},[18,199,200],{},"Consumer (Tüketici)",[157,202,203],{"align":143},"Kuyruğu dinleyen ve mesajları alıp işleyen arka plan işçisi (Worker).",[157,205,206],{"align":143},"Ağır işi (mail gönderimi, video işleme vb.) asıl gerçekleştiren kısımdır.",[50,208],{},[53,210,212],{"id":211},"rabbitmqyu-hangi-programlama-dilleri-ile-kullanabilirim","RabbitMQ'yu Hangi Programlama Dilleri ile Kullanabilirim?",[14,214,215],{},"RabbitMQ; .NET, PHP, Python, Ruby, Java, Node.js ve Go başta olmak üzere hemen hemen tüm popüler programlama dilleriyle kullanılabilir. Bu durum, büyük projelerde çok dilli (polyglot) mimarilerin kurulmasını kolaylaştırır. Örneğin, PHP ile web sayfalarınızı hızlıca sunarken, arka planda makine öğrenmesi veya veri analizi gerektiren ağır işleri Python'a yaptırabilir ve iki sistem arasındaki haberleşmeyi RabbitMQ ile güvenle sağlayabilirsiniz.",[14,217,218],{},"Kodlama veya kuruluma girmeden RabbitMQ'nun mantığını kısaca anlatmaya çalıştım. Docker üzerinde RabbitMQ kurulumunu, PHP ve Python entegrasyonu kod örnekleriyle paylaşacağım ayrı bir rehber de planlıyorum.",[50,220],{},[222,223,225],"h5",{"id":224},"bu-yazıda-yapılan-değişiklikler","Bu Yazıda Yapılan Değişiklikler",[22,227,228,231],{},[25,229,230],{},"11.05.2022: Yazı özeti düzenlendi.",[25,232,233],{},"21.06.2026: Yazım ve imla kuralları güncellendi, RabbitMQ terimleri standartlaştırıldı, mimari bileşenler tablosu ve TL;DR özet bölümü eklendi.",{"title":235,"searchDepth":236,"depth":236,"links":237},"",2,[238,240,241,242],{"id":55,"depth":239,"text":56},3,{"id":64,"depth":239,"text":65},{"id":129,"depth":239,"text":130},{"id":211,"depth":239,"text":212},[244],"technical",null,"2021-01-07","RabbitMQ nedir, ne işe yarar? E-posta gönderimi, video işleme gibi uzun süren arka plan işlemlerinde mesaj kuyruklarının (Message Queue) kullanımı.",false,"md","\u002Fimages\u002Fhero\u002Fmessage-queue.avif",{},true,"\u002Ftr\u002Frabbitmq-nedir",5,{"title":6,"description":247},"rabbitmq-nedir","tr\u002Frabbitmq-nedir",[259,260],"devops","rabbitmq","2022-05-11","unYmplK2JKwEagYRwlKqOCn332pQQWocxvDGU9s8dyw",{"prev":264,"next":267,"others":270,"lucky":389,"readingTime":254},{"path":265,"title":266},"\u002Ftr\u002Fjwt-guvenli-mi-guvenlik-acigi-olusturmayin","JWT Güvenli Derken Güvenlik Açığı Oluşturmayın",{"path":268,"title":269},"\u002Ftr\u002Fdocker-nedir","Docker Nedir?",[271,274,277,280,283,286,289,292,295,298,301,304,307,310,313,316,319,322,325,328,331,334,337,340,343,346,349,352,355,358,361,362,365,368,371,374,377,380,383,386],{"path":272,"title":273},"\u002Ftr\u002Fes8-nedir-ecmascript-2017-nedir","ES8 Nedir? ECMAScript 2017 Nedir?",{"path":275,"title":276},"\u002Ftr\u002Fes15-nedir-ecmascript-2024-nedir","ES15 nedir? ECMAScript 2024 nedir?",{"path":278,"title":279},"\u002Ftr\u002Fgo-programlama-dilinin-ozellikleri","Go Programlama Dilinin Özellikleri",{"path":281,"title":282},"\u002Ftr\u002Flitespeed-web-server-performans-artisi","Konfor Alanından Çıkıp, Konforlu Bir VPS'e Geçmek: LiteSpeed Web Server",{"path":284,"title":285},"\u002Ftr\u002Fgo-slice-veri-tipi","Go Veri Tipleri: Slice",{"path":287,"title":288},"\u002Ftr\u002Fubuntu-20-04-composer-kurulumu","Ubuntu 20.04 - Composer Kurulumu",{"path":290,"title":291},"\u002Ftr\u002Fgo-ile-websockets-websocket-upgrader-nedir","Go ile WebSockets: Upgrader Nedir?",{"path":293,"title":294},"\u002Ftr\u002Fprototype-tasarim-deseni-nedir","Prototype Tasarım Deseni Nedir?",{"path":296,"title":297},"\u002Ftr\u002Fubuntu-24-04-uzerinde-cyberpanel-kurulumu","Ubuntu 24.04 LTS ve 22.04 LTS Üzerinde CyberPanel Kurulumu",{"path":299,"title":300},"\u002Ftr\u002Fwebpack-nedir","Webpack Nedir? Modern JavaScript Paketleyici Ekosistemi",{"path":302,"title":303},"\u002Ftr\u002Fphp-generator-ve-iterator-farki","PHP'de Generator ve Iterator Arasındaki Temel Farklar",{"path":305,"title":306},"\u002Ftr\u002Froot-yetkisi-olmayan-kullanici-ssh-baglantisini-ssh-baglantisini-ssh-anahtari-ile-nasil-kurabilir","Root yetkisi olmayan kullanıcı, SSH bağlantısını, SSH anahtarı ile nasıl kurabilir?",{"path":308,"title":309},"\u002Ftr\u002Frestapi-ve-hateoas-kavrami","RestApi ve HATEOAS Kavramı",{"path":311,"title":312},"\u002Ftr\u002Frest-api-dokumantasyonu-nasil-yapilir","REST Api Dokümantasyonu Nasıl Oluşturulur?",{"path":314,"title":315},"\u002Ftr\u002Fproxy-tasarim-deseni-nedir","Proxy Tasarım Deseni Nedir?",{"path":317,"title":318},"\u002Ftr\u002Fubuntu-guncellemesi-sonrasi-cyberpanele-ulasilamama-sorunlarini-giderme","Ubuntu Güncellemesi Sonrası CyberPanel'e Ulaşılamama Sorunlarını Giderme",{"path":320,"title":321},"\u002Ftr\u002Frestful-api-bilesenleri","RESTful API Bileşenleri",{"path":323,"title":324},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir","Factory Method Tasarım Deseni Nedir?",{"path":326,"title":327},"\u002Ftr\u002Fcodeserver-nedir-codeserver-nasil-kurulur","Code-Server Nedir? Bulutta VS Code Geliştirme Ortamı Kurulumu",{"path":329,"title":330},"\u002Ftr\u002Fjavascriptde-moduller","JavaScript'te Modüller",{"path":332,"title":333},"\u002Ftr\u002Fvite-nedir","Vite Nedir? Modern Web Geliştirme ve Paketleme Aracı",{"path":335,"title":336},"\u002Ftr\u002Fyeni-tema-honeywind","Yeni WordPress Temam Honeywind: Tailwind CSS ve Minimalizm",{"path":338,"title":339},"\u002Ftr\u002Fekran-filtresi-mavi-isik-filtresi-flux","Gözlere dost, mavi ışığa düşman ekran filtresi f.lux",{"path":341,"title":342},"\u002Ftr\u002Fiterator-tasarim-deseni-nedir","Iterator Tasarım Deseni Nedir?",{"path":344,"title":345},"\u002Ftr\u002Fes5-nedir","ES5 Nedir? JavaScript Geliştiricileri İçin Kılavuz",{"path":347,"title":348},"\u002Ftr\u002Ftricolor-garbage-collection-algoritmasi-nedir","Tricolor Garbage Collection Algoritması Nedir?",{"path":350,"title":351},"\u002Ftr\u002Fwordpress-yonetici-sifresini-wp-cli-kullanarak-sifirlama","WordPress Yönetici Şifresini WP-CLI Kullanarak Sıfırlama",{"path":353,"title":354},"\u002Ftr\u002Ffull-stack-proje-gelistiriyoruz","Full Stack Proje Geliştiriyoruz",{"path":356,"title":357},"\u002Ftr\u002Fphp-8-0-yenilikler","Merhaba PHP 8: Modern PHP 8.x Çağı",{"path":359,"title":360},"\u002Ftr\u002Fcomposite-tasarim-deseni-nedir","Composite Tasarım Deseni Nedir?",{"path":268,"title":269},{"path":363,"title":364},"\u002Ftr\u002Fcommand-tasarim-deseni-nedir","Command Tasarım Deseni Nedir?",{"path":366,"title":367},"\u002Ftr\u002Fmerhaba-tailwind-css","Merhaba Tailwind CSS",{"path":369,"title":370},"\u002Ftr\u002Fvue-3-hakkinda-bilmeniz-gerekenler-yenilikler","Vue 3 Hakkında Bilmeniz Gerekenler ve Yenilikler",{"path":372,"title":373},"\u002Ftr\u002Fbuilder-tasarim-deseni-nedir","Builder Tasarım Deseni Nedir?",{"path":375,"title":376},"\u002Ftr\u002Fdesign-patterns-tasarim-desenleri-nedir","Design Patterns \u002F Tasarım Desenleri nedir?",{"path":378,"title":379},"\u002Ftr\u002Fdocker-ile-rabbitmq-kurulumu","Docker ile RabbitMQ Kurulumu",{"path":381,"title":382},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir","Singleton Tasarım Deseni Nedir?",{"path":384,"title":385},"\u002Ftr\u002Fgo-veri-tipleri-map","Go Veri Tipleri - Map",{"path":387,"title":388},"\u002Ftr\u002Fstate-tasarim-deseni-nedir","State Tasarım Deseni Nedir?",{"path":390,"title":391},"\u002Ftr\u002Fgo-veri-tipleri-struct","Go Veri Tipleri: Struct",[393,395,399,401],{"path":296,"title":297,"date":394},"2026-06-20",{"path":396,"title":397,"date":398},"\u002Ftr\u002Fself-hosted-api-gateway-nasil-kurulur-kapsamli-rehber","Self-Hosted API Gateway Nasıl Kurulur? Kapsamlı Rehber","2023-01-12",{"path":347,"title":348,"date":400},"2021-10-01",{"path":378,"title":379,"date":402},"2021-03-11",[404,408,410],{"path":405,"title":406,"date":407},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST Api Güvenliği Nasıl Sağlanır?","2021-02-16",{"path":329,"title":330,"date":409},"2020-12-11",{"path":411,"title":412,"date":413},"\u002Ftr\u002Fes11-nedir-ecmascript-2020-nedir","ES11 Nedir? ECMAScript 2020 Nedir?","2021-10-19",1782142109220]