﻿
{"id":13801,"date":"2020-02-29T22:04:09","date_gmt":"2020-02-29T22:04:09","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=13801"},"modified":"2020-02-29T22:04:09","modified_gmt":"2020-02-29T22:04:09","slug":"rabbitmq-direct-exchange","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/rabbitmq-direct-exchange\/","title":{"rendered":"RabbitMQ &#8211; Direct Exchange"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/rabbitmq-yazi-dizisi\/\" rel=\"noopener noreferrer\" target=\"_blank\">RabbitMQ yaz\u0131 dizimizde<\/a> exchange t\u00fcrleri aras\u0131ndan s\u0131ra Direct Exchange&#8217;e gelmi\u015f bulunmaktad\u0131r. \u015eimdi gelin hi\u00e7 vakit kaybetmeksizin ilgili exchange&#8217;i inceleyelim.<\/p>\n<h3>Direct Exchange \u0130\u015fleyi\u015fi Nas\u0131ld\u0131r?<\/h3>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/02\/RabbitMQ-Direct-Exchange.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/02\/RabbitMQ-Direct-Exchange.jpg\" alt=\"RabbitMQ - Direct Exchange\" width=\"649\" height=\"422\" class=\"aligncenter size-full wp-image-13803\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/02\/RabbitMQ-Direct-Exchange.jpg 649w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/02\/RabbitMQ-Direct-Exchange-300x195.jpg 300w\" sizes=\"auto, (max-width: 649px) 100vw, 649px\" \/><\/a><\/p>\n<p>Publisher\u0131n g\u00f6nderece\u011fi mesaj\u0131 istedi\u011fi consumer(lar)a iletilmesini sa\u011flayan ve b\u00f6ylece hedef t\u00fcketiciye veriyi i\u015fleten bir i\u015fleyi\u015fe sahip exchange&#8217;tir. Bunun i\u00e7in mesaja bir Routing-Key de\u011feri verilmekte ve bu routing-key de\u011ferine sahip t\u00fcm kuyruklara mesaj\u0131n iletilmesi sa\u011flanmaktad\u0131r.<\/p>\n<blockquote style=\"color: purple;\"><p>Direct Exchange, mesaj\u0131 direkt olarak ilgili adrese anahtar teslim yapmaktad\u0131r diyebiliriz.<\/p><\/blockquote>\n<h3>Kullan\u0131m\u0131<\/h3>\n<h4 style=\"color:orange;\">Publisher<\/h4>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            ConnectionFactory factory = new ConnectionFactory();\r\n            factory.Uri = new Uri(&quot;amqp:\/\/hkhjerrt:hcqiavAqll6-co4abXnSqUBh_hHifz-Z@hornet.rmq.cloudamqp.com\/hkhjerrt&quot;);\r\n\r\n            using (IConnection connection = factory.CreateConnection())\r\n            using (IModel channel = connection.CreateModel())\r\n            {\r\n                channel.ExchangeDeclare(&quot;directexchange&quot;, type: ExchangeType.Direct);\r\n                for (int i = 1; i &lt;= 100; i++)\r\n                {\r\n                    byte&#x5B;] bytemessage = Encoding.UTF8.GetBytes($&quot;say\u0131 - {i}&quot;);\r\n\r\n                    IBasicProperties properties = channel.CreateBasicProperties();\r\n                    properties.Persistent = true;\r\n                    if (i % 2 != 0)\r\n                        channel.BasicPublish(exchange: &quot;directexchange&quot;, routingKey: &quot;ciftsayilar&quot;, basicProperties: properties, body: bytemessage);\r\n                    else\r\n                        channel.BasicPublish(exchange: &quot;directexchange&quot;, routingKey: &quot;teksayilar&quot;, basicProperties: properties, body: bytemessage);\r\n                }\r\n            }\r\n        }\r\n<\/pre>\n<p><strong><em>9.<\/em><\/strong> sat\u0131ra g\u00f6z atarsan\u0131z e\u011fer &#8220;ExchangeDeclare&#8221; metodunun &#8216;type&#8217; parametresini &#8216;ExchangeType.Direct&#8217; de\u011feri ile Direct Exchange olarak ayarlamaktay\u0131z. <strong><em>16<\/em><\/strong> ile <strong><em>19.<\/em><\/strong> sat\u0131rlar aras\u0131na g\u00f6z atarsan\u0131z e\u011fer d\u00f6ng\u00fcyle \u00fcretilen mesajlar\u0131 \u00e7iftlik yahut teklik durumuna g\u00f6re declare edilen ilgili exchange \u00fczerinden ilgili route-keylerle i\u015faretleyerek kuyru\u011fa g\u00f6nderiyoruz.<\/p>\n<p>B\u00f6ylece art\u0131k tek say\u0131lar\u0131m\u0131z &#8220;teksayilar&#8221; routingKey&#8217;ine sahip kuyrukta tutulurken \u00e7ift say\u0131lar ise &#8220;ciftsayilar&#8221; kuyru\u011funa g\u00f6nderilecektir. Bu yap\u0131lanmadan sonra art\u0131k consumerlar\u0131m\u0131z\u0131n bir k\u0131sm\u0131 &#8220;teksayilar&#8221; route-key&#8217;ine sahip kuyru\u011fu dinlerken, bir k\u0131sm\u0131da &#8220;ciftsayilar&#8221; route-key&#8217;ine sahip kuyru\u011fu dinleyecektirler. B\u00f6ylece hangi kuyru\u011fa mesaj gelirse onu dinleyen consumerlar devreye girecek ve t\u00fcketim\/i\u015fleyi\u015f ba\u015flayacakt\u0131r.<\/p>\n<h4 style=\"color:orange;\">Consumer<\/h4>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            ConnectionFactory factory = new ConnectionFactory();\r\n            factory.Uri = new Uri(&quot;amqp:\/\/hkhjerrt:hcqiavAqll6-co4abXnSqUBh_hHifz-Z@hornet.rmq.cloudamqp.com\/hkhjerrt&quot;);\r\n\r\n            using (IConnection connection = factory.CreateConnection())\r\n            using (IModel channel = connection.CreateModel())\r\n            {\r\n                channel.ExchangeDeclare(&quot;directexchange&quot;, type: ExchangeType.Direct);\r\n\r\n                string queueName = channel.QueueDeclare().QueueName;\r\n                if (int.Parse(args&#x5B;0]) == 1)\r\n                    channel.QueueBind(queue: queueName, exchange: &quot;directexchange&quot;, routingKey: &quot;teksayilar&quot;);\r\n                else\r\n                    channel.QueueBind(queue: queueName, exchange: &quot;directexchange&quot;, routingKey: &quot;ciftsayilar&quot;);\r\n\r\n                channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);\r\n\r\n                EventingBasicConsumer consumer = new EventingBasicConsumer(channel);\r\n                channel.BasicConsume(queueName, false, consumer);\r\n                consumer.Received += (sender, e) =&gt;\r\n                {\r\n                    Console.WriteLine(Encoding.UTF8.GetString(e.Body) + &quot; say\u0131s\u0131 al\u0131nd\u0131.&quot;);\r\n                    channel.BasicAck(e.DeliveryTag, false);\r\n                };\r\n                Console.Read();\r\n            }\r\n        }\r\n<\/pre>\n<p><strong><em>9.<\/em><\/strong> sat\u0131rda yine &#8220;ExchangeDeclare&#8221; metodu ile t\u00fcr\u00fc Direct Exchange olan bir exchange declare ediyoruz. <strong><em>12<\/em><\/strong> ile <strong><em>15.<\/em><\/strong> sat\u0131r aral\u0131\u011f\u0131nda ise &#8216;1&#8217; arg\u00fcman de\u011ferine sahip olan consumerlar\u0131n &#8220;teksayilar&#8221; routing-key de\u011ferine sahip kuyru\u011fu, &#8216;2&#8217; arg\u00fcman de\u011ferine sahip olanlar\u0131n ise &#8216;ciftsayilar&#8217; keyli kuyru\u011fu dinlemesini belirtiyoruz.<\/p>\n<h3>Test<\/h3>\n<p>Uygulamay\u0131 derleyip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda <a href=\"https:\/\/hornet.rmq.cloudamqp.com\/\" rel=\"noopener noreferrer\" target=\"_blank\">hornet.rmq.cloudamqp.com<\/a> adresindeki cloud servera g\u00f6z atarsak e\u011fer ilgili exchange&#8217;in olu\u015fturuldu\u011funu g\u00f6rmekteyiz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/02\/RabbitMQ-Direct-Exchange-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/02\/RabbitMQ-Direct-Exchange-1.jpg\" alt=\"RabbitMQ - Direct Exchange\" width=\"521\" height=\"579\" class=\"aligncenter size-full wp-image-13825\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/02\/RabbitMQ-Direct-Exchange-1.jpg 521w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/02\/RabbitMQ-Direct-Exchange-1-270x300.jpg 270w\" sizes=\"auto, (max-width: 521px) 100vw, 521px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/02\/RabbitMQ-Direct-Exchange.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/02\/RabbitMQ-Direct-Exchange.gif\" alt=\"RabbitMQ - Direct Exchange\" width=\"800\" height=\"466\" class=\"aligncenter size-full wp-image-13824\" \/><\/a><br \/>\nEvet g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere mesajlar router-key hedeflerine uygun t\u00fcm kuyruklara iletilmekte ve ilgili consumerlar taraf\u0131ndan an\u0131nda t\u00fcketilmektedirler&#8230;<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, RabbitMQ yaz\u0131 dizimizde exchange t\u00fcrleri aras\u0131ndan s\u0131ra Direct Exchange&#8217;e gelmi\u015f bulunmaktad\u0131r. \u015eimdi gelin hi\u00e7 vakit kaybetmeksizin ilgili exchange&#8217;i inceleyelim. Direct Exchange \u0130\u015fleyi\u015fi Nas\u0131ld\u0131r? Publisher\u0131n g\u00f6nderece\u011fi mesaj\u0131 istedi\u011fi consumer(lar)a iletilmesini sa\u011flayan ve b\u00f6ylece hedef&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":13803,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3156],"tags":[3224,3227,3158,3225,3226],"class_list":["post-13801","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-rabbitmq","tag-direct-exchange","tag-direct-exchange-routing-key","tag-rabbitmq","tag-rabbitmq-direct-exchange","tag-routing-key"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/13801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=13801"}],"version-history":[{"count":24,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/13801\/revisions"}],"predecessor-version":[{"id":13828,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/13801\/revisions\/13828"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/13803"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=13801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=13801"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=13801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}