{"id":634,"date":"2016-06-10T00:23:37","date_gmt":"2016-06-09T21:23:37","guid":{"rendered":"https:\/\/gokhan-gokalp.com\/?p=634"},"modified":"2016-06-10T00:24:22","modified_gmt":"2016-06-09T21:24:22","slug":"c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi","status":"publish","type":"post","link":"https:\/\/gokhan-gokalp.com\/tr\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/","title":{"rendered":"C# ile RabbitMQ Client&#8217;\u0131 kullanarak Publisher ve Consumer Yap\u0131s\u0131"},"content":{"rendered":"<p>Merhaba arkada\u015flar.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/06\/icons-rabbitmq-200x200.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-635 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/06\/icons-rabbitmq-200x200.png\" alt=\"icons--rabbitmq-200x200\" width=\"200\" height=\"200\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/icons-rabbitmq-200x200.png 200w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/icons-rabbitmq-200x200-150x150.png 150w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/icons-rabbitmq-200x200-100x100.png 100w\" data-sizes=\"(max-width: 200px) 100vw, 200px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 200px; --smush-placeholder-aspect-ratio: 200\/200;\" \/><\/a><\/p>\n<p>Bir \u00f6nceki makalem olan &#8220;<a href=\"https:\/\/gokhan-gokalp.com\/rabbitmq-nedir-ve-windowsa-kurulumu\/\">RabbitMQ Nedir ve Windows\u2019a Kurulumu<\/a>&#8221;\u00a0isimli makale ile,\u00a0RabbitMQ konusuna bir giri\u015f yapm\u0131\u015f idik. Bu makale kapsam\u0131nda\u00a0ise RabbitMQ&#8217;nun C# provider&#8217;\u0131n\u0131 kullanarak\u00a0en s\u0131k kullan\u0131lan\u00a0<strong>Messaging Pattern<\/strong>&#8216;lerinden birisi olan &#8220;<strong>Publish \/ Subscribe<\/strong>&#8221; pattern&#8217;i mant\u0131\u011f\u0131nda,\u00a0basit bir \u015fekilde nas\u0131l\u00a0mesaj g\u00f6nderilir ve al\u0131n\u0131ra\u00a0bak\u0131yor olaca\u011f\u0131z.<\/p>\n<p>RabbitMQ&#8217;nun Procuder, Queue ve Consumer yap\u0131s\u0131n\u0131 basit olarak hat\u0131rlamak gerekirse;<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/06\/ProducerQueueConsumer.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-636 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/06\/ProducerQueueConsumer.png\" alt=\"ProducerQueueConsumer\" width=\"419\" height=\"227\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/ProducerQueueConsumer.png 419w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/ProducerQueueConsumer-300x163.png 300w\" data-sizes=\"(max-width: 419px) 100vw, 419px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 419px; --smush-placeholder-aspect-ratio: 419\/227;\" \/><\/a><\/p>\n<ul>\n<li><strong>Producer<\/strong>:\u00a0Queue&#8217;ya mesaj g\u00f6nderen uygulamad\u0131r. Yani Publisher&#8217;\u0131m\u0131z.<\/li>\n<li><strong>Consumer<\/strong>: Queue&#8217;daki mesajlar\u0131 dinleyecek olan uygulamam\u0131zd\u0131r.<\/li>\n<\/ul>\n<p>Genel bilgileri tekrardan hat\u0131rlad\u0131\u011f\u0131m\u0131za g\u00f6re \u015fimdi kodlamaya ba\u015flayabiliriz. \u00d6rnek olarak bir Console Application olu\u015fturaca\u011f\u0131z ve Queue&#8217;ya mesaj g\u00f6nderecek olan Publisher&#8217;\u0131 ve bu mesajlar\u0131 dinleyecek olan Consumer yap\u0131s\u0131n\u0131 olu\u015fturaca\u011f\u0131z.<\/p>\n<p>\u00d6ncelikle Nuget Package Manager \u00fczerinden a\u015fa\u011f\u0131da g\u00f6rm\u00fc\u015f oldu\u011fumuz &#8220;RabbitMQ.Client&#8221;\u00a0paketini kural\u0131m.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-nuget.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-637 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-nuget.jpg\" alt=\"rabbitmq-nuget\" width=\"710\" height=\"208\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-nuget.jpg 710w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-nuget-300x88.jpg 300w\" data-sizes=\"(max-width: 710px) 100vw, 710px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 710px; --smush-placeholder-aspect-ratio: 710\/208;\" \/><\/a><\/p>\n<p>Kurmu\u015f oldu\u011fumuz bu client paketi sayesinde RabbitMQ\u00a0ile haberle\u015febilece\u011fiz.<\/p>\n<p>RabbitMQ&#8217;nun C#\u00a0Client provider&#8217;\u0131 connection i\u015flemlerini &#8220;ConnectionFactory&#8221; \u00fczerinden yaratarak ger\u00e7ekle\u015ftirmektedir. Bu connection&#8217;a hem &#8220;Publisher&#8221; hemde &#8220;Consumer&#8221; i\u00e7erisinde ayn\u0131 \u015fekilde ihtiyac\u0131m\u0131z olaca\u011f\u0131 i\u00e7in, &#8220;RabbitMQService&#8221; isminde bir class ekleyelim ve burada\u00a0&#8220;ConnectionFactory&#8221; class&#8217;\u0131n\u0131 kullanarak ortak i\u015flemleri kodlamaya ba\u015flayal\u0131m.<\/p>\n<pre class=\"lang:c# decode:true\">using RabbitMQ.Client;\r\n\r\nnamespace RabbitMQSample\r\n{\r\n    public class RabbitMQService\r\n    {\r\n        \/\/ localhost \u00fczerinde kurulu oldu\u011fu i\u00e7in host adresi olarak bunu kullan\u0131yorum.\r\n        private readonly string _hostName = \"localhost\";\r\n\r\n        public IConnection GetRabbitMQConnection()\r\n        {\r\n            ConnectionFactory connectionFactory = new ConnectionFactory()\r\n            {\r\n                \/\/ RabbitMQ'nun ba\u011flant\u0131 kuraca\u011f\u0131 host'u tan\u0131ml\u0131yoruz. Herhangi bir g\u00fcvenlik \u00f6nlemi koymak istersek, Management ekran\u0131ndan password ad\u0131mlar\u0131n\u0131 tan\u0131mlay\u0131p factory i\u00e7erisindeki \"UserName\" ve \"Password\" property'lerini set etmemiz yeterlidir.\r\n                HostName = _hostName\r\n            };\r\n\r\n            return connectionFactory.CreateConnection();\r\n        }\r\n    }\r\n}<\/pre>\n<p><strong>RabbitMQService<\/strong> class&#8217;\u0131m\u0131z haz\u0131r durumda. Connection i\u015flemleri &#8220;IConnection&#8221; interface&#8217;inden t\u00fcremektedir ve factory class&#8217;\u0131 \u00fczerinden &#8220;HostName&#8221; property&#8217;sini set ederek, &#8220;CreateConnection()&#8221; method&#8217;u arac\u0131l\u0131\u011f\u0131 ile yeni bir connection olu\u015fturulabilmektedir.<\/p>\n<p>\u015eimdi &#8220;Publisher&#8221; g\u00f6revini\u00a0g\u00f6recek olan Publisher class&#8217;\u0131n\u0131 kodlamaya ge\u00e7elim.<\/p>\n<pre class=\"lang:c# decode:true\">using System;\r\nusing System.Text;\r\n\r\nnamespace RabbitMQSample\r\n{\r\n    public class Publisher\r\n    {\r\n        private readonly RabbitMQService _rabbitMQService;\r\n\r\n        public Publisher(string queueName, string message)\r\n        {\r\n            _rabbitMQService = new RabbitMQService();\r\n\r\n            using (var connection = _rabbitMQService.GetRabbitMQConnection())\r\n            {\r\n                using (var channel = connection.CreateModel())\r\n                {\r\n                    channel.QueueDeclare(queueName, false, false, false, null);\r\n\r\n                    channel.BasicPublish(\"\", queueName, null, Encoding.UTF8.GetBytes(message));\r\n\r\n                    Console.WriteLine(\"{0} queue'su \u00fczerine, \\\"{1}\\\" mesaj\u0131 yaz\u0131ld\u0131.\", queueName, message);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}<\/pre>\n<p>\u015eimdi neler yapt\u0131\u011f\u0131m\u0131za ad\u0131m ad\u0131m bir bakal\u0131m.<\/p>\n<pre class=\"lang:c# decode:true \">var channel = connection.CreateModel()<\/pre>\n<p>Yukar\u0131daki sat\u0131r\u00a0ile a\u00e7m\u0131\u015f oldu\u011fumuz connection \u00fczerinden &#8220;CreateModel&#8221; method&#8217;unu \u00e7a\u011f\u0131rarak, RabbitMQ \u00fczerinde yeni bir channel\/session yaratmaktay\u0131z. Bu Channel\u00a0sayesinde bir Queue olu\u015fturabilirken, mesaj g\u00f6nderme\u00a0i\u015flemlerini de ger\u00e7ekle\u015ftirebilmekteyiz.<\/p>\n<pre class=\"lang:default decode:true\">channel.QueueDeclare(queueName, false, false, false, null);<\/pre>\n<p>Bu sat\u0131rda ise method isminden de anla\u015f\u0131labilece\u011fi \u00fczere, yeni bir queue tan\u0131ml\u0131yoruz.\u00a0Burada \u00f6nemli olan ilk \u00fc\u00e7 parametresine bakmak gerekirse;<\/p>\n<ul>\n<li><strong>queue<\/strong>: Olu\u015fturulacak olan Queue&#8217;nun ismi.<\/li>\n<li><strong>durable<\/strong>: Bu parametre ile in-memory olarak \u00e7al\u0131\u015fan Queue <strong>disk<\/strong> \u00fczerinden \u00e7al\u0131\u015fmaya ba\u015flayacakt\u0131r. Bu sayede RabbitMQ servisi dursa bile Queue kaybolmayacakt\u0131r. Her g\u00fczelli\u011fin getirdi\u011fi bir k\u00f6t\u00fc taraf\u0131n oldu\u011fu gibi bununda beraberinde getirece\u011fi <strong>latency <\/strong>problemi\u00a0bulunmaktad\u0131r haliyle.<\/li>\n<\/ul>\n<pre class=\"lang:c# decode:true \">channel.BasicPublish(\"\", queueName, null, Encoding.UTF8.GetBytes(message));<\/pre>\n<p>Art\u0131k Channel\u00a0ve Queue haz\u0131r bir durumda oldu\u011fu i\u00e7in, &#8220;BasicPublish&#8221; method&#8217;u ile kolay bir \u015fekilde olu\u015fturmu\u015f oldu\u011fumuz ilgili Queue&#8217;ya mesaj g\u00f6nderiyoruz.<\/p>\n<p>&#8220;BasicPublish&#8221; method&#8217;un kulland\u0131\u011f\u0131m\u0131z parametrelerine bakarsak:<\/p>\n<ul>\n<li><strong>exchange<\/strong>: Bu parametreyi es ge\u00e7iyoruz. Exchange genel olarak mesaj\u0131 ilgili\u00a0Routing Key&#8217;e g\u00f6re ilgili Queue&#8217;ya y\u00f6nlendiren b\u00f6l\u00fcmd\u00fcr. Direct Exchange, Fanout Exchange ve Topic Exchange gibi tipleri bulunmaktad\u0131r. Bunlar\u0131 bir sonraki makalemde detayl\u0131 olarak ele alaca\u011f\u0131m.<\/li>\n<li><strong>routingKey<\/strong>: Burada girmi\u015f oldu\u011fumuz\u00a0key&#8217;e g\u00f6re ilgili Queue&#8217;ya y\u00f6nlendirilecektir mesaj.<\/li>\n<li><strong>body<\/strong>: Queue&#8217;ya g\u00f6ndermek istedi\u011fimiz mesaj\u0131 byte[] tipinde g\u00f6nderiyoruz.<\/li>\n<\/ul>\n<p>Publisher&#8217;\u0131 test edebilmek i\u00e7in &#8220;Program.cs&#8221; class&#8217;\u0131n\u0131 a\u00e7al\u0131m ve a\u015fa\u011f\u0131daki gibi kodlayal\u0131m.<\/p>\n<pre class=\"lang:c# decode:true\">namespace RabbitMQSample\r\n{\r\n    class Program\r\n    {\r\n        private static readonly string _queueName = \"GOKHANGOKALP\";\r\n        private static Publisher _publisher;\r\n\r\n        static void Main(string[] args)\r\n        {\r\n            _publisher = new Publisher(_queueName, \"Hello RabbitMQ World!\");\r\n\r\n             Console.ReadKey();\r\n        }\r\n    }\r\n}<\/pre>\n<p>Queue ismini &#8220;GOKHANGOKALP&#8221; olarak\u00a0belirleyelim ve constructor \u00fczerinden Queue ismini ve g\u00f6ndermek istedi\u011fimiz mesaj\u0131 set edelim. Uygulamay\u0131 \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce RabbitMQ Management ekran\u0131 \u00fczerinden Queues tab&#8217;\u0131na\u00a0bir bakal\u0131m. Management ekran\u0131na &#8220;localhost:15672&#8221; adresinden eri\u015febilirsiniz.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-management-queue.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-640 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-management-queue.jpg\" alt=\"rabbitmq-management-queue\" width=\"740\" height=\"556\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-management-queue.jpg 740w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-management-queue-300x225.jpg 300w\" data-sizes=\"(max-width: 740px) 100vw, 740px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 740px; --smush-placeholder-aspect-ratio: 740\/556;\" \/><\/a><\/p>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi \u015fuan herhangi bir Queue bulunmamaktad\u0131r. \u015eimdi olu\u015fturmu\u015f oldu\u011fumuz Console uygulamas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-publisher-console.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-641 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-publisher-console.jpg\" alt=\"rabbitmq-publisher-console\" width=\"490\" height=\"142\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-publisher-console.jpg 490w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-publisher-console-300x87.jpg 300w\" data-sizes=\"(max-width: 490px) 100vw, 490px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 490px; --smush-placeholder-aspect-ratio: 490\/142;\" \/><\/a><\/p>\n<p>Publisher Console\u00a0uygulamas\u0131 \u00fczerinden\u00a0ba\u015far\u0131l\u0131 bir \u015fekilde \u00e7al\u0131\u015ft\u0131 ve &#8220;GOKHANGOKALP&#8221; isminde bir Queue olu\u015fturarak &#8220;Hello RabbitMQ World!&#8221; mesaj\u0131n\u0131 Queue&#8217;ya ekledi. Management ekran\u0131n\u0131 bir de \u015fimdi kontrol edelim.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-publisher-queues.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-642 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-publisher-queues.jpg\" alt=\"rabbitmq-publisher-queues\" width=\"761\" height=\"511\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-publisher-queues.jpg 761w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-publisher-queues-300x201.jpg 300w\" data-sizes=\"(max-width: 761px) 100vw, 761px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 761px; --smush-placeholder-aspect-ratio: 761\/511;\" \/><\/a><\/p>\n<p>Tada&#8230; &#8220;GOKHANGOKALP&#8221; isminde bir Queue olu\u015fmu\u015f ve &#8220;Read&#8221; state&#8217;inde bir mesaj\u0131n bulundu\u011funu s\u00f6yl\u00fcyor. \u015eimdi s\u0131ra geldi bu mesajlar\u0131 alacak\u00a0yani Subscribe edecek olan Consumer&#8217;\u0131 kodlamaya. &#8220;Consumer&#8221; isminde yeni bir class olu\u015fturarak, a\u015fa\u011f\u0131daki gibi kodlamaya ba\u015flayal\u0131m.<\/p>\n<pre class=\"lang:c# decode:true\">using System;\r\nusing System.Text;\r\nusing RabbitMQ.Client.Events;\r\n\r\nnamespace RabbitMQSample\r\n{\r\n    public class Consumer\r\n    {\r\n        private readonly RabbitMQService _rabbitMQService;\r\n\r\n        public Consumer(string queueName)\r\n        {\r\n            _rabbitMQService = new RabbitMQService();\r\n\r\n            using (var connection = _rabbitMQService.GetRabbitMQConnection())\r\n            {\r\n                using (var channel = connection.CreateModel())\r\n                {\r\n                    var consumer = new EventingBasicConsumer(channel);\r\n                    \/\/ Received event'i s\u00fcrekli listen modunda olacakt\u0131r.\r\n                    consumer.Received += (model, ea) =&gt;\r\n                    {\r\n                        var body = ea.Body;\r\n                        var message = Encoding.UTF8.GetString(body);\r\n\r\n                        Console.WriteLine(\"{0} isimli queue \u00fczerinden gelen mesaj: \\\"{1}\\\"\", queueName, message);\r\n                    };\r\n\r\n                    channel.BasicConsume(queueName, true, consumer);\r\n                    Console.ReadLine();\r\n                }\r\n            }\r\n        }\r\n    }\r\n}<\/pre>\n<p>Consumer k\u0131sm\u0131nda ad\u0131m ad\u0131m ne yapt\u0131\u011f\u0131m\u0131z\u0131 inceleyelim \u015fimdi.<\/p>\n<pre class=\"lang:c# decode:true \">var consumer = new EventingBasicConsumer(channel);<\/pre>\n<p>As\u0131l i\u015flemlerimizi ger\u00e7ekle\u015ftirecek old\u0131u\u011fumuz &#8220;consumer&#8221;\u00a0nesnemizdir. &#8220;EventingBasicConsumer&#8221; class&#8217;\u0131 sayesinde constructor \u00fczerinden channel verildi\u011finde, &#8220;Recevied&#8221; event&#8217;i sayesinde s\u00fcrekli &#8220;listening&#8221; modunda olacakt\u0131r. Queue&#8217;daki ilgili mesajlar\u0131 s\u0131ras\u0131yla almaktad\u0131r ve &#8220;Body&#8221; property&#8217;sinde bar\u0131nd\u0131rmaktad\u0131r. Hat\u0131rlarsak mesajlar\u0131 &#8220;byte[]&#8221; tipinde g\u00f6ndermi\u015ftik. G\u00f6ndermi\u015f oldu\u011fumuz mesaj\u0131n &#8220;string&#8221; tipinde oldu\u011funu bildi\u011fimiz i\u00e7in &#8220;Encoding&#8221; alt\u0131nda bulunan &#8220;GetString&#8221; method&#8217;u ile &#8220;Decode&#8221; i\u015flemini ger\u00e7ekle\u015ftiriyoruz.<\/p>\n<blockquote><p>NOT: RabbitMQ Queue&#8217;su <strong>FIFO<\/strong>(First in Frist out) mant\u0131\u011f\u0131nda \u00e7al\u0131\u015fmaktad\u0131r.<\/p><\/blockquote>\n<pre class=\"lang:c# decode:true \">channel.BasicConsume(queueName, true, consumer);<\/pre>\n<p>Burada ise method isminden yine anla\u015f\u0131labilece\u011fi \u00fczere (isimlendirmenin ne kadar \u00f6nemli oldu\u011fu buradan da anla\u015f\u0131labilir) basic bir \u015fekilde verilmi\u015f olan Queue ismine g\u00f6re mesajlar\u0131 alma i\u015flemini ba\u015flat\u0131yoruz. Burada dikkat \u00e7ekmek istedi\u011fim bir ka\u00e7 parametre bulunmaktad\u0131r:<\/p>\n<ul>\n<li><strong>queue<\/strong>: Hangi Queue&#8217;nun mesajlar\u0131 al\u0131nacak ise.<\/li>\n<li><strong>noAck<\/strong>: True olarak set edildi\u011fi taktirde, consumer mesaj\u0131 ald\u0131\u011f\u0131 zaman otomatik olarak mesaj Queue&#8217;dan <strong>silinecektir<\/strong>. E\u011fer Queue \u00fczerinden silinmesini istemiyor iseniz, False olarak set etmeniz gerekmektedir.<\/li>\n<\/ul>\n<p>Console\u00a0uygulamas\u0131n\u0131n &#8220;Program.cs&#8221; class&#8217;\u0131n\u0131 \u015fimdi a\u015fa\u011f\u0131daki gibi g\u00fcncelleyelim ve tekrardan \u00e7al\u0131\u015ft\u0131ralm.<\/p>\n<pre class=\"lang:c# decode:true \">namespace RabbitMQSample\r\n{\r\n    class Program\r\n    {\r\n        private static readonly string _queueName = \"GOKHANGOKALP\";\r\n        private static Publisher _publisher;\r\n        private static Consumer _consumer;\r\n\r\n        static void Main(string[] args)\r\n        {\r\n            _publisher = new Publisher(_queueName, \"Hello RabbitMQ World!\");\r\n\r\n            _consumer = new Consumer(_queueName);\r\n        }\r\n    }\r\n}<\/pre>\n<p>Publisher&#8217;\u0131 ayn\u0131 \u015fekilde ba\u015flatarak tek fark olarak Consumer&#8217;\u0131 tan\u0131ml\u0131yor ve ayn\u0131 &#8220;_queueName&#8221; parametresini ge\u00e7erek, ayn\u0131 Queue \u00fczerindeki mesajlar\u0131 dinlemesini s\u00f6yl\u00fcyoruz.<\/p>\n<p>Bunun sonucunda Console uygulamas\u0131n\u0131n \u00e7\u0131kt\u0131s\u0131 a\u015fa\u011f\u0131daki gibi olacakt\u0131r.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-publisher-and-consumer.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-643 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-publisher-and-consumer.jpg\" alt=\"rabbitmq-publisher-and-consumer\" width=\"472\" height=\"102\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-publisher-and-consumer.jpg 472w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-publisher-and-consumer-300x65.jpg 300w\" data-sizes=\"(max-width: 472px) 100vw, 472px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 472px; --smush-placeholder-aspect-ratio: 472\/102;\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi sonu\u00e7 olarak Consumer ba\u015far\u0131l\u0131 bir \u015fekilde &#8220;GOKHANGOKALP&#8221; Queue&#8217;sunu dinleyerek, i\u00e7erisinde bulunan mesaj\u0131 \u00e7ekip ekrana basm\u0131\u015ft\u0131r. &#8220;noAck&#8221; parametresini True olarak set etmi\u015f idik. \u015eimdi Management ekran\u0131n\u0131 bir kontrol edelim bakal\u0131m Queue \u00fczerinde herhangi bir mesaj var m\u0131?<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-management-queue2.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-644 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-management-queue2.jpg\" alt=\"rabbitmq-management-queue2\" width=\"761\" height=\"511\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-management-queue2.jpg 761w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-management-queue2-300x201.jpg 300w\" data-sizes=\"(max-width: 761px) 100vw, 761px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 761px; --smush-placeholder-aspect-ratio: 761\/511;\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi &#8220;GOKHANGOKALP&#8221; Queue&#8217;su oldu\u011fu gibi durmaktad\u0131r fakat herhangi bir mesaj i\u00e7erisinde bulunmamaktad\u0131r. \u015eimdi &#8220;noAck&#8221; parametresini False olarak set edip, tekrardan Console uygulamas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131ral\u0131m ve sonuca tekrardan Management ekran\u0131 \u00fczerinden bir bakal\u0131m.<\/p>\n<pre class=\"lang:c# decode:true\">channel.BasicConsume(queueName, false, consumer);<\/pre>\n<p><a href=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-management-queue3.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-645 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/06\/rabbitmq-management-queue3.jpg\" alt=\"rabbitmq-management-queue3\" width=\"761\" height=\"511\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-management-queue3.jpg 761w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/06\/rabbitmq-management-queue3-300x201.jpg 300w\" data-sizes=\"(max-width: 761px) 100vw, 761px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 761px; --smush-placeholder-aspect-ratio: 761\/511;\" \/><\/a><\/p>\n<p>&#8220;noAck&#8221; parametre de\u011feri False oldu\u011fundan dolay\u0131 Consumer mesaj\u0131 \u00e7ekmesine ra\u011fmen, mesaj Queue \u00fczerinde &#8220;Ready&#8221; state&#8217;inde\u00a0durmaktad\u0131r. Queue \u00fczerindeki mesajlar\u0131\u00a0silme gibi kararlar\u0131, business rule&#8217;lar\u0131m\u0131za ba\u011fl\u0131 olarak bizlerin ele almas\u0131 daha do\u011fru bir karar olacakt\u0131r.<\/p>\n<p>Bu makalemde\u00a0basic bir \u015fekilde RabbitMQ&#8217;nun C# Client&#8217;\u0131n\u0131 kullanarak, mesaj i\u015flemlerini nas\u0131l handle edebilece\u011fimizi hep beraber inceledik. Bir sonraki RabbitMQ serimde g\u00f6r\u00fc\u015fmek dile\u011fiyle.<\/p>\n<p>Sa\u011fl\u0131cakla kal\u0131n.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/06\/RabbitMQSample.rar\">RabbitMQSample<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba arkada\u015flar. Bir \u00f6nceki makalem olan &#8220;RabbitMQ Nedir ve Windows\u2019a Kurulumu&#8221;\u00a0isimli makale ile,\u00a0RabbitMQ konusuna bir giri\u015f yapm\u0131\u015f idik. Bu makale kapsam\u0131nda\u00a0ise RabbitMQ&#8217;nun C# provider&#8217;\u0131n\u0131 kullanarak\u00a0en s\u0131k kullan\u0131lan\u00a0Messaging Pattern&#8216;lerinden birisi olan &#8220;Publish \/ Subscribe&#8221; pattern&#8217;i mant\u0131\u011f\u0131nda,\u00a0basit bir \u015fekilde nas\u0131l\u00a0mesaj g\u00f6nderilir ve al\u0131n\u0131ra\u00a0bak\u0131yor olaca\u011f\u0131z. RabbitMQ&#8217;nun Procuder, Queue&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/gokhan-gokalp.com\/tr\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/\">Devam\u0131n\u0131 okuyun<span class=\"screen-reader-text\">C# ile RabbitMQ Client&#8217;\u0131 kullanarak Publisher ve Consumer Yap\u0131s\u0131<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[152],"tags":[192,190,191,153,186,188,187,156,189],"class_list":["post-634","post","type-post","status-publish","format-standard","hentry","category-rabbitmq","tag-amqp","tag-messaging-pattern","tag-publish-subscribe-pattern","tag-rabbitmq","tag-rabbitmq-c-client","tag-rabbitmq-c-kullanimi","tag-rabbitmq-kullanimi","tag-rabbitmq-nedir","tag-rabbitmq-publisher","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"tr","enabled_languages":["en","tr"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"tr":{"title":false,"content":false,"excerpt":false}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>C# ile RabbitMQ Client&#039;\u0131 kullanarak Publisher ve Consumer Yap\u0131s\u0131 - G\u00f6khan G\u00f6kalp<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C# ile RabbitMQ Client&#039;\u0131 kullanarak Publisher ve Consumer Yap\u0131s\u0131 - G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/\" \/>\n<meta property=\"og:site_name\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"article:published_time\" content=\"2016-06-09T21:23:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-06-09T21:24:22+00:00\" \/>\n<meta name=\"author\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\\\/\"},\"author\":{\"name\":\"G\u00f6khan G\u00f6kalp\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"headline\":\"C# ile RabbitMQ Client&#8217;\u0131 kullanarak Publisher ve Consumer Yap\u0131s\u0131\",\"datePublished\":\"2016-06-09T21:23:37+00:00\",\"dateModified\":\"2016-06-09T21:24:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\\\/\"},\"wordCount\":1112,\"commentCount\":15,\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"keywords\":[\"AMQP\",\"Messaging Pattern\",\"Publish Subscribe Pattern\",\"RabbitMQ\",\"RabbitMQ C# Client\",\"RabbitMQ C# Kullan\u0131m\u0131\",\"RabbitMQ kullan\u0131m\u0131\",\"RabbitMQ Nedir\",\"RabbitMQ Publisher\"],\"articleSection\":[\"RabbitMQ\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\\\/\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\\\/\",\"name\":\"C# ile RabbitMQ Client'\u0131 kullanarak Publisher ve Consumer Yap\u0131s\u0131 - G\u00f6khan G\u00f6kalp\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\"},\"datePublished\":\"2016-06-09T21:23:37+00:00\",\"dateModified\":\"2016-06-09T21:24:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C# ile RabbitMQ Client&#8217;\u0131 kullanarak Publisher ve Consumer Yap\u0131s\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"description\":\"C# &amp; Python lover\",\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gokhan-gokalp.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"pronouns\":\"he\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"caption\":\"G\u00f6khan G\u00f6kalp\"},\"logo\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\"},\"sameAs\":[\"https:\\\/\\\/gokhan-gokalp.com\"],\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/tr\\\/author\\\/gok-gokalp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C# ile RabbitMQ Client'\u0131 kullanarak Publisher ve Consumer Yap\u0131s\u0131 - G\u00f6khan G\u00f6kalp","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/","og_locale":"tr_TR","og_type":"article","og_title":"C# ile RabbitMQ Client'\u0131 kullanarak Publisher ve Consumer Yap\u0131s\u0131 - G\u00f6khan G\u00f6kalp","og_url":"https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/","og_site_name":"G\u00f6khan G\u00f6kalp","article_published_time":"2016-06-09T21:23:37+00:00","article_modified_time":"2016-06-09T21:24:22+00:00","author":"G\u00f6khan G\u00f6kalp","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"G\u00f6khan G\u00f6kalp","Tahmini okuma s\u00fcresi":"7 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/#article","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/"},"author":{"name":"G\u00f6khan G\u00f6kalp","@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"headline":"C# ile RabbitMQ Client&#8217;\u0131 kullanarak Publisher ve Consumer Yap\u0131s\u0131","datePublished":"2016-06-09T21:23:37+00:00","dateModified":"2016-06-09T21:24:22+00:00","mainEntityOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/"},"wordCount":1112,"commentCount":15,"publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"keywords":["AMQP","Messaging Pattern","Publish Subscribe Pattern","RabbitMQ","RabbitMQ C# Client","RabbitMQ C# Kullan\u0131m\u0131","RabbitMQ kullan\u0131m\u0131","RabbitMQ Nedir","RabbitMQ Publisher"],"articleSection":["RabbitMQ"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/","url":"https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/","name":"C# ile RabbitMQ Client'\u0131 kullanarak Publisher ve Consumer Yap\u0131s\u0131 - G\u00f6khan G\u00f6kalp","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/#website"},"datePublished":"2016-06-09T21:23:37+00:00","dateModified":"2016-06-09T21:24:22+00:00","breadcrumb":{"@id":"https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gokhan-gokalp.com\/c-ile-rabbitmq-clienti-kullanarak-publisher-ve-consumer-yapisi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gokhan-gokalp.com\/"},{"@type":"ListItem","position":2,"name":"C# ile RabbitMQ Client&#8217;\u0131 kullanarak Publisher ve Consumer Yap\u0131s\u0131"}]},{"@type":"WebSite","@id":"https:\/\/gokhan-gokalp.com\/#website","url":"https:\/\/gokhan-gokalp.com\/","name":"G\u00f6khan G\u00f6kalp","description":"C# &amp; Python lover","publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gokhan-gokalp.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe","name":"G\u00f6khan G\u00f6kalp","pronouns":"he","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","url":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","caption":"G\u00f6khan G\u00f6kalp"},"logo":{"@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659"},"sameAs":["https:\/\/gokhan-gokalp.com"],"url":"https:\/\/gokhan-gokalp.com\/tr\/author\/gok-gokalp\/"}]}},"_links":{"self":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/comments?post=634"}],"version-history":[{"count":3,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/634\/revisions"}],"predecessor-version":[{"id":647,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/634\/revisions\/647"}],"wp:attachment":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media?parent=634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/categories?post=634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/tags?post=634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}