{"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. T\u00eb kuptojm\u00eb Queues dhe Bindings","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Queue<\/code> (radh\u00eb) \u2014 nj\u00eb struktur\u00eb t\u00eb dh\u00ebnash n\u00eb disk ose n\u00eb memorien operative q\u00eb ruan referenca ndaj mesazheve dhe u dor\u00ebzon kopjet e tyre <code>consumers<\/code> (konsumator\u00ebve). <code>Queue<\/code> p\u00ebrfaq\u00ebson <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">nj\u00eb proces Erlang<\/a><\/noindex> me gjendje (ku mund t\u00eb ruhen n\u00eb cache edhe vet\u00eb mesazhet). 1 mij\u00eb radh\u00eb mund t\u00eb z\u00ebn\u00eb rreth 80 Mb.<\/p>\n<p><\/p>\n<p><code>Binding<\/code> (lidhje) \u2014 nj\u00eb rregull q\u00eb i tregon exchange-it se n\u00eb cil\u00ebn nga radh\u00ebt duhet t\u00eb d\u00ebrgohen 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. Introduction. 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. T\u00eb kuptojm\u00eb Queues dhe Bindings<\/a><\/noindex><\/li>\n<li>RabbitMQ. Pjesa 4. T\u00eb kuptojm\u00eb \u00e7far\u00eb jan\u00eb mesazhet dhe frames<\/li>\n<li>RabbitMQ. Pjesa 5. Performanca e publikimit dhe konsumimit t\u00eb mesazheve<\/li>\n<li>RabbitMQ. Pjesa 6. Pasqyr\u00eb e moduleve Federation dhe Shovel<\/li>\n<li>RabbitMQ. Pjesa 7. N\u00eb detaje p\u00ebr Connection dhe Chanel<\/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>Radh\u00eb t\u00eb p\u00ebrkohshme<\/em><\/h4>\n<p><\/p>\n<p>N\u00ebse krijimi i radh\u00ebs b\u00ebhet me parametrin <code>autoDelete<\/code>, at\u00ebher\u00eb kjo radh\u00eb fiton aft\u00ebsin\u00eb <strong>t\u00eb fshij\u00eb veten automatikisht<\/strong>. Radh\u00eb t\u00eb tilla zakonisht krijohen n\u00eb momentin e lidhjes s\u00eb klientit t\u00eb par\u00eb dhe fshihen kur t\u00eb gjith\u00eb klient\u00ebt jan\u00eb shk\u00ebputur. <\/p>\n<p><\/p>\n<p>N\u00ebse krijimi i radh\u00ebs b\u00ebhet me parametrin <code>exclusive<\/code>, at\u00ebher\u00eb kjo radh\u00eb <strong>lejon lidhjen vet\u00ebm t\u00eb nj\u00eb konsumatori<\/strong> dhe fshihet n\u00ebse kanali mbyllet. Derisa kanali t\u00eb mbyllet, klienti mund t\u00eb shk\u00ebputet\/lidhet s\u00ebrish, por vet\u00ebm brenda t\u00eb nj\u00ebjtit connection. N\u00ebse parametri <code>exclusive<\/code> \u00ebsht\u00eb i vendosur, 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>n\u00eb rast t\u00eb nj\u00eb nd\u00ebrprerjeje afatshkurt\u00ebr t\u00eb lidhjes, do t\u00eb humbasim mesazhet q\u00eb ende nuk kan\u00eb arritur te konsumatori<\/li>\n<li>mund t\u00eb haset fenomeni <code>binding churn<\/code>. Fenomeni shfaqet kur numri i operacioneve p\u00ebr krijimin\/fshirjen e radh\u00ebve dhe lidhjeve arrin vlera shum\u00eb t\u00eb larta. N\u00eb modalitetin cluster, nj\u00eb rrjedh\u00eb e till\u00eb operacionesh do t\u00eb p\u00ebrhapet n\u00eb t\u00eb gjitha nyjat dhe do t\u00eb krijoj\u00eb ngarkes\u00eb t\u00eb madhe. Ky proces mund t\u00eb optimizohet duke kontrolluar numrin e abonimeve<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"postoyannye-ocheredi\"><em>Radh\u00eb t\u00eb p\u00ebrhershme<\/em><\/h4>\n<p><\/p>\n<p>N\u00ebse krijimi i radh\u00ebs b\u00ebhet me parametrin <code>durable<\/code>, at\u00ebher\u00eb kjo radh\u00eb <strong>ruan gjendjen e saj<\/strong> dhe rikthehet pas rinisjes s\u00eb serverit\/brokerit. Kjo radh\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>Radh\u00eb Highly Available<\/em><\/h4>\n<p><\/p>\n<p>Radh\u00ebt HA k\u00ebrkojn\u00eb nj\u00eb mjedis cluster RabbitMQ. N\u00eb modalitetin cluster, i gjith\u00eb informacioni p\u00ebr exchanges, radh\u00ebt, lidhjet dhe konsumator\u00ebt do t\u00eb kopjohet n\u00eb t\u00eb gjitha nyjat.<\/p>\n<p><\/p>\n<p>Kur nj\u00eb mesazh publikohet n\u00eb nj\u00eb radh\u00eb HA, ai ruhet n\u00eb \u00e7do nyje q\u00eb i p\u00ebrket asaj radhe HA. Pasi mesazhi t\u00eb konsumohet n\u00eb nj\u00ebr\u00ebn nga nyjet, t\u00eb gjitha kopjet e tij do t\u00eb fshihen nga nyjet e tjera. <\/p>\n<p><\/p>\n<p>Radh\u00ebt HA mund t\u00eb shtrihen n\u00eb t\u00eb gjitha nyjet e nj\u00eb klasteri ose vet\u00ebm n\u00eb nyje t\u00eb ve\u00e7anta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. T\u00eb kuptojm\u00eb 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 radh\u00ebve HA sjell penalizime n\u00eb performanc\u00eb. Kur nj\u00eb mesazh d\u00ebrgohet n\u00eb nj\u00eb radh\u00eb HA ose konsumohet prej saj, RabbitMQ duhet t\u00eb kryej\u00eb koordinim mes t\u00eb gjitha nyjeve (zakonisht mjaftojn\u00eb 2-3 nyje).<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"sozdanie-ocheredi\"><em>Krijimi i radh\u00ebs<\/em><\/h4>\n<p><\/p>\n<p>Krijimi i radh\u00ebs kryhet p\u00ebrmes nj\u00eb <code>RPC<\/code> k\u00ebrkese sinkrone ndaj serverit. K\u00ebrkesa b\u00ebhet me metod\u00ebn <code>Queue.Declare<\/code>, e thirrur me parametrat:<\/p>\n<p><\/p>\n<ul>\n<li>emri i radh\u00ebs<\/li>\n<li>parametra t\u00eb tjer\u00eb<\/li>\n<\/ul>\n<p><\/p>\n<p>Shembull i krijimit t\u00eb nj\u00eb radhe me <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>queue<\/code> \u2014 emri i radh\u00ebs q\u00eb duam t\u00eb krijojm\u00eb. Emri duhet t\u00eb jet\u00eb unik dhe nuk mund t\u00eb p\u00ebrputhet me emrin sistemor t\u00eb radh\u00ebs<\/li>\n<li><code>durable<\/code> \u2014 n\u00ebse \u00ebsht\u00eb true, at\u00ebher\u00eb radha do ta <strong>ruaj\u00eb gjendjen e saj<\/strong> dhe do t\u00eb rikthehet pas rinisjes s\u00eb serverit\/brokerit<\/li>\n<li><code>exclusive<\/code> \u2014 n\u00ebse \u00ebsht\u00eb true, at\u00ebher\u00eb radha do t\u00eb lejoj\u00eb lidhjen vet\u00ebm t\u00eb nj\u00eb konsumatori<\/li>\n<li><code>autoDelete<\/code> \u2014 n\u00ebse \u00ebsht\u00eb true, at\u00ebher\u00eb radha fiton aft\u00ebsin\u00eb <strong>t\u00eb fshij\u00eb veten automatikisht<\/strong><\/li>\n<li><code>arguments<\/code> \u2014 argumente opsionale. M\u00eb posht\u00eb do t\u2019i shqyrtojm\u00eb m\u00eb n\u00eb detaje.<\/li>\n<\/ul>\n<p><\/p>\n<h5 id=\"arguments\"><em>arguments<\/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 caktohet koha e skadimit t\u00eb mesazhit n\u00eb milisekonda. N\u00ebse radha krijohet me vler\u00ebn e argumentit <code>x-message-ttl<\/code>, at\u00ebher\u00eb nj\u00eb radh\u00eb e till\u00eb do t\u00eb <strong>p\u00ebrjashtoj\u00eb automatikisht mesazhet t\u00eb cilave u ka skaduar afati<\/strong>. Vendosja e vler\u00ebs s\u00eb argumentit <code>x-message-ttl<\/code> p\u00ebrcakton mosh\u00ebn maksimale p\u00ebr t\u00eb gjitha mesazhet n\u00eb k\u00ebt\u00eb radh\u00eb. Krijimi i nj\u00eb radhe t\u00eb till\u00eb <strong>ndihmon n\u00eb parandalimin e marrjes s\u00eb informacionit t\u00eb vjet\u00ebruar<\/strong>. Kjo mund t\u00eb p\u00ebrdoret n\u00eb sistemet n\u00eb koh\u00eb reale. N\u00ebse p\u00ebr nj\u00eb radh\u00eb, p\u00ebr t\u00eb cil\u00ebn \u00ebsht\u00eb caktuar nj\u00eb shk\u00ebmbyes p\u00ebr mesazhet e refuzuara, vendoset vlera e argumentit <code>x-message-ttl<\/code>, at\u00ebher\u00eb mesazhet e refuzuara n\u00eb k\u00ebt\u00eb radh\u00eb <strong>do t\u00eb ken\u00eb afat jetese<\/strong>.<\/li>\n<li><code>x-expires<\/code> \u2014 p\u00ebrcakton vler\u00ebn n\u00eb milisekonda, pas skadimit t\u00eb s\u00eb cil\u00ebs radha fshihet. Radha mund t\u00eb shpenzoj\u00eb afatin e saj t\u00eb vlefshm\u00ebris\u00eb vet\u00ebm n\u00ebse nuk ka asnj\u00eb abonent. N\u00ebse me radh\u00ebn jan\u00eb t\u00eb lidhur abonent\u00eb, ajo mund t\u00eb fshihet automatikisht vet\u00ebm kur t\u00eb gjith\u00eb abonent\u00ebt t\u00eb th\u00ebrrasin <code>Basic.Cancel<\/code> ose t\u00eb shk\u00ebputen. Afati i jet\u00ebs s\u00eb radh\u00ebs mund t\u00eb p\u00ebrfundoj\u00eb vet\u00ebm n\u00ebse ndaj saj nuk ka pasur k\u00ebrkes\u00eb <code>Basic.Get<\/code>. P\u00ebrndryshe, vlera aktuale e cil\u00ebsimit t\u00eb afatit t\u00eb jet\u00ebs rivendoset dhe radha nuk do t\u00eb fshihet m\u00eb automatikisht. Gjithashtu, <strong>nuk ka garanci se sa shpejt do t\u00eb ndodh\u00eb fshirja e radh\u00ebs pas skadimit t\u00eb afatit t\u00eb saj t\u00eb jet\u00ebs<\/strong>.<\/li>\n<li><code>x-max-length<\/code> \u2014 p\u00ebrcakton numrin maksimal t\u00eb mesazheve n\u00eb radh\u00eb. N\u00ebse numri i mesazheve n\u00eb radh\u00eb fillon t\u00eb tejkaloj\u00eb numrin maksimal, do t\u00eb fillojn\u00eb t\u00eb fshihen m\u00eb t\u00eb vjetrat<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. T\u00eb kuptojm\u00eb 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 t\u00eb ngarkes\u00ebs s\u00eb dobishme t\u00eb mesazheve n\u00eb radh\u00eb. N\u00ebse tejkalohet vlera e caktuar (ndodh tejmbushja e radh\u00ebs gjat\u00eb publikimit t\u00eb mesazhit t\u00eb radh\u00ebs), 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 n\u00eb rast tejmbushjeje t\u00eb radh\u00ebs. Jan\u00eb t\u00eb disponueshme dy vlera: <code>drop-head<\/code> (vlera e parazgjedhur) dhe <code>reject-publish<\/code>. N\u00ebse zgjidhet <code>drop-head<\/code>, at\u00ebher\u00eb mesazhet m\u00eb t\u00eb vjetra do t\u00eb fshihen. N\u00ebse zgjidhet <code>reject-publish<\/code>, at\u00ebher\u00eb pranimi i mesazheve do t\u00eb pezullohet<\/li>\n<li><code>x-dead-letter-exchange<\/code> \u2014 p\u00ebrcakton exchange ku d\u00ebrgohen mesazhet e refuzuara q\u00eb nuk rivendosen p\u00ebrs\u00ebri n\u00eb radh\u00eb<\/li>\n<li><code>x-dead-letter-routing-key<\/code> \u2014 p\u00ebrcakton nj\u00eb \u00e7el\u00ebs rutimi opsional p\u00ebr mesazhet e refuzuara<\/li>\n<li><code>x-max-priority<\/code> \u2014 mund\u00ebson renditjen sipas prioriteteve n\u00eb radh\u00eb me vler\u00ebn maksimale t\u00eb prioritetit 255 (RabbitMQ versionet 3.5.0 e lart). Numri tregon prioritetin maksimal q\u00eb do t\u00eb mb\u00ebshtes\u00eb radha. N\u00ebse argumenti nuk \u00ebsht\u00eb vendosur, radha nuk do t\u00eb mb\u00ebshtes\u00eb prioritetin e mesazheve<\/li>\n<li><code>x-queue-mode<\/code> \u2014 lejon kalimin e radh\u00ebs n\u00eb <strong>modalitetin lazy<\/strong>. N\u00eb k\u00ebt\u00eb modalitet, sa m\u00eb shum\u00eb mesazhe t\u00eb jet\u00eb e mundur do t\u00eb ruhen n\u00eb disk. P\u00ebrdorimi i RAM do t\u00eb jet\u00eb minimal. N\u00ebse nuk \u00ebsht\u00eb vendosur, radha do t\u2019i ruaj\u00eb mesazhet n\u00eb memorie p\u00ebr t\u2019i dor\u00ebzuar ato 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 klaster, mund t\u00eb caktohet radha master<\/li>\n<li><code>x-ha-policy<\/code> \u2014 p\u00ebrdoret gjat\u00eb krijimit t\u00eb radh\u00ebve HA dhe p\u00ebrcakton se si mesazhi do t\u00eb shp\u00ebrndahet n\u00ebp\u00ebr nyje. N\u00ebse caktohet vlera <code>t\u00eb gjitha<\/code>, at\u00ebher\u00eb mesazhi do t\u00eb ruhet n\u00eb t\u00eb gjitha nyjet. N\u00ebse caktohet vlera <code>nodes<\/code>, at\u00ebher\u00eb mesazhi do t\u00eb ruhet n\u00eb nyje t\u00eb caktuara t\u00eb klasterit<\/li>\n<li><code>x-ha-nodes<\/code> \u2014 p\u00ebrcakton nyjet me t\u00eb cilat do t\u00eb lidhet nj\u00eb radh\u00eb e caktuar <code>HA<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. T\u00eb kuptojm\u00eb 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 i mundur<\/strong>, at\u00ebher\u00eb serveri do t'i d\u00ebrgoj\u00eb klientit nj\u00eb <code>RPC<\/code> p\u00ebrgjigje <code>Queue.DeclareOk<\/code>. N\u00ebse krijimi i radh\u00ebs <strong>nuk \u00ebsht\u00eb i mundur<\/strong> (k\u00ebrkesa u refuzua me <code>Queue.Declare<\/code>), at\u00ebher\u00eb <strong>kanali do t\u00eb mbyllet<\/strong> nga serveri me komand\u00ebn <code>Channel.Close<\/code> dhe klienti do t\u00eb marr\u00eb p\u00ebrjashtimin <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 p\u00ebrs\u00ebritur e<\/strong> <code>Queue.Declare<\/code> <strong>me t\u00eb nj\u00ebjt\u00ebt parametra<\/strong> do t\u00eb kthej\u00eb informacion t\u00eb dobish\u00ebm p\u00ebr k\u00ebt\u00eb radh\u00eb. P\u00ebr shembull, numrin total t\u00eb mesazheve n\u00eb pritje n\u00eb k\u00ebt\u00eb radh\u00eb dhe numrin total t\u00eb konsumator\u00ebve t\u00eb abonuar n\u00eb t\u00eb. <\/p>\n<p><\/p>\n<p>Thirrja <code>Queue.Declare<\/code> me kredencialet e nj\u00eb p\u00ebrdoruesi t\u00eb cilit nuk i jan\u00eb caktuar t\u00eb drejtat e nevojshme <strong>do ta mbyll\u00eb kanalin<\/strong> me komand\u00ebn <code>Channel.Close<\/code> dhe klienti do t\u00eb marr\u00eb p\u00ebrjashtimin <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 <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 radha t\u00eb q\u00ebndroj\u00eb joaktive p\u00ebr &gt;= 10 sekonda, ajo <strong>kalon n\u00eb gjendje fjetjeje<\/strong>, duke shkaktuar GC n\u00eb radh\u00eb, \u00e7ka \u00e7on n\u00eb nj\u00eb ulje t\u00eb ndjeshme 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\u00ebrfaqes grafike<\/em><\/h4>\n<p><\/p>\n<p>Hyni n\u00eb panelin e administratorit <code>RabbitMQ<\/code> me p\u00ebrdoruesin <code>guest<\/code> (username: <code>guest<\/code> dhe password: <code>guest<\/code>). Ju lutemi vini re se p\u00ebrdoruesi <code>guest<\/code> mund t\u00eb lidhet vet\u00ebm nga localhost. Tani kalojm\u00eb te skeda <code>Queues<\/code> dhe klikojm\u00eb <code>Add a new queue<\/code>. Plot\u00ebsojm\u00eb parametrat:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. T\u00eb kuptojm\u00eb 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 kemi futur t\u00eb gjitha t\u00eb dh\u00ebnat e nevojshme dhe t\u00eb klikoni <code>Add queues<\/code>, radha do t\u00eb shfaqet n\u00eb list\u00ebn e p\u00ebrgjithshme.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. T\u00eb kuptojm\u00eb 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 shfaq\u00eb informacionin e saj t\u00eb detajuar. K\u00ebtu mund t\u00eb konfiguroni lidhjen midis exchange dhe radh\u00ebs, t\u00eb shihni list\u00ebn e <code>consumers<\/code>, t\u00eb publikoni\/merrni mesazhe, t\u00eb fshini radh\u00ebn dhe t\u00eb shihni statistikat.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-binding\"><em>Krijimi i Binding<\/em><\/h4>\n<p><\/p>\n<p>Krijimi i lidhjes kryhet me an\u00eb t\u00eb komand\u00ebs sinkrone <code>RPC<\/code> k\u00ebrkese sinkrone ndaj serverit. K\u00ebrkesa b\u00ebhet me metod\u00ebn <code>Queue.Bind<\/code>, e thirrur me parametrat:<\/p>\n<p><\/p>\n<ul>\n<li>emri i radh\u00ebs<\/li>\n<li>emri i exchange<\/li>\n<li>parametra t\u00eb tjer\u00eb<\/li>\n<\/ul>\n<p><\/p>\n<p>Shembull 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>queue<\/code> \u2014 emri i radh\u00ebs<\/li>\n<li><code>exchange<\/code> \u2014 emri i exchange<\/li>\n<li><code>routingKey<\/code> \u2014 \u00e7el\u00ebsi i rutimit<\/li>\n<li><code>arguments<\/code> \u2014 argumente opsionale<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Pjesa 3. T\u00eb kuptojm\u00eb 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 i mundur<\/strong>, at\u00ebher\u00eb serveri do t'i d\u00ebrgoj\u00eb klientit nj\u00eb <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\u00ebrfaqes grafike<\/em><\/h4>\n<p><\/p>\n<p>Hyni n\u00eb panelin e administratorit <code>RabbitMQ<\/code> me p\u00ebrdoruesin <code>guest<\/code> (username: <code>guest<\/code> dhe password: <code>guest<\/code>). Ju lutemi vini re se p\u00ebrdoruesi <code>guest<\/code> mund t\u00eb lidhet vet\u00ebm nga localhost. Tani kalojm\u00eb te skeda <code>Queues<\/code> dhe klikojm\u00eb 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. T\u00eb kuptojm\u00eb 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 kemi futur t\u00eb gjitha t\u00eb dh\u00ebnat e nevojshme dhe t\u00eb klikojm\u00eb n\u00eb <code>Lidhje<\/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. T\u00eb kuptojm\u00eb 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\">Code<\/h3>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb seksion do t\u00eb p\u00ebrshkruajm\u00eb radh\u00ebn dhe lidhjen me kod n\u00eb C#, sikur t\u00eb na duhej t\u00eb zhvillonim nj\u00eb bibliotek\u00eb. Ndoshta kjo do t\u00eb jet\u00eb e dobishme p\u00ebr ta kuptuar m\u00eb leht\u00eb.<\/p>\n<p><\/p>\n<pre><code class=\"cs\">public interface IQueue\n    {        \n        string Name { get; }\n\n        \/\/\/ <summary>\n        \/\/\/     N\u00ebse vendoset true, at\u00ebher\u00eb queue do t\u00eb jet\u00eb e p\u00ebrhershme. \n        \/\/\/     Ajo do t\u00eb ruhet n\u00eb disk dhe do t\u00eb mund \n        \/\/\/     t\u2019i mbijetoj\u00eb rinisjes s\u00eb serverit\/brokerit. \n        \/\/\/     N\u00ebse vlera \u00ebsht\u00eb false, at\u00ebher\u00eb queue \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 true, at\u00ebher\u00eb \n        \/\/\/     nj\u00eb radh\u00eb e till\u00eb do t\u00eb lejoj\u00eb lidhjen \n        \/\/\/     vet\u00ebm t\u00eb nj\u00eb consumer-i\n        \/\/\/ <\/summary>\n        bool IsExclusive { get; }\n\n        \/\/\/ <summary>\n        \/\/\/     Fshirje automatike. \n        \/\/\/     Radha 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 opsionale\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 emri, \n             bool \u00ebsht\u00ebDorezuar = true, \n             bool \u00ebsht\u00ebEkskluziv = false, \n             bool \u00ebsht\u00ebAutomatikFshir\u00ebs = false, \n             IDictionary argumente = null)\n        {\n            Emri = emri ??\n                throw new ArgumentNullException(emri, $\"{emri} nuk duhet t\u00eb jet\u00eb null\");\n\n            \u00cbsht\u00ebDorezuar = \u00ebsht\u00ebDorezuar;\n            \u00cbsht\u00ebEkskluziv = \u00ebsht\u00ebEkskluziv;\n            \u00cbsht\u00ebAutomatikFshir\u00ebs = \u00ebsht\u00ebAutomatikFshir\u00ebs;\n            Argumentet = argumente ?? new Dictionary();\n        }\n\n        publike string Emri { get; }\n        publike bool \u00cbsht\u00ebDorezuar { get; }\n        publike bool \u00cbsht\u00ebEkskluziv { get; }\n        publike bool \u00cbsht\u00ebAutomatikFshir\u00ebs { get; }\n        publike IDictionary Argumentet { get; }\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        \/\/ \/\/     Mod i Ngadalsh\u00ebm. Mod i Ngadalsh\u00ebm do t\u00eb detyroj\u00eb q\u00eb t\u00eb ruaj\u00eb \n        \/\/ \/\/     sa m\u00eb shum\u00eb mesazhe n\u00eb disk, p\u00ebr t\u00eb zvog\u00ebluar \n        \/\/ \/\/     p\u00ebrdorimin e memories\n        \/\/ \/\/ <\/p>\n        publike const string Ngadalsh\u00ebm = \"lazy\";\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">public interface IBinding\n    {\n        \/\/\/ <summary>\n        \/\/\/     Exchange me t\u00eb cilin do t\u00eb lidhet binding\n        \/\/\/ <\/summary>\n        IExchange Exchange { get; }\n\n        \/\/\/ <summary>\n        \/\/\/     \u00c7el\u00ebsi i rutimit\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.2 - 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.2\" \/>\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. T\u00eb kuptojm\u00eb Queues dhe Bindings | ProHoster","description":"Queue (radha) \u00ebsht\u00eb nj\u00eb struktur\u00eb e t\u00eb dh\u00ebnave n\u00eb disk ose n\u00eb memorien operative, e cila ruan referenca ndaj mesazheve dhe u jep kopjet e tyre consumers (konsumator\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}]}}