﻿
{"id":17614,"date":"2020-08-30T18:12:28","date_gmt":"2020-08-30T18:12:28","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=17614"},"modified":"2020-08-30T18:12:28","modified_gmt":"2020-08-30T18:12:28","slug":"azure-functions-serisi-18-queue-trigger","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/azure-functions-serisi-18-queue-trigger\/","title":{"rendered":"Azure Functions Serisi #18 &#8211; Queue Trigger"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde <a href=\"https:\/\/www.gencayyildiz.com\/blog\/azure-functions-yazi-serisi\/\" rel=\"noopener noreferrer\" target=\"_blank\">Azure Functions yaz\u0131 serisi<\/a>nin son makalesi olan Queue Trigger \u00fczerine irdelemede bulunuyor olaca\u011f\u0131z.<\/p>\n<h4 style=\"color: #e83e8c;\">Queue Trigger Nedir?<\/h4>\n<p>Azure Storage i\u00e7erisindeki herhangi bir queue servisindeki kuyru\u011fa mesaj geldi\u011finde tetiklenecek olan ve g\u00f6nderilen mesaj\u0131 elde edip i\u015flem yapmam\u0131z\u0131 sa\u011flayan bir trigger&#8217;d\u0131r. Kuyruktaki mesaj\u0131; <em><strong>string olarak<\/strong><\/em> yahut <em><strong>serialize edilmi\u015fse uygun entity&#8217;e deserialize ederek<\/strong><\/em> ya da <em><strong>Input Binding i\u015flemine tabii tutarak<\/strong><\/em> elde etmemizi sa\u011flar. T\u00fcm bunlar\u0131n d\u0131\u015f\u0131nda gelecek olan mesaja dair detaylar\u0131 g\u00f6rebilmemiz i\u00e7in <em><strong>CloudQueueMessage<\/strong><\/em> t\u00fcr\u00fcnden de elde ederek ekstra bilgiler edinebilmemizide sa\u011flamaktad\u0131r. \u0130\u00e7eri\u011fimizde t\u00fcm bu y\u00f6ntemleri tek tek ele al\u0131p mesajlar\u0131n nas\u0131l i\u015flendi\u011fini incelemi\u015f olaca\u011f\u0131z.<\/p>\n<h4 style=\"color: #e83e8c;\">Queue Trigger Olu\u015fturma<\/h4>\n<p>Visual Studio \u00fczerinden Queue Trigger olu\u015fturman\u0131n di\u011fer trigger&#8217;lar\u0131n olu\u015fturulmas\u0131ndan pek fark\u0131 bulunmamaktad\u0131r.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger.jpg\" alt=\"Azure Functions Serisi #18 - Queue Trigger\" width=\"952\" height=\"642\" class=\"aligncenter size-full wp-image-17625\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger.jpg 952w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger-300x202.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger-768x518.jpg 768w\" sizes=\"auto, (max-width: 952px) 100vw, 952px\" \/><\/a><br \/>\nBurada sa\u011f taraftaki men\u00fclerden bir \u00f6nceki <a href=\"https:\/\/www.gencayyildiz.com\/blog\/azure-functions-serisi-17-blob-trigger\/\" rel=\"noopener noreferrer\" target=\"_blank\">Blob Trigger<\/a> ba\u015fl\u0131kl\u0131 yaz\u0131m\u0131zdakilerle benzer olanlar\u0131 birebir ayn\u0131 mahiyette i\u015flevselli\u011fe sahiptirler. \u0130lgili yaz\u0131daki alakal\u0131 b\u00f6l\u00fcm\u00fc queue trigger&#8217;a uyarlayarak burada al\u0131nt\u0131l\u0131yorum;<\/p>\n<blockquote>\n<ul>\n<li><strong>Storage Account(AzureWebJobsStorage)<\/strong><br \/>\nQueue Trigger\u2019\u0131n kullanaca\u011f\u0131 Azure Storage account\u2019unu se\u00e7iniz.\n<\/li>\n<li><strong>Connection string setting name<\/strong><br \/>\nKullan\u0131lacak Azure Storage\u2019\u0131n connection string de\u011ferini giriniz. E\u011fer bo\u015f ge\u00e7ersek default olarak local emulator\u2019de ki storage\u2019a ba\u011flant\u0131 sa\u011flanacakt\u0131r.\n<\/li>\n<\/ul>\n<\/blockquote>\n<p>Geriye bir tek &#8216;Queue Name&#8217; alan\u0131 kalmaktad\u0131r. Bununda olu\u015fturulacak kuyru\u011fun ad\u0131 oldu\u011fu a\u015fikard\u0131r \ud83d\ude42<\/p>\n<p>\u0130lgili uygulamay\u0131 olu\u015fturduktan sonra kar\u015f\u0131m\u0131za gelen fonksiyona g\u00f6z atarsak e\u011fer;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public static class Function1\r\n    {\r\n        &#x5B;FunctionName(&quot;Function1&quot;)]\r\n        public static void Run(&#x5B;QueueTrigger(&quot;myqueue-items&quot;, Connection = &quot;&quot;)]string myQueueItem, ILogger log)\r\n        {\r\n            log.LogInformation($&quot;C# Queue trigger function processed: {myQueueItem}&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere &#8216;QueueTrigger&#8217; attribute&#8217;u ile i\u015faretlenmi\u015f ve &#8216;myqueue-items&#8217; de\u011ferine sahip bir string parametre \u00fczerinden mesaj yakalanmaktad\u0131r.<\/p>\n<p>\u015eimdi bu trigger&#8217;\u0131 test edebilmek i\u00e7in \u00f6ncelikle ilgili Azure Queue Storage&#8217;da &#8216;myqueue-items&#8217; isminde bir kuyruk olu\u015ftural\u0131m ve ard\u0131ndan trigger&#8217;\u0131 derleyip, \u00e7al\u0131\u015ft\u0131ral\u0131m.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger-1.jpg\" alt=\"Azure Functions Serisi #18 - Queue Trigger\" width=\"213\" height=\"87\" class=\"aligncenter size-full wp-image-17631\" \/><\/a><br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger.gif\" alt=\"Azure Functions Serisi #18 - Queue Trigger\" width=\"800\" height=\"435\" class=\"aligncenter size-full wp-image-17633\" \/><\/a><br \/>\nG\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere kuyru\u011fa verilen her bir mesaj neticede ilgili function taraf\u0131ndan string olarak kar\u015f\u0131lan\u0131p t\u00fcketilmektedir. \u0130sterseniz ilgili mesaj\u0131 bir entity ile kar\u015f\u0131layabilir ve otomatik olarak parse edip elde edebilirsiniz.<\/p>\n<p>\u015e\u00f6yle ki;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Message\r\n    {\r\n        public string Key { get; set; }\r\n        public string Value { get; set; }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public static class Function1\r\n    {\r\n        &#x5B;FunctionName(&quot;Function1&quot;)]\r\n        public static void Run(&#x5B;QueueTrigger(&quot;myqueue-items&quot;, Connection = &quot;&quot;)] Message message, ILogger log)\r\n        {\r\n            log.LogInformation($&quot;C# Queue trigger function processed: {message.Key} - {message.Value}&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger-1.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger-1.gif\" alt=\"Azure Functions Serisi #18 - Queue Trigger\" width=\"600\" height=\"327\" class=\"aligncenter size-full wp-image-17636\" \/><\/a><\/p>\n<p>Ya da! \u0130\u00e7eri\u011fimizin ilk paragraflar\u0131nda belirtti\u011fim gibi mesaj\u0131 CloudQueueMessage t\u00fcr\u00fcnden kar\u015f\u0131layabilir ve gelen mesaja dair ekstradan detayl\u0131 bilgilerde edinebilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public static class Function1\r\n    {\r\n        &#x5B;FunctionName(&quot;Function1&quot;)]\r\n        public static void Run(&#x5B;QueueTrigger(&quot;myqueue-items&quot;, Connection = &quot;&quot;)] CloudQueueMessage message, ILogger log)\r\n        {\r\n            log.LogInformation($&quot;Message         : {message.AsString}&quot;);\r\n            log.LogInformation($&quot;Expiration Time : {message.ExpirationTime}&quot;);\r\n            log.LogInformation($&quot;Id              : {message.Id}&quot;);\r\n            log.LogInformation($&quot;Dequeue Count   : {message.DequeueCount}&quot;);\r\n            log.LogInformation($&quot;Pop Receipt     : {message.PopReceipt}&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger-2.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger-2.gif\" alt=\"Azure Functions Serisi #18 - Queue Trigger\" width=\"800\" height=\"501\" class=\"aligncenter size-full wp-image-17638\" \/><\/a><\/p>\n<h4 style=\"color: #e83e8c;\">Queue Trigger \u0130le Input Blob Binding<\/h4>\n<p>\u015eimdi, Azure Queue Storage&#8217;a g\u00f6nderilen mesaj ile bir Blob Storage hesab\u0131na input binding ger\u00e7ekle\u015ftirerek, e\u015fle\u015fen dosyay\u0131 elde edip bilgilerini yazd\u0131ran bir Queue Trigger olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public static class Function1\r\n    {\r\n        &#x5B;FunctionName(&quot;Function1&quot;)]\r\n        public static void Run(&#x5B;QueueTrigger(&quot;myqueue-items&quot;, Connection = &quot;&quot;)] string message, ILogger log,\r\n            &#x5B;Blob(&quot;files\/{queueTrigger}&quot;, FileAccess.Read, Connection = &quot;&quot;)] CloudBlockBlob cloudBlockBlob)\r\n        {\r\n            log.LogInformation($&quot;File Name : {cloudBlockBlob.Name}&quot;);\r\n            log.LogInformation($&quot;Blob Type : {cloudBlockBlob.BlobType}&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>Bu yazd\u0131\u011f\u0131m\u0131z trigger&#8217;\u0131 incelersek e\u011fer; input binding yap\u0131lan Blob Storage i\u00e7erisindeki &#8216;files&#8217; isimli container i\u00e7erisinde, queue&#8217;dan gelecek olan mesaj\u0131 temsil eden &#8216;queueTrigger&#8217; keyword&#8217;\u00fc ile e\u015fle\u015fen blob&#8217;lar\u0131 elde edip bilgilerini okumam\u0131z\u0131 sa\u011flamaktad\u0131r. Sadece okuma i\u015flemi yap\u0131ld\u0131\u011f\u0131 i\u00e7in &#8216;FileAccess.Read&#8217; olarak ayarlanm\u0131\u015ft\u0131r. Ayr\u0131ca bu binding &#8216;CloudBlockBlob&#8217; yerine &#8216;Stream&#8217; ya da &#8216;CloudBlobContainer&#8217; olarak da al\u0131nabilirdi.<\/p>\n<p>Uygulamay\u0131 derleyip, \u00e7al\u0131\u015ft\u0131r\u0131rsak e\u011fer;<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger-3.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-18-Queue-Trigger-3.gif\" alt=\"Azure Functions Serisi #18 - Queue Trigger\" width=\"800\" height=\"521\" class=\"aligncenter size-full wp-image-17646\" \/><\/a><br \/>\n\u015feklinde verilen de\u011fere kar\u015f\u0131l\u0131k gelen blob&#8217;u elde edip, bilgilerini loglad\u0131\u011f\u0131n\u0131 g\u00f6zlemleyebilmekteyiz.<\/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 dilerim&#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, Bu i\u00e7eri\u011fimizde Azure Functions yaz\u0131 serisinin son makalesi olan Queue Trigger \u00fczerine irdelemede bulunuyor olaca\u011f\u0131z. Queue Trigger Nedir? Azure Storage i\u00e7erisindeki herhangi bir queue servisindeki kuyru\u011fa mesaj geldi\u011finde tetiklenecek olan ve g\u00f6nderilen mesaj\u0131&#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":17011,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3121],"tags":[3696,3661,3758,3759,3695],"class_list":["post-17614","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure","tag-azure-function-queue-trigger","tag-azure-functions","tag-cloudqueuemessage","tag-input-blob-binding","tag-queue-trigger"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/17614","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=17614"}],"version-history":[{"count":29,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/17614\/revisions"}],"predecessor-version":[{"id":17649,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/17614\/revisions\/17649"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/17011"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=17614"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=17614"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=17614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}