{"id":2732,"date":"2019-06-02T22:24:49","date_gmt":"2019-06-02T19:24:49","guid":{"rendered":"https:\/\/gokhan-gokalp.com\/?p=2732"},"modified":"2019-06-02T22:32:42","modified_gmt":"2019-06-02T19:32:42","slug":"kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core","status":"publish","type":"post","link":"https:\/\/gokhan-gokalp.com\/tr\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/","title":{"rendered":"Kubernetes-based Event Driven Autoscaling with KEDA, RabbitMQ and .NET Core"},"content":{"rendered":"<p>Bildi\u011finiz gibi <em>Microsoft<\/em>, son d\u00f6nemlerde open-source d\u00fcnyas\u0131 i\u00e7in \u00e7ok fazla at\u0131l\u0131m ve yat\u0131r\u0131m yapmaktad\u0131r. Bu at\u0131l\u0131mlardan birtanesi ise <em>Red Hat<\/em> partnership&#8217;li\u011fi ile birlikte geli\u015ftirdikleri <em>Kubernetes-based Event Driven Autoscaling<\/em> yapabilmemizi sa\u011flayan <em><strong>KEDA<\/strong><\/em> ad\u0131nda bir component.<\/p>\n<p><em>KEDA<\/em>&#8216;n\u0131n duyurulmas\u0131ndan bu yana hemen kendi ortamlar\u0131m\u0131zda test etmeye ve kurcalamaya ba\u015flad\u0131m. Bu makale ile ise <em>KEDA<\/em> hakk\u0131nda edinebildi\u011fim bilgileri payla\u015fmak istedim. Ayr\u0131ca <em>.NET Core<\/em> ve <em>RabbitMQ<\/em> kullanarak, event-driven bir \u015fekilde s\u0131f\u0131rdan n adet say\u0131ya kadar uygulamam\u0131z\u0131 <em>KEDA<\/em> ile nas\u0131l scale edebilece\u011fimize bir bakaca\u011f\u0131z.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2019\/06\/D7-GAE7XYAED1by.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-2754 lazyload\" data-src=\"\/wp-content\/uploads\/2019\/06\/D7-GAE7XYAED1by.jpg\" alt=\"\" width=\"2048\" height=\"1536\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/06\/D7-GAE7XYAED1by.jpg 2048w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/06\/D7-GAE7XYAED1by-300x225.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/06\/D7-GAE7XYAED1by-768x576.jpg 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/06\/D7-GAE7XYAED1by-1024x768.jpg 1024w\" data-sizes=\"(max-width: 2048px) 100vw, 2048px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 2048px; --smush-placeholder-aspect-ratio: 2048\/1536;\" \/><\/a><\/p>\n<p style=\"text-align: center;\">Makale i\u00e7in tatilin bitmesini bekleyemedim.<\/p>\n<h2>Kubernetes Horizontal Pod Autoscaler (HPA)<\/h2>\n<p><em>KEDA<\/em>&#8216;ya de\u011finmeden \u00f6nce, <em>Kubernetes<\/em> <em>HPA<\/em>&#8216;i bir hat\u0131rlayal\u0131m. <em>HPA<\/em>, bildi\u011finiz gibi production-ready bir <em>kubernetes<\/em> ortam\u0131 i\u00e7in olmazsa olmaz otomatik bir pod scaler. <em>HPA<\/em> podlar&#8217;\u0131, g\u00f6zlemlenen <em>CPU<\/em> utilization&#8217;\u0131 veya custom metric&#8217;lere g\u00f6re otomatik olarak horizontal bir \u015fekilde scale etmektedir.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2019\/05\/hpa.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-2734 lazyload\" data-src=\"\/wp-content\/uploads\/2019\/05\/hpa.jpg\" alt=\"\" width=\"803\" height=\"723\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 803px; --smush-placeholder-aspect-ratio: 803\/723;\" \/><\/a><\/p>\n<p><em>HPA<\/em>&#8216;n\u0131n basit olarak scaling flow&#8217;u a\u015fa\u011f\u0131daki gibidir:<\/p>\n<ul>\n<li><em>HPA<\/em> default olarak <strong>30 saniye<\/strong> bir interval ile metricleri devaml\u0131 g\u00f6zlemlemektedir.<\/li>\n<li>G\u00f6zlemleme s\u0131ras\u0131nda ise daha \u00f6nceden tan\u0131mlanan threshold de\u011ferleri a\u015f\u0131l\u0131rsa, pod say\u0131s\u0131n\u0131 artt\u0131rmaya\/azaltmaya ba\u015flamaktad\u0131r.<\/li>\n<\/ul>\n<p>Biz bir \u00e7ok uygulamalar\u0131m\u0131zda <em>HPA<\/em>&#8216;i, <em>CPU-based<\/em> olarak yap\u0131land\u0131r\u0131yoruz. \u00d6rne\u011fin bizim kulland\u0131\u011f\u0131m\u0131z <em>Helm<\/em> chart i\u00e7erisindeki basit bir <em>HPA<\/em> ayar\u0131:<\/p>\n<pre class=\"lang:yaml decode:true \">hpa:\r\n enabled: true\r\n minReplicas: 1\r\n maxReplicas: 3\r\n targetCPUUtilizationPercentage: 70\r\n\r\nresources: \r\n limits:\r\n   cpu: 300m\r\n   memory: 300Mi\r\n requests:\r\n   cpu: 100m\r\n   memory: 100Mi<\/pre>\n<p>Bu ayarlara g\u00f6re e\u011fer bir pod, %70 oran\u0131ndan fazla <em>CPU<\/em> consume etmeye ba\u015flad\u0131\u011f\u0131nda, <em>HPA<\/em> imdad\u0131m\u0131za yeti\u015fiyor.<\/p>\n<blockquote><p><em><strong>NOT<\/strong><\/em>: Elbette bu i\u015flemi sadece <em>CPU-based<\/em> de\u011fil, <em>Prometheus<\/em> gibi tool&#8217;lar kullanarak custom metric&#8217;lere g\u00f6re ger\u00e7ekle\u015ftirebilmekte m\u00fcmk\u00fcn.<\/p><\/blockquote>\n<p><em>HPA<\/em> g\u00fczel bir enabler:<\/p>\n<ul>\n<li>Performansa ihtiya\u00e7 duydu\u011fumuz baz\u0131 veya beklenmedik zamanlarda, otomatik olarak performans\u0131 artt\u0131rabiliyoruz.<\/li>\n<li>Hardware resource&#8217;lar\u0131n\u0131 ise gereksiz yere allocate etmiyoruz.<\/li>\n<\/ul>\n<h2>Peki KEDA?<\/h2>\n<p><em>KEDA<\/em> ise <em>Microsoft<\/em> ve <em>Red Hat<\/em> partnership&#8217;li\u011fi ile geli\u015ftirilmi\u015f (hala geli\u015ftirilmekte olan), event-driven autoscaling yapabilmemizi sa\u011flayan native bir <em>kubernetes<\/em> component&#8217;idir.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2019\/05\/keda.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-2736 lazyload\" data-src=\"\/wp-content\/uploads\/2019\/05\/keda.jpg\" alt=\"\" width=\"876\" height=\"779\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/keda.jpg 876w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/keda-300x267.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/keda-768x683.jpg 768w\" data-sizes=\"(max-width: 876px) 100vw, 876px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 876px; --smush-placeholder-aspect-ratio: 876\/779;\" \/><\/a><\/p>\n<p><em>KEDA<\/em> ile bir container&#8217;\u0131, metric&#8217;lere g\u00f6re s\u0131f\u0131rdan istedi\u011fimiz adet instance&#8217;a kadar otomatik olarak scale edebiliriz. Buradaki g\u00fczel olan \u015fey ise, bu metric&#8217;leri g\u00f6zlemleyebilmek i\u00e7in <em>KEDA<\/em>&#8216;n\u0131n herhangi bir dependency&#8217;si bulunmamaktad\u0131r. Mimarisi hakk\u0131nda daha detayl\u0131 bilgiye ise, <em><a href=\"https:\/\/github.com\/kedacore\/keda\" target=\"_blank\" rel=\"noopener noreferrer\">buradan<\/a><\/em> eri\u015febilirsiniz.<\/p>\n<p>Metric&#8217;leri g\u00f6zlemleyebilece\u011fi event-source&#8217;lar ise, a\u015fa\u011f\u0131daki gibidir:<\/p>\n<ul>\n<li>Kafka<\/li>\n<li>RabbitMQ<\/li>\n<li>Azure Storage<\/li>\n<li>Azure Service Bus Queues and Topics<\/li>\n<\/ul>\n<h2>.NET Core ve RabbitMQ ile Scaling<\/h2>\n<p>\u00d6ncelikle <em>KEDA<\/em>&#8216;n\u0131n kurulum i\u015flemini, a\u015fa\u011f\u0131daki gibi helm chart ile ger\u00e7ekle\u015ftirelim.<\/p>\n<pre class=\"lang:default decode:true \">helm repo add kedacore https:\/\/kedacore.azureedge.net\/helm\u000b\r\nhelm repo update\u000b\r\nhelm install kedacore\/keda-edge --devel --set logLevel=debug --namespace keda --name keda<\/pre>\n<blockquote><p><em><strong>NOT<\/strong><\/em>: \u0130sterseniz <em>GitHub<\/em> \u00fczerinden repository&#8217;i indirip, kendi image&#8217;inizi de olu\u015fturabilirsiniz. \u00c7\u00fcnk\u00fc son yap\u0131lan de\u011fi\u015fiklikler, master image&#8217;e hen\u00fcz push&#8217;lanmam\u0131\u015f olabilir.<\/p><\/blockquote>\n<p><em>KEDA<\/em>&#8216;n\u0131n kurulumu ard\u0131ndan, a\u015fa\u011f\u0131daki komut sat\u0131r\u0131 ile &#8220;<em>Todo.Contracts<\/em>&#8221; ad\u0131nda bir class library olu\u015ftural\u0131m.<\/p>\n<pre class=\"lang:default decode:true \">dotnet new classlib -n Todo.Contracts<\/pre>\n<p>Bu library i\u00e7erisinde, &#8220;<em>Publisher<\/em>&#8221; ve &#8220;<em>Consumer<\/em>&#8221; i\u00e7erisinde share edece\u011fimiz event&#8217;i tan\u0131mlayaca\u011f\u0131z. \u015eimdi a\u015fa\u011f\u0131daki gibi &#8220;<em>TodoEvent<\/em>&#8221; ad\u0131nda bir class tan\u0131mlayal\u0131m.<\/p>\n<pre class=\"lang:default decode:true \">using System;\r\n\r\nnamespace Todo.Contracts\r\n{\r\n    public class TodoEvent\r\n    {\r\n        public string Message { get; set; }\r\n    }\r\n}<\/pre>\n<p>Ard\u0131ndan a\u015fa\u011f\u0131daki komut sat\u0131r\u0131 ile &#8220;<em>Todo.Publisher<\/em>&#8221; ad\u0131nda bir <em>.NET Core<\/em> console application olu\u015ftural\u0131m ve &#8220;<em>Todo.Contracts<\/em>&#8221; projesini referans olarak ekleyelim.<\/p>\n<p>Olu\u015fturduktan sonra <em>RabbitMQ<\/em> \u00fczerine event publish edebilmek i\u00e7in <em>NuGet<\/em> \u00fczerinden projeye &#8220;<em>MetroBus<\/em>&#8221; paketini dahil edelim.<\/p>\n<pre class=\"lang:default decode:true \">dotnet add package MetroBus<\/pre>\n<p>\u015eimdi &#8220;<em>Program<\/em>&#8221; class&#8217;\u0131n\u0131 a\u015fa\u011f\u0131daki gibi kodlayal\u0131m.<\/p>\n<pre class=\"lang:default decode:true \">using System;\r\nusing MetroBus;\r\nusing Todo.Contracts;\r\n\r\nnamespace Todo.Publisher\r\n{\r\n    class Program\r\n    {\r\n        static void Main(string[] args)\r\n        {\r\n            string rabbitMqUri = \"rabbitmq:\/\/127.0.0.1:5672\";\r\n            string rabbitMqUserName = \"user\";\r\n            string rabbitMqPassword = \"123456\";\r\n\r\n            var bus = MetroBusInitializer.Instance\r\n                            .UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)\r\n                            .InitializeEventProducer();\r\n\r\n            int messageCount = int.Parse(Console.ReadLine());\r\n\r\n            for (int i = 0; i &lt; messageCount; i++)\r\n            {\r\n                bus.Publish(new TodoEvent\r\n                {\r\n                    Message = \"Hello!\"\r\n                }).Wait();\r\n\r\n                Console.WriteLine(i);\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>Burada basit\u00e7e &#8220;<em>MetroBus<\/em>&#8221; paketini kullanarak, <em>RabbitMQ<\/em> \u00fczerine bir &#8220;<em>TodoEvent<\/em>&#8221; publish ediyoruz.<\/p>\n<p>H\u0131zl\u0131ca bu event&#8217;i consume edecek olan projeyi olu\u015ftural\u0131m. Bunun i\u00e7in &#8220;<em>Todo.Consumer<\/em>&#8221; ad\u0131nda yeni bir <em>.NET Core<\/em> console application&#8217;\u0131 daha olu\u015ftural\u0131m ve &#8220;<em>Todo.Contracts<\/em>&#8221; projesini referans olarak ekleyelim.<\/p>\n<p>Daha sonra <em>NuGet<\/em> \u00fczerinden &#8220;<em>MetroBus<\/em>&#8221; paketini de projeye dahil edelim. Consume i\u015flemini ger\u00e7ekle\u015ftirebilmek i\u00e7in, &#8220;<em>Program<\/em>&#8221; class&#8217;\u0131n\u0131 a\u015fa\u011f\u0131daki gibi kodlayal\u0131m.<\/p>\n<pre class=\"lang:default decode:true \">using System;\r\nusing MetroBus;\r\n\r\nnamespace Todo.Consumer\r\n{\r\n    class Program\r\n    {\r\n        static void Main(string[] args)\r\n        {\r\n            string rabbitMqUri = \"rabbitmq:\/\/my-rabbit-rabbitmq.default.svc.cluster.local:5672\";\r\n            string rabbitMqUserName = \"user\";\r\n            string rabbitMqPassword = \"123456\";\r\n            string queue = \"todo.queue\";\r\n\r\n            var bus = MetroBusInitializer.Instance\r\n                            .UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)\r\n                                .SetPrefetchCount(1)\r\n                                .RegisterConsumer&lt;TodoConsumer&gt;(queue)\r\n                            .Build();\r\n\r\n            bus.StartAsync().Wait();\r\n        }\r\n    }\r\n}<\/pre>\n<p>Burada ise basit olarak, &#8220;<em>TodoEvent<\/em>&#8221; ine &#8220;<em>todo.queue<\/em>&#8221; \u00fczerinden subscribe olaca\u011f\u0131m\u0131z\u0131 belirttik. Ard\u0131ndan <em>KEDA<\/em> ile scaling&#8217;i simulate edebilmek i\u00e7in ise, consumer&#8217;\u0131n &#8220;<em>prefetch<\/em>&#8221; count&#8217;\u0131n\u0131 &#8220;1&#8221; olarak set ettik.<\/p>\n<p>Consumer olarak ise, &#8220;<em>TodoConsumer<\/em>&#8221; class&#8217;\u0131n\u0131 register ettik. Son olarak a\u015fa\u011f\u0131daki gibi &#8220;TodoConsumer&#8221; ad\u0131nda bir class olu\u015ftural\u0131m.<\/p>\n<pre class=\"lang:default decode:true \">using System.Threading.Tasks;\r\nusing MassTransit;\r\nusing Todo.Contracts;\r\n\r\nnamespace Todo.Consumer\r\n{\r\n    public class TodoConsumer : IConsumer&lt;TodoEvent&gt;\r\n    {\r\n        public async Task Consume(ConsumeContext&lt;TodoEvent&gt; context)\r\n        {\r\n            await Task.Delay(1000);\r\n            \r\n            await System.Console.Out.WriteLineAsync(context.Message.Message);\r\n        }\r\n    }\r\n}<\/pre>\n<p>Bu class i\u00e7erisinde ise event ile gelecek olan &#8220;<em>Message<\/em>&#8221; property&#8217;sini, console \u00fczerine yazd\u0131raca\u011f\u0131z.<\/p>\n<p>Evet, dummy olarak pub\/sub uygulamam\u0131z haz\u0131r. \u015eimdi s\u0131ra ise <em>KEDA <\/em>ile deployment yapmakta!<\/p>\n<p>\u00d6ncelikle projelerin root&#8217;unda, &#8220;<em>Todo.Consumer<\/em>&#8221; projesi i\u00e7in a\u015fa\u011f\u0131daki gibi bir <em>Dockerfile<\/em> olu\u015ftural\u0131m.<\/p>\n<pre class=\"lang:default decode:true \">#Build Stage\r\nFROM microsoft\/dotnet:2.2-sdk AS build-env\r\n\r\nWORKDIR \/workdir\r\n\r\nCOPY .\/Todo.Contracts .\/Todo.Contracts\/\r\nCOPY .\/Todo.Consumer .\/Todo.Consumer\/\r\n\r\nRUN dotnet restore .\/Todo.Consumer\/Todo.Consumer.csproj\r\nRUN dotnet publish .\/Todo.Consumer\/Todo.Consumer.csproj -c Release -o \/publish\r\n\r\nFROM microsoft\/dotnet:2.2-aspnetcore-runtime\r\nCOPY --from=build-env \/publish \/publish\r\nWORKDIR \/publish\r\nENTRYPOINT [\"dotnet\", \"Todo.Consumer.dll\"]<\/pre>\n<p>Sonras\u0131nda ise <em>KEDA<\/em> ile birlikte ger\u00e7ekle\u015ftirece\u011fimiz deployment file&#8217;\u0131n\u0131, a\u015fa\u011f\u0131daki gibi olu\u015fturalum.<\/p>\n<p>&#8220;<em>todo.consomer.deploy.yaml<\/em>&#8221;<\/p>\n<pre class=\"lang:default decode:true\">apiVersion: apps\/v1\r\nkind: Deployment\r\nmetadata:\r\n  name: todo-consumer\r\n  namespace: default\r\n  labels:\r\n    app: todo-consumer\r\nspec:\r\n  selector:\r\n    matchLabels:\r\n      app: todo-consumer\r\n  template:\r\n    metadata:\r\n      labels:\r\n        app: todo-consumer\r\n    spec:\r\n      containers:\r\n      - name: todo-consumer\r\n        image: ggplayground.azurecr.io\/todo-consumer:dev-04\r\n        imagePullPolicy: Always\r\n---\r\napiVersion: keda.k8s.io\/v1alpha1\r\nkind: ScaledObject\r\nmetadata:\r\n  name: todo-consumer\r\n  namespace: default\r\n  labels:\r\n    deploymentName: todo-consumer\r\nspec:\r\n  scaleTargetRef:\r\n    deploymentName: todo-consumer\r\n  pollingInterval: 5   # Optional. Default: 30 seconds\r\n  cooldownPeriod: 30   # Optional. Default: 300 seconds\r\n  maxReplicaCount: 10  # Optional. Default: 100\r\n  triggers:\r\n  - type: rabbitmq\r\n    metadata:\r\n      queueName: todo.queue\r\n      host: 'amqp:\/\/user:123456@my-rabbit-rabbitmq.default.svc.cluster.local:5672'\r\n      queueLength  : '5'\r\n---\r\n<\/pre>\n<p>\u0130lk k\u0131sm &#8220;<em>Deployment<\/em>&#8221; controller k\u0131sm\u0131. Ben container registry olarak <em>Azure Container Registry<\/em> kulland\u0131\u011f\u0131m i\u00e7in, consumer image&#8217;ini oraya push&#8217;lad\u0131m.<\/p>\n<p>As\u0131l \u00f6nemli k\u0131s\u0131m ise &#8220;<em>ScaledObject<\/em>&#8221; k\u0131sm\u0131. Burada scale i\u015fleminin ger\u00e7ekle\u015febilmesi i\u00e7in custom resource tan\u0131mlamalar\u0131n\u0131 yap\u0131yoruz.<\/p>\n<blockquote><p><em><strong>NOT<\/strong><\/em>: &#8220;<em>metadata<\/em>&#8221; ve &#8220;<em>scaleTargetRef<\/em>&#8221; i\u00e7erisindeki name de\u011ferlerinin, deployment ile ayn\u0131 name&#8217;de olmas\u0131 gerekmektedir.<\/p><\/blockquote>\n<p>Message broker olarak <em>RabbitMQ<\/em> se\u00e7ti\u011fimiz i\u00e7in ise, &#8220;<em>triggers<\/em>&#8221; alt\u0131ndaki &#8220;<em>type<\/em>&#8221; de\u011ferinin &#8220;<em>rabbitmq<\/em>&#8221; olmas\u0131 gerekmektedir. Event metric&#8217;lerinin <em>KEDA<\/em> taraf\u0131ndan g\u00f6zlemlenebilmesi i\u00e7in ise, ilgili &#8220;<em>queueName<\/em>&#8221; ve &#8220;<em>host<\/em>&#8221; bilgilerini de set ettik. Ayr\u0131ca &#8220;<em>queueLength<\/em>&#8221; variable&#8217;\u0131 ile de, <em>HPA<\/em> i\u00e7in bir nevi threshold de\u011feri tan\u0131mlam\u0131\u015f olduk.<\/p>\n<p>Yani bu spec&#8217;lere g\u00f6re <em>KEDA<\/em>, &#8220;<em>5<\/em>&#8221; saniyede bir &#8220;<em>queueLength<\/em>&#8221; de\u011ferinin &#8220;<em>5<\/em>&#8221; e ula\u015f\u0131p ula\u015fmad\u0131\u011f\u0131n\u0131 kontrol edecektir ve buna g\u00f6re scaling e karar verecektir. Scaling&#8217;e ihtiya\u00e7 olmad\u0131\u011f\u0131nda ise, &#8220;<em>cooldownPeriod<\/em>&#8221; s\u00fcresini boyunca bekleyerek, deployment&#8217;\u0131 tekrardan 0&#8217;a d\u00fc\u015f\u00fcrecektir.<\/p>\n<p>\u00d6zellikle performansa ihtiya\u00e7 duydu\u011fumuz ve queue&#8217;daki event&#8217;ler birikmeye ba\u015flad\u0131\u011f\u0131nda otomatik olarak consumer&#8217;lar\u0131 scale edebilmek, cool bir hareket de\u011fil mi?<\/p>\n<p><a href=\"\/wp-content\/uploads\/2019\/05\/awesome.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-2737 lazyload\" data-src=\"\/wp-content\/uploads\/2019\/05\/awesome.jpg\" alt=\"\" width=\"576\" height=\"416\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/awesome.jpg 576w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/awesome-300x217.jpg 300w\" data-sizes=\"(max-width: 576px) 100vw, 576px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 576px; --smush-placeholder-aspect-ratio: 576\/416;\" \/><\/a><\/p>\n<p>\u015eimdi a\u015fa\u011f\u0131daki komut sat\u0131r\u0131 ile olu\u015fturdu\u011fumuz deployment file&#8217;\u0131n\u0131 <em>kubernetes<\/em> \u00fczerinde apply edelim.<\/p>\n<pre class=\"lang:default decode:true\">kubectl apply -f todo.consomer.deploy.yaml<\/pre>\n<p>E\u011fer deployment i\u015flemi ba\u015far\u0131l\u0131 ise, <em>HPA<\/em> a\u015fa\u011f\u0131daki gibi listeye gelecektir.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2019\/05\/hpa_get.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-2739 lazyload\" data-src=\"\/wp-content\/uploads\/2019\/05\/hpa_get.jpg\" alt=\"\" width=\"853\" height=\"154\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/hpa_get.jpg 853w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/hpa_get-300x54.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/hpa_get-768x139.jpg 768w\" data-sizes=\"(max-width: 853px) 100vw, 853px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 853px; --smush-placeholder-aspect-ratio: 853\/154;\" \/><\/a><\/p>\n<p>Art\u0131k test i\u015flemine haz\u0131r\u0131z.<\/p>\n<p>Demo&#8217;yu ger\u00e7ekle\u015ftirebilmek i\u00e7in ben publisher&#8217;\u0131 local&#8217;den \u00e7al\u0131\u015ft\u0131raca\u011f\u0131m ve &#8220;<em>100<\/em>&#8221; adet event&#8217;i, <em>RabbitMQ<\/em> \u00fczerine publish edece\u011fim. Bakal\u0131m <em>KEDA<\/em> nas\u0131l davranacak.<\/p>\n<p>Olu\u015fturmu\u015f oldu\u011fumuz &#8220;<em>ScaledObject<\/em>&#8221; e g\u00f6re, <em>KEDA<\/em>, consumer&#8217;\u0131 &#8220;<em>0<\/em>&#8221; dan ba\u015flay\u0131p maximum &#8220;<em>10<\/em>&#8221; pod&#8217;a kadar scale etmesi gerekiyor. Test i\u00e7in event&#8217;leri publish etmeye ba\u015flamadan \u00f6nce, <em>RabbitMQ UI <\/em>\u00fczerinden\u00a0herhangi aktif bir consumer olmad\u0131\u011f\u0131ndan emin olal\u0131m.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2019\/05\/mq-management-ui-con.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-2741 lazyload\" data-src=\"\/wp-content\/uploads\/2019\/05\/mq-management-ui-con.jpg\" alt=\"\" width=\"1080\" height=\"782\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/mq-management-ui-con.jpg 1080w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/mq-management-ui-con-300x217.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/mq-management-ui-con-768x556.jpg 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/mq-management-ui-con-1024x741.jpg 1024w\" data-sizes=\"(max-width: 1080px) 100vw, 1080px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1080px; --smush-placeholder-aspect-ratio: 1080\/782;\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi hen\u00fcz herhangi bir message ve herhangi bir consumer bulunmamaktad\u0131r. \u015eimdi &#8220;<em>Todo.Publisher<\/em>&#8221; projesini \u00e7al\u0131\u015ft\u0131ral\u0131m ve &#8220;<em>100<\/em>&#8221; adet event publish etmesini sa\u011flayal\u0131m. Ard\u0131ndan a\u015fa\u011f\u0131daki komut sat\u0131r\u0131 ile, &#8220;<em>todo-consumer<\/em>&#8221; \u0131n deployment&#8217;lar\u0131n\u0131 izleyelim.<\/p>\n<pre class=\"lang:default decode:true\">kubectl get deploy -w<\/pre>\n<p><a href=\"\/wp-content\/uploads\/2019\/05\/kubectl-deployment-scaling.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-2742 lazyload\" data-src=\"\/wp-content\/uploads\/2019\/05\/kubectl-deployment-scaling.jpg\" alt=\"\" width=\"999\" height=\"398\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/kubectl-deployment-scaling.jpg 999w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/kubectl-deployment-scaling-300x120.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/05\/kubectl-deployment-scaling-768x306.jpg 768w\" data-sizes=\"(max-width: 999px) 100vw, 999px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 999px; --smush-placeholder-aspect-ratio: 999\/398;\" \/><\/a><\/p>\n<p>&#8220;<em>Todo.Consumer<\/em>&#8221; i\u00e7in available k\u0131sm\u0131na dikkat edersek, event&#8217;leri publish etmeye ba\u015flad\u0131ktan sonra available consumer say\u0131s\u0131 &#8220;<em>0<\/em>&#8221; dan ba\u015flayarak &#8220;<em>4<\/em>&#8221; e kadar scale up oldu. Event&#8217;ler consume edildikten sonra ise consumer say\u0131s\u0131 tekrardan &#8220;<em>0<\/em>&#8221; a scale down oldu.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Art\u0131k g\u00fcn\u00fcm\u00fcz \u00e7a\u011f\u0131nda teknoloji kullan\u0131m\u0131n\u0131n olduk\u00e7a artmas\u0131 ile beraber, bu art\u0131\u015fa ayak uydurabilmek i\u00e7in geli\u015ftiriyor oldu\u011fumuz uygulamalar\u0131 da <strong>reactive manifesto<\/strong>&#8216;nun s\u00f6yledi\u011fi gibi \u201c<em>Elastic<\/em>\u201d ve \u201c<em>Message-Driven<\/em>\u201d olarak geli\u015ftirmeliyiz. B\u00f6ylece geli\u015ftiriyor oldu\u011fumuz uygulamalar, y\u00fcksek y\u00fckler kar\u015f\u0131s\u0131nda responsive olabilirler.<\/p>\n<p>Bu ba\u011flamda <em>KEDA<\/em>, reactive bir sistem tasarlayabilmemiz i\u00e7in \u201c<em>Elastic<\/em>\u201d ba\u015fl\u0131\u011f\u0131n\u0131 bizim i\u00e7in handle ediyor. Queue length\u2019ine g\u00f6re ilgili kayna\u011f\u0131n increase veya decrease i\u015flemini ger\u00e7ekle\u015ftiriyor.<\/p>\n<p><em>KEDA<\/em> hala geli\u015ftirilmekte olan harika bir component. E\u011fer sizde katk\u0131da bulunmak istiyorsan\u0131z, <em><a href=\"https:\/\/github.com\/kedacore\/keda\/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22\" target=\"_blank\" rel=\"noopener noreferrer\">buradan<\/a><\/em> yard\u0131m istenilen baz\u0131 ba\u015fl\u0131klara eri\u015febilirsiniz.<\/p>\n<p>Demo: <em><a href=\"https:\/\/github.com\/GokGokalp\/RabbitMQPubSubDemoWithKeda\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/GokGokalp\/RabbitMQPubSubDemoWithKeda<\/a><\/em><\/p>\n<h2>References<\/h2>\n<blockquote><p>https:\/\/github.com\/kedacore\/keda\/wiki<br \/>\nhttps:\/\/cloudblogs.microsoft.com\/opensource\/2019\/05\/06\/announcing-keda-kubernetes-event-driven-autoscaling-containers\/<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Bildi\u011finiz gibi Microsoft, son d\u00f6nemlerde open-source d\u00fcnyas\u0131 i\u00e7in \u00e7ok fazla at\u0131l\u0131m ve yat\u0131r\u0131m yapmaktad\u0131r. Bu at\u0131l\u0131mlardan birtanesi ise Red Hat partnership&#8217;li\u011fi ile birlikte geli\u015ftirdikleri Kubernetes-based Event Driven Autoscaling yapabilmemizi sa\u011flayan KEDA ad\u0131nda bir component. KEDA&#8216;n\u0131n duyurulmas\u0131ndan bu yana hemen kendi ortamlar\u0131m\u0131zda test etmeye ve kurcalamaya&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/gokhan-gokalp.com\/tr\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/\">Devam\u0131n\u0131 okuyun<span class=\"screen-reader-text\">Kubernetes-based Event Driven Autoscaling with KEDA, RabbitMQ and .NET Core<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":2751,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[505,68,434,368],"tags":[526,533,534,532,440,153],"class_list":["post-2732","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-core","category-architectural","category-containerizing","category-microservices","tag-net-core","tag-autoscaling","tag-hpa","tag-keda","tag-kubernetes","tag-rabbitmq","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":true,"excerpt":false}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kubernetes-based Event Driven Autoscaling with KEDA, RabbitMQ and .NET Core - 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\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubernetes-based Event Driven Autoscaling with KEDA, RabbitMQ and .NET Core - G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/\" \/>\n<meta property=\"og:site_name\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-02T19:24:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-06-02T19:32:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/06\/keda-kubernetes.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"842\" \/>\n\t<meta property=\"og:image:height\" content=\"327\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/\"},\"author\":{\"name\":\"G\u00f6khan G\u00f6kalp\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"headline\":\"Kubernetes-based Event Driven Autoscaling with KEDA, RabbitMQ and .NET Core\",\"datePublished\":\"2019-06-02T19:24:49+00:00\",\"dateModified\":\"2019-06-02T19:32:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/\"},\"wordCount\":2567,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"image\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/keda-kubernetes.jpg\",\"keywords\":[\".net core\",\"autoscaling\",\"hpa\",\"keda\",\"kubernetes\",\"RabbitMQ\"],\"articleSection\":[\".NET Core\",\"Architectural\",\"Containerizing\",\"Microservices\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/\",\"name\":\"Kubernetes-based Event Driven Autoscaling with KEDA, RabbitMQ and .NET Core - G\u00f6khan G\u00f6kalp\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/keda-kubernetes.jpg\",\"datePublished\":\"2019-06-02T19:24:49+00:00\",\"dateModified\":\"2019-06-02T19:32:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/#primaryimage\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/keda-kubernetes.jpg\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/keda-kubernetes.jpg\",\"width\":842,\"height\":327},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubernetes-based Event Driven Autoscaling with KEDA, RabbitMQ and .NET Core\"}]},{\"@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":"Kubernetes-based Event Driven Autoscaling with KEDA, RabbitMQ and .NET Core - 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\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/","og_locale":"tr_TR","og_type":"article","og_title":"Kubernetes-based Event Driven Autoscaling with KEDA, RabbitMQ and .NET Core - G\u00f6khan G\u00f6kalp","og_url":"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/","og_site_name":"G\u00f6khan G\u00f6kalp","article_published_time":"2019-06-02T19:24:49+00:00","article_modified_time":"2019-06-02T19:32:42+00:00","og_image":[{"width":842,"height":327,"url":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/06\/keda-kubernetes.jpg","type":"image\/jpeg"}],"author":"G\u00f6khan G\u00f6kalp","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"G\u00f6khan G\u00f6kalp","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/#article","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/"},"author":{"name":"G\u00f6khan G\u00f6kalp","@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"headline":"Kubernetes-based Event Driven Autoscaling with KEDA, RabbitMQ and .NET Core","datePublished":"2019-06-02T19:24:49+00:00","dateModified":"2019-06-02T19:32:42+00:00","mainEntityOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/"},"wordCount":2567,"commentCount":3,"publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"image":{"@id":"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/#primaryimage"},"thumbnailUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/06\/keda-kubernetes.jpg","keywords":[".net core","autoscaling","hpa","keda","kubernetes","RabbitMQ"],"articleSection":[".NET Core","Architectural","Containerizing","Microservices"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/","url":"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/","name":"Kubernetes-based Event Driven Autoscaling with KEDA, RabbitMQ and .NET Core - G\u00f6khan G\u00f6kalp","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/#primaryimage"},"image":{"@id":"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/#primaryimage"},"thumbnailUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/06\/keda-kubernetes.jpg","datePublished":"2019-06-02T19:24:49+00:00","dateModified":"2019-06-02T19:32:42+00:00","breadcrumb":{"@id":"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/#primaryimage","url":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/06\/keda-kubernetes.jpg","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2019\/06\/keda-kubernetes.jpg","width":842,"height":327},{"@type":"BreadcrumbList","@id":"https:\/\/gokhan-gokalp.com\/kubernetes-based-event-driven-autoscaling-with-keda-rabbitmq-and-net-core\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gokhan-gokalp.com\/"},{"@type":"ListItem","position":2,"name":"Kubernetes-based Event Driven Autoscaling with KEDA, RabbitMQ and .NET Core"}]},{"@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\/2732","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=2732"}],"version-history":[{"count":16,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/2732\/revisions"}],"predecessor-version":[{"id":2756,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/2732\/revisions\/2756"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media\/2751"}],"wp:attachment":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media?parent=2732"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/categories?post=2732"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/tags?post=2732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}