{"id":73065,"date":"2020-03-06T20:42:13","date_gmt":"2020-03-06T17:42:13","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings"},"modified":"2020-03-06T20:42:13","modified_gmt":"2020-03-06T17:42:13","slug":"rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings","title":{"rendered":"RabbitMQ. Pjesa 3. Duke u marr\u00eb me Queues dhe Bindings","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Tret\u00eb<\/code> (tret\u00eb) \u2014 struktura e t\u00eb dh\u00ebnave n\u00eb disk ose n\u00eb memorje, e cila ruan lidhjet n\u00eb mesazhe dhe i jep kopjet e tyre <code>konsumator\u00ebt<\/code> (t\u00eb konsumator\u00ebve). <code>Tret\u00eb<\/code> \u00ebsht\u00eb nj\u00eb <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">Procesi Erlang<\/a><\/noindex> me gjendje (ku mund t\u00eb ruhen edhe vet\u00eb mesazhet). 1 mij\u00eb treda mund t\u00eb z\u00ebn\u00eb rreth 80Mb.<\/p>\n<p><\/p>\n<p><code>P\u00ebrgjatja<\/code> (p\u00ebrgjatje) \u2014 rregulli q\u00eb i thot\u00eb shk\u00ebmbyesit n\u00eb cilin nga tredat duhet t\u00eb shkojn\u00eb mesazhet.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">P\u00ebrmbajtja<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. Pjesa 1. Prezantimi. Erlang, AMQP dhe RPC<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">RabbitMQ. Pjesa 2. T\u00eb kuptojm\u00eb Exchanges<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/490960\/\">RabbitMQ. Pjesa 3. Duke u marr\u00eb me Queues dhe Bindings<\/a><\/noindex><\/li>\n<li>RabbitMQ. Pjesa 4. Po shqyrtojm\u00eb \u00e7far\u00eb jan\u00eb mesazhet dhe kornizat<\/li>\n<li>RabbitMQ. Pjesa 5. Performanca e publikimit dhe konsumit t\u00eb mesazheve<\/li>\n<li>RabbitMQ. Pjesa 6. P\u00ebrmbledhje e modulit Federation dhe Shovel<\/li>\n<li>RabbitMQ. Pjesa 7. Detajet mbi Connection dhe Channel<\/li>\n<li>RabbitMQ. Pjesa 8. RabbitMQ n\u00eb .NET<\/li>\n<li>RabbitMQ. Pjesa 9. Monitorimi<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"vremennye-ocheredi\"><em>Tredat e p\u00ebrkohshme<\/em><\/h4>\n<p><\/p>\n<p>N\u00ebse krijimi i tred\u00ebs ndodh me parametrin e vendosur <code>autoDelete<\/code>, at\u00ebher\u00eb kjo tret\u00eb fiton aft\u00ebsin\u00eb <strong>p\u00ebr t\u00eb fshir\u00eb automatikisht veten<\/strong>. K\u00ebto treda zakonisht krijohen n\u00eb momentin e lidhjes s\u00eb konsumatorit t\u00eb par\u00eb dhe fshihen n\u00eb momentin kur t\u00eb gjith\u00eb konsumator\u00ebt jan\u00eb shk\u00ebputur. <\/p>\n<p><\/p>\n<p>N\u00ebse krijimi i tred\u00ebs ndodh me parametrin e vendosur <code>ekskluziv<\/code>, at\u00ebher\u00eb kjo tret\u00eb <strong>lejon t\u00eb lidhet vet\u00ebm nj\u00eb konsumator<\/strong> dhe fshihet n\u00ebse mbyllet kanali. Derisa kanali t\u00eb mos mbyllet, klienti mund t\u00eb shk\u00ebputet\/lidhet, por vet\u00ebm brenda lidhjes s\u00eb nj\u00ebjt\u00eb. N\u00ebse parametrin <code>ekskluziv<\/code> i \u00ebsht\u00eb caktuar, at\u00ebher\u00eb parametri <code>autoDelete<\/code> nuk ka asnj\u00eb efekt.<\/p>\n<p><\/p>\n<p>Karakteristikat:<\/p>\n<p><\/p>\n<ul>\n<li>me nj\u00eb nd\u00ebrprerje t\u00eb p\u00ebrkohshme t\u00eb lidhjes do t\u00eb humbasim mesazhet q\u00eb ende nuk kan\u00eb arritur te konsumatori<\/li>\n<li>mund t\u00eb kapet fenomeni <code>binding churn<\/code>. Fenomeni ndodh kur numri i operacioneve t\u00eb krijimit\/fshirjes s\u00eb tredave dhe p\u00ebrgatitjeve arrin vlera shum\u00eb t\u00eb larta. N\u00eb modalitetin e grumbujve, ky rrjedh operacionesh do t\u00eb shp\u00ebrndahet n\u00eb t\u00eb gjith\u00eb nyjet dhe do t\u00eb krijoj\u00eb nj\u00eb ngarkes\u00eb t\u00eb madhe. Ky proces mund t\u00eb optimizohet p\u00ebrmes kontrollit t\u00eb numrit t\u00eb abonimeve<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"postoyannye-ocheredi\"><em>Tredat e q\u00ebndrueshme<\/em><\/h4>\n<p><\/p>\n<p>N\u00ebse krijimi i tred\u00ebs ndodh me parametrin e vendosur <code>durable<\/code>, at\u00ebher\u00eb kjo tret\u00eb <strong>ruajn\u00eb shtetin e tyre<\/strong> dhe rikthehen pas ri-ngarkimit t\u00eb serverit\/brokerit. Kjo tret\u00eb do t\u00eb ekzistoj\u00eb derisa t\u00eb thirret komanda <code>Queue.Delete<\/code>. <\/p>\n<p><\/p>\n<h4 id=\"highly-available-ocheredi\"><em>Tredat e Disponueshme n\u00eb Niveli t\u00eb Lart\u00eb<\/em><\/h4>\n<p><\/p>\n<p>Tredat HA k\u00ebrkojn\u00eb nj\u00eb mjedis t\u00eb grumbujve RabbitMQ. N\u00eb modalitetin e grumbujve, t\u00eb gjitha informacionet mbi shk\u00ebmbyesit, tredat, p\u00ebrgatitjet dhe konsumator\u00ebt do t\u00eb kopjohen n\u00eb t\u00eb gjith\u00eb nyjet.<\/p>\n<p><\/p>\n<p>Kur nj\u00eb mesazh publikohet n\u00eb ndonj\u00eb tret\u00eb HA, ai ruhet n\u00eb \u00e7do nyje q\u00eb i p\u00ebrket tredir HA. Pasi mesazhi konsumohet n\u00eb ndonj\u00eb nga nyjet, t\u00eb gjitha kopjet e k\u00ebtij mesazhi do t\u00eb fshihen n\u00eb nyjet e tjera. <\/p>\n<p><\/p>\n<p>Tredat HA mund t\u00eb shp\u00ebrndahen n\u00eb t\u00eb gjitha nyjet n\u00eb nj\u00eb grumbull t\u00eb caktuar ose vet\u00ebm n\u00eb individ\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. Duke u marr\u00eb me Queues dhe Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/46d560ab33e686ddf9adb0b18b4bb0b0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Karakteristikat:<\/p>\n<p><\/p>\n<ul>\n<li>p\u00ebrdorimi i tredis HA \u00e7on n\u00eb nd\u00ebshkime n\u00eb performanc\u00eb. Kur vendos nj\u00eb mesazh n\u00eb ndonj\u00eb tret\u00eb HA ose kur konsumon nj\u00eb mesazh nga nj\u00eb tret\u00eb HA, RabbitMQ duhet t\u00eb kryej\u00eb koordinimin n\u00eb t\u00eb gjitha nyjet (2-3 nyje zakonisht jan\u00eb t\u00eb mjaftueshme)<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"sozdanie-ocheredi\"><em>Krijimi i tret\u00ebs<\/em><\/h4>\n<p><\/p>\n<p>Krijimi i tret\u00ebs \u00ebsht\u00eb i mundur p\u00ebrmes sintaks\u00ebs <code>RPC<\/code> n\u00eb server. K\u00ebrkesa realizohet p\u00ebrmes metod\u00ebs <code>Queue.Declare<\/code>, e cila thirret me parametrat:<\/p>\n<p><\/p>\n<ul>\n<li>emri i tret\u00ebs<\/li>\n<li>parametra t\u00eb tjer\u00eb<\/li>\n<\/ul>\n<p><\/p>\n<p>Shembuj i krijimit t\u00eb tret\u00ebs p\u00ebrmes <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/dotnet.html\">RabbitMQ.Client<\/a><\/noindex>:<\/p>\n<p><\/p>\n<pre><code class=\"cs\">\/\/ ...\nchannel.QueueDeclare(\n    queue: &quot;my_queue&quot;,\n    durable: false,\n    exclusive: false,\n    autoDelete: false,\n    arguments: null\n);\n\/\/ ...<\/code><\/pre>\n<p><\/p>\n<ul>\n<li><code>rendit<\/code> \u2014 emri i tret\u00ebs q\u00eb duam t\u00eb krijojm\u00eb. Emri duhet t\u00eb jet\u00eb unik dhe nuk mund t\u00eb p\u00ebrputhet me emrin sistematik t\u00eb tret\u00ebs<\/li>\n<li><code>durable<\/code> \u2014 n\u00ebse true, at\u00ebher\u00eb tret\u00ebs do t\u00eb <strong>ruaj\u00eb shtetin e tij<\/strong> dhe rikthehet pas ri-ngarkimit t\u00eb serverit\/brokerit<\/li>\n<li><code>ekskluziv<\/code> \u2014 n\u00ebse true, at\u00ebher\u00eb tret\u00ebs do t\u00eb lejoj\u00eb t\u00eb lidhet vet\u00ebm nj\u00eb konsumator<\/li>\n<li><code>autoDelete<\/code> \u2014 n\u00ebse true, at\u00ebher\u00eb tret\u00ebsi fiton aft\u00ebsin\u00eb <strong>p\u00ebr t\u00eb fshir\u00eb automatikisht veten<\/strong><\/li>\n<li><code>argumente<\/code> \u2014 argumente opsionale. M\u00eb posht\u00eb do t\u00eb diskutojm\u00eb m\u00eb shum\u00eb.<\/li>\n<\/ul>\n<p><\/p>\n<h5 id=\"arguments\"><em>argumente<\/em><\/h5>\n<p><\/p>\n<ul>\n<li><code>x-message-ttl<\/code>(<code>x-message-time-to-live<\/code>) \u2014 lejon t\u00eb vendoset koha e skadimit t\u00eb mesazhit n\u00eb milisekonda. N\u00ebse krijimi i tret\u00ebs ndodh me nj\u00eb vler\u00eb t\u00eb caktuar t\u00eb argumentit <code>x-message-ttl<\/code>, at\u00ebher\u00eb kjo tret\u00eb do t\u00eb <strong>fshij\u00eb automatikisht mesazhet, t\u00eb cilat kan\u00eb kaluar afatin e skadimit<\/strong>. Vendosja e vler\u00ebs s\u00eb argumentit <code>x-message-ttl<\/code> vendos maksimumin e mosh\u00ebs p\u00ebr t\u00eb gjitha mesazhet n\u00eb k\u00ebt\u00eb tret\u00eb. Krijimi i k\u00ebtij lloji t\u00eb tret\u00ebs <strong>lejon parandalimin e marrjes s\u00eb informacionit t\u00eb p\u00ebrparuar<\/strong>. Kjo mund t\u00eb p\u00ebrdoret n\u00eb sistemet e koh\u00ebs reale. N\u00ebse tret\u00ebsit p\u00ebr t\u00eb cilin \u00ebsht\u00eb caktuar shk\u00ebmbyes p\u00ebr mesazhet e refuzuara vendosim vler\u00ebn e argumentit <code>x-message-ttl<\/code>, at\u00ebher\u00eb mesazhet e refuzuara n\u00eb k\u00ebt\u00eb tret\u00eb <strong>do t\u00eb ken\u00eb nj\u00eb koh\u00eb t\u00eb jet\u00ebs<\/strong>.<\/li>\n<li><code>x-expires<\/code> \u2014 vendos vler\u00ebn n\u00eb milisekonda, pas s\u00eb cil\u00ebs ndodh fshirja e tret\u00ebs. Tret\u00ebsi mund t\u00eb harxhoj\u00eb afatin e tij vet\u00ebm n\u00ebse nuk ka asnj\u00eb abonues. N\u00ebse ka abonues, ai do t\u00eb jet\u00eb n\u00eb gjendje t\u00eb fshihet automatikisht vet\u00ebm kur t\u00eb gjith\u00eb abonuesit th\u00ebrrasin <code>Basic.Cancel<\/code> ose shk\u00ebputen. Afati i jet\u00ebs s\u00eb tret\u00ebs mund t\u00eb p\u00ebrfundoj\u00eb vet\u00ebm n\u00ebse nuk ka pasur k\u00ebrkesa p\u00ebr t\u00eb <code>Basic.Get<\/code>. P\u00ebrndryshe, vlera aktuale e vendosjes s\u00eb koh\u00ebs s\u00eb jet\u00ebs zhb\u00ebhet, dhe tret\u00ebsi nuk do t\u00eb fshihet automatikisht m\u00eb. Po ashtu <strong>nuk ka garanci se sa shpejt ndodh fshirja e tret\u00ebs pas skadimit t\u00eb tij<\/strong>.<\/li>\n<li><code>x-max-length<\/code> \u2014 vendos numrin maksimal t\u00eb mesazheve n\u00eb tret\u00ebs. N\u00ebse numri i mesazheve n\u00eb tret\u00ebs fillon t\u00eb kaloj\u00eb numrin maksimal, at\u00ebher\u00eb do t\u00eb fshihen t\u00eb parat m\u00eb t\u00eb vjetra<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. Duke u marr\u00eb me Queues dhe Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/738f23dcfdd173a66be619032b46c5cc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li><code>x-max-lenght-bytes<\/code> \u2014 p\u00ebrcakton madh\u00ebsin\u00eb maksimale t\u00eb lejuar p\u00ebr ngarkesat e mesazheve n\u00eb radh\u00eb. Kur kapet vlera e caktuar (ndodhi mbushja e radh\u00ebs gjat\u00eb publikimit t\u00eb mesazhit), mesazhet m\u00eb t\u00eb vjetra do t\u00eb fillojn\u00eb t\u00eb fshihen.<\/li>\n<li><code>x-overflow<\/code> \u2014 ky argument p\u00ebrdoret p\u00ebr t\u00eb konfiguruar sjelljen si rezultat i mbushjes s\u00eb radh\u00ebs. Dy vlera jan\u00eb t\u00eb disponueshme: <code>drop-head<\/code> (vlera e paracaktuar) dhe <code>reject-publish<\/code>. N\u00ebse zgjidhet <code>drop-head<\/code>, mesazhet m\u00eb t\u00eb vjetra do t\u00eb fshihen. N\u00ebse zgjidhet <code>reject-publish<\/code>, pranimi i mesazheve do t\u00eb pezullohet.<\/li>\n<li><code>x-dead-letter-exchange<\/code> \u2014 p\u00ebrcakton exchange-in n\u00eb t\u00eb cilin d\u00ebrgohen mesazhet e refuzuara q\u00eb nuk jan\u00eb rihyr\u00eb n\u00eb radh\u00eb.<\/li>\n<li><code>x-dead-letter-routing-key<\/code> \u2014 p\u00ebrcakton nj\u00eb \u00e7el\u00ebs rrug\u00ebzimi t\u00eb qen\u00ebsish\u00ebm p\u00ebr mesazhet e refuzuara.<\/li>\n<li><code>x-max-priority<\/code> \u2014 lejon renditjen sipas prioriteteve n\u00eb radh\u00eb me vler\u00ebn maksimale t\u00eb prioriteteve 255 (RabbitMQ versionet 3.5.0 e m\u00eb lart). Numri tregon prioritete maksimale q\u00eb do t\u00eb mb\u00ebshtetet nga radha. N\u00ebse argumenti nuk \u00ebsht\u00eb caktuar, radh\u00eb nuk do t\u00eb mb\u00ebshtes\u00eb prioritetet e mesazheve.<\/li>\n<li><code>x-queue-mode<\/code> \u2014 lejon kalimin e radh\u00ebs n\u00eb <strong>modin e mbajtur<\/strong>. N\u00eb k\u00ebt\u00eb mod, sa m\u00eb shum\u00eb mesazhe t\u00eb jet\u00eb e mundur do t\u00eb ruhet n\u00eb disk. P\u00ebrdorimi i kujtes\u00ebs do t\u00eb jet\u00eb minimal. N\u00ebse nuk caktohet, radh\u00eb do t\u00eb ruaj\u00eb mesazhet n\u00eb kujtes\u00eb p\u00ebr t\u00eb d\u00ebrguar mesazhet sa m\u00eb shpejt t\u00eb jet\u00eb e mundur.<\/li>\n<li><code>x-queue-master-locator<\/code> \u2014 n\u00ebse kemi nj\u00eb kluster, mund t\u00eb caktohet master queue.<\/li>\n<li><code>x-ha-policy<\/code> \u2014 p\u00ebrdoret gjat\u00eb krijimit t\u00eb radh\u00ebve HA dhe p\u00ebrcakton si do t\u00eb shp\u00ebrndahet mesazhi p\u00ebrmes nyjeve. N\u00ebse caktohet vlera <code>all<\/code>, mesazhi do t\u00eb ruhet n\u00eb t\u00eb gjitha nyjet. N\u00ebse caktohet vlera <code>nodes<\/code>, mesazhi do t\u00eb ruhet n\u00eb nyje t\u00eb caktuara t\u00eb klustrit.<\/li>\n<li><code>x-ha-nodes<\/code> \u2014 p\u00ebrcakton nyjet n\u00eb t\u00eb cilat do t\u00eb referohet nj\u00eb radh\u00eb. <code>HA<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. Duke u marr\u00eb me Queues dhe Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/a8f660b6c0a43626e4025cf7769a4425.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse krijimi i radh\u00ebs <strong>\u00ebsht\u00eb e mundur<\/strong>, at\u00ebher\u00eb serveri do t\u00eb d\u00ebrgoj\u00eb nj\u00eb p\u00ebrgjigje sinkrone te klienti <code>RPC<\/code> p\u00ebrgjigje <code>Queue.DeclareOk<\/code>. N\u00ebse krijimi i radh\u00ebs <strong>e pamundur<\/strong> (ndodhi nj\u00eb refuzim n\u00eb k\u00ebrkes\u00eb <code>Queue.Declare<\/code>), at\u00ebher\u00eb <strong>kanali do t\u00eb mbyllet<\/strong> nga serveri me an\u00eb t\u00eb komand\u00ebs <code>Channel.Close<\/code> dhe klienti do t\u00eb marr\u00eb nj\u00eb p\u00ebrjashtim <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/releases\/rabbitmq-dotnet-client\/v3.6.10\/rabbitmq-dotnet-client-3.6.10-client-htmldoc\/html\/type-RabbitMQ.Client.Exceptions.OperationInterruptedException.html\">OperationInterruptedException<\/a><\/noindex>, i cili do t\u00eb p\u00ebrmbaj\u00eb kodin e gabimit dhe p\u00ebrshkrimin e tij. <\/p>\n<p><\/p>\n<p><strong>Thirrja e s\u00ebrishme<\/strong> <code>Queue.Declare<\/code> <strong>me parametra t\u00eb ngjash\u00ebm<\/strong> do t\u00eb kthej\u00eb informacion t\u00eb dobish\u00ebm mbi k\u00ebt\u00eb radh\u00eb. P\u00ebr shembull, numri i p\u00ebrgjithsh\u00ebm i mesazheve q\u00eb presin n\u00eb k\u00ebt\u00eb radh\u00eb dhe numri i p\u00ebrgjithsh\u00ebm i konsumator\u00ebve t\u00eb regjistruar p\u00ebr t\u00eb. <\/p>\n<p><\/p>\n<p>Thirrja <code>Queue.Declare<\/code> n\u00ebn kredencialet e p\u00ebrdoruesit q\u00eb nuk jan\u00eb caktuar t\u00eb drejtat e nevojshme <strong>do t\u00eb mbyll\u00eb kanal<\/strong> me an\u00eb t\u00eb komand\u00ebs <code>Channel.Close<\/code> dhe klienti do t\u00eb marr\u00eb nj\u00eb p\u00ebrjashtim <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/releases\/rabbitmq-dotnet-client\/v3.6.10\/rabbitmq-dotnet-client-3.6.10-client-htmldoc\/html\/type-RabbitMQ.Client.Exceptions.OperationInterruptedException.html\">OperationInterruptedException<\/a><\/noindex>, e cila do t\u00eb p\u00ebrmbaj\u00eb kodin e gabimit <noindex><a rel=\"nofollow\" href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/HTTP\/Status\/403\">403<\/a><\/noindex> dhe p\u00ebrshkrimin e tij.<\/p>\n<p><\/p>\n<p>Pasi radh\u00eb t\u00eb qendroj\u00eb t\u00eb pakt\u00ebn p\u00ebr 10 sekonda, ajo <strong>do t\u00eb kaloj\u00eb n\u00eb gjendjen e fjetjes<\/strong>, duke thirrur GC n\u00eb radh\u00eb, q\u00eb do t\u00eb \u00e7oj\u00eb n\u00eb nj\u00eb reduktim t\u00eb konsideruesh\u00ebm t\u00eb memories s\u00eb nevojshme p\u00ebr k\u00ebt\u00eb radh\u00eb.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-queue-cherez-graficheskiy-interfeys\"><em>Krijimi i Queue p\u00ebrmes nd\u00ebrfaq\u00ebs\u00ebs grafike<\/em><\/h4>\n<p><\/p>\n<p>Hyr n\u00eb panelet e administratorit <code>RabbitMQ<\/code> si p\u00ebrdoruesi <code>guest<\/code> (emri i p\u00ebrdoruesit: <code>guest<\/code> dhe fjal\u00ebkalimi: <code>guest<\/code>). Vini re se p\u00ebrdoruesi <code>guest<\/code> mund t\u00eb lidhet vet\u00ebm nga hosti lokal. Tani kalojm\u00eb tek tab-i <code>Queues<\/code> dhe klikojm\u00eb n\u00eb <code>Shto nj\u00eb radh\u00eb t\u00eb re<\/code>. Plot\u00ebsoni pronat:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. Duke u marr\u00eb me Queues dhe Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/ea77a406ad16f0871c7197e96a66818f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pasi t\u00eb shkruajm\u00eb t\u00eb gjitha t\u00eb dh\u00ebnat e nevojshme dhe t\u00eb klikojm\u00eb n\u00eb <code>Shto radh\u00eb<\/code>, radh\u00eb do t\u00eb shfaqet n\u00eb list\u00ebn e p\u00ebrgjithshme.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. Duke u marr\u00eb me Queues dhe Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/8342e044a0d6c0a035a2c9f646035cad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Klikimi mbi emrin e radh\u00ebs do t\u00eb tregoj\u00eb informacionin e saj t\u00eb detajuar. K\u00ebtu mund t\u00eb konfigurojm\u00eb lidhjen midis shk\u00ebmbimit dhe radh\u00ebs, t\u00eb shohim list\u00ebn <code>konsumator\u00ebt<\/code>, publikojm\u00eb\/marrim mesazhe, fshijm\u00eb radh\u00ebn dhe shohim statistikat.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-binding\"><em>Krijimi i Binding<\/em><\/h4>\n<p><\/p>\n<p>Krijimi i lidhjes ndodh p\u00ebrmes <code>RPC<\/code> n\u00eb server. K\u00ebrkesa realizohet p\u00ebrmes metod\u00ebs <code>Queue.Bind<\/code>, e cila thirret me parametrat:<\/p>\n<p><\/p>\n<ul>\n<li>emri i tret\u00ebs<\/li>\n<li>emri i shk\u00ebmbimit<\/li>\n<li>parametra t\u00eb tjer\u00eb<\/li>\n<\/ul>\n<p><\/p>\n<p>Shembuj i krijimit t\u00eb lidhjes me an\u00eb t\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/dotnet.html\">RabbitMQ.Client<\/a><\/noindex>:<\/p>\n<p><\/p>\n<pre><code class=\"cs\">\/\/...\nchannel.QueueBind(\n    queue: queueName,\n    exchange: &quot;my_exchange&quot;,\n    routingKey: &quot;my_key&quot;,\n    arguments: null\n);\n\/\/...<\/code><\/pre>\n<p><\/p>\n<ul>\n<li><code>rendit<\/code> \u2014 emri i radh\u00ebs<\/li>\n<li><code>exchange<\/code> \u2014 emri i shk\u00ebmbimit<\/li>\n<li><code>routingKey<\/code> \u2014 \u00e7el\u00ebsi i rrug\u00ebs<\/li>\n<li><code>argumente<\/code> \u2014 argumente t\u00eb opsionit<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. Duke u marr\u00eb me Queues dhe Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/9123186c94a822309b679f26c2e511ea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse krijimi i lidhjes <strong>\u00ebsht\u00eb e mundur<\/strong>, at\u00ebher\u00eb serveri do t\u00eb d\u00ebrgoj\u00eb nj\u00eb p\u00ebrgjigje sinkrone te klienti <code>RPC<\/code> p\u00ebrgjigje <code>Queue.BindOk<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-binding-cherez-graficheskiy-interfeys\"><em>Krijimi i Binding p\u00ebrmes nd\u00ebrfaq\u00ebs\u00ebs grafike<\/em><\/h4>\n<p><\/p>\n<p>Hyr n\u00eb panelet e administratorit <code>RabbitMQ<\/code> si p\u00ebrdoruesi <code>guest<\/code> (emri i p\u00ebrdoruesit: <code>guest<\/code> dhe fjal\u00ebkalimi: <code>guest<\/code>). Vini re se p\u00ebrdoruesi <code>guest<\/code> mund t\u00eb lidhet vet\u00ebm nga hosti lokal. Tani kalojm\u00eb tek tab-i <code>Queues<\/code> dhe klikoni mbi radh\u00ebn <code>my_queue<\/code>. Plot\u00ebsojm\u00eb fushat e seksionit <code>bindings<\/code>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. Duke u marr\u00eb me Queues dhe Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/7db6b42a4f29a1860aabe54ade0b6833.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pasi t\u00eb shkruajm\u00eb t\u00eb gjitha t\u00eb dh\u00ebnat e nevojshme dhe t\u00eb klikojm\u00eb n\u00eb <code>Bind<\/code>, lidhja do t\u00eb shfaqet n\u00eb list\u00ebn e p\u00ebrgjithshme:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. Duke u marr\u00eb me Queues dhe Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/499eda8e8cb061e6feb75c471eb64b92.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"code\">Kodi<\/h3>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb seksion do ta p\u00ebrshkruajm\u00eb radh\u00ebn dhe lidhjen me kod n\u00eb C#, sikurse po do t\u00eb na duhej t\u00eb zhvillonim nj\u00eb bibliotek\u00eb. Kjo ndoshta do t\u00eb jet\u00eb e dobishme p\u00ebr perceptimin.<\/p>\n<p><\/p>\n<pre><code class=\"cs\">public interface IQueue\n    {        \n        string Name { get; }\n\n        \/\/ <summary>\n        \/\/     N\u00ebse caktuat true, at\u00ebher\u00eb radha do t\u00eb jet\u00eb e p\u00ebrhershme. \n        \/\/     Ajo do t\u00eb ruhet n\u00eb disk dhe do t\u00eb mund \n        \/\/     t\u00eb p\u00ebrballoj\u00eb rinisjen e serverit\/brokerit. \n        \/\/     N\u00ebse vlera \u00ebsht\u00eb false, at\u00ebher\u00eb radha \u00ebsht\u00eb e p\u00ebrkohshme dhe do t\u00eb fshihet, \n        \/\/     kur serveri\/brokeri t\u00eb riniset\n        \/\/ <\/summary>\n        bool IsDurable { get; }\n\n        \/\/ <summary>\n        \/\/     N\u00ebse vlera \u00ebsht\u00eb e v\u00ebrtet\u00eb, at\u00ebher\u00eb \n        \/\/     kjo radh\u00eb do t\u00eb lejoj\u00eb lidhjen \n        \/\/     vet\u00ebm me nj\u00eb konsumator\n        \/\/ <\/summary>\n        bool IsExclusive { get; }\n\n        \/\/ <summary>\n        \/\/     Fshirja automatike. \n        \/\/     Radh\u00eb do t\u00eb fshihet, kur t\u00eb gjith\u00eb klient\u00ebt t\u00eb shk\u00ebputen.\n        \/\/ <\/summary>\n        bool IsAutoDelete { get; }\n\n        \/\/ <summary>\n        \/\/     Argumente t\u00eb opsionalit\n        \/\/ <\/summary>\n        IDictionary Arguments { get; }\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">klasa publike Queue : IQueue\n    {\n        publike Queue(\n             string em\u00ebr, \n             bool \u00ebsht\u00ebQ\u00ebndruesh\u00ebm = true, \n             bool \u00ebsht\u00ebEkskluziv = false, \n             bool \u00ebsht\u00ebAutoFshirje = false, \n             IDictionary argumente = null)\n        {\n            Emri = em\u00ebr ??\n                hedh nj\u00eb ArgumentNullException(em\u00ebr, $\"{em\u00ebr} nuk duhet t\u00eb jet\u00eb null\");\n\n            \u00cbsht\u00ebQ\u00ebndruesh\u00ebm = \u00ebsht\u00ebQ\u00ebndruesh\u00ebm;\n            \u00cbsht\u00ebEkskluziv = \u00ebsht\u00ebEkskluziv;\n            \u00cbsht\u00ebAutoFshirje = \u00ebsht\u00ebAutoFshirje;\n            Argumentet = argumente ?? new Dictionary();\n        }\n\n        publike string Emri { merr; }\n        publike bool \u00cbsht\u00ebQ\u00ebndruesh\u00ebm { merr; }\n        publike bool \u00cbsht\u00ebEkskluziv { merr; }\n        publike bool \u00cbsht\u00ebAutoFshirje { merr; }\n        publike IDictionary Argumentet { merr; }\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">klasa publike statike QueueMode\n    {       \n        publike const string Default = \"default\";\n        \/\/ \\<p>\n        \/\/     Re\u017eimi i lenvish\u00ebm. Re\u017eimi i lenvish\u00ebm do t\u00eb detyroj\u00eb t\u00eb ruaj\u00eb \n        \/\/     sa m\u00eb shum\u00eb mesazhe n\u00eb disk, p\u00ebr t\u00eb reduktuar \n        \/\/     p\u00ebrdorimin e memorie s\u00eb operativ\u00eb\n        \/\/ \\\n        publike const string Lazy = \"lazy\";\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">public interface IBinding\n    {\n        \/\/ <summary>\n        \/\/     Bursi q\u00eb do t\u00eb lidhet me lidhjen\n        \/\/ <\/summary>\n        IExchange Exchange { get; }\n\n        \/\/ <summary>\n        \/\/     \u00c7el\u00ebsi i rrug\u00ebs\n        \/\/ <\/summary>\n        string RoutingKey { get; }\n\n        \/\/ <summary>\n        \/\/     Argumente opsionale\n        \/\/ <\/summary>\n        IDictionary Arguments { get; }\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">public class Binding : IBinding\n    {\n        public Binding(\n             IExchange exchange, \n             string routingKey, \n             IDictionary arguments)\n        {\n            Exchange = exchange;\n            RoutingKey = routingKey;\n            Arguments = arguments;\n        }\n\n        public IExchange Exchange { get; }\n        public string RoutingKey { get; }\n        public IDictionary Arguments { get; }\n    }<\/code><\/pre>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/490960\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Queue (\u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u0438\u0445 \u043a\u043e\u043f\u0438\u0438 consumers (\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c). Queue \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 Erlang-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c (\u0433\u0434\u0435 \u043c\u043e\u0433\u0443\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0441\u0430\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f). 1 \u0442\u044b\u0441\u044f\u0447\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 80Mb. Binding (\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430) \u2014 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a\u0443 \u0432 \u043a\u0430\u043a\u0443\u044e \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":73066,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-73065","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Queue (\u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u0438\u0445 \u043a\u043e\u043f\u0438\u0438 consumers (\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c).\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47RabbitMQ. \u0427\u0430\u0441\u0442\u044c 3. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Queues \u0438 Bindings | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Queue (\u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u0438\u0445 \u043a\u043e\u043f\u0438\u0438 consumers (\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c).\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-06T17:42:13+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-06T17:42:13+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47RabbitMQ. Pjesa 3. Duke u marr\u00eb me Queues dhe Bindings | ProHoster","description":"Queue (rreshti) \u2014 nj\u00eb struktur\u00eb t\u00eb dh\u00ebnash n\u00eb disk ose n\u00eb memorie, e cila ruan lidhjet me mesazhet dhe u jep kopje atyre consumator\u00ebve.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47RabbitMQ. \u0427\u0430\u0441\u0442\u044c 3. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Queues \u0438 Bindings | ProHoster","og:description":"Queue (\u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u0438\u0445 \u043a\u043e\u043f\u0438\u0438 consumers (\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c).","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-06T17:42:13+00:00","article:modified_time":"2020-03-06T17:42:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"73065","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:41:06","updated":"2022-09-30 05:07:23","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/73065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=73065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/73065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/73066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=73065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=73065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=73065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}