{"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\/et\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings","title":{"rendered":"RabbitMQ. Osa 3. Uurime Queues ja Bindings","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Queue<\/code> (j\u00e4rjekord) \u2014 andmestruktuur, mis asub kettal v\u00f5i m\u00e4lus ning salvestab viiteid s\u00f5numitele ning edastab nende koopiaid <code>consumers<\/code> (tarbijatele). <code>Queue<\/code> esindab <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">Erlang-protsessi<\/a><\/noindex> olekus (kuhu v\u00f5ivad vahem\u00e4llu salvestuda ka s\u00f5numid). 1000 j\u00e4rjekorda v\u00f5ib v\u00f5tta umbes 80Mb.<\/p>\n<p><\/p>\n<p><code>Binding<\/code> (sidumine) \u2014 reegel, mis \u00fctleb vahetusele, millisesse j\u00e4rjekorda s\u00f5numid peavad minema.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Sisukord<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP ja RPC<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">RabbitMQ. Osa 2. Uurime Exchanges<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/490960\/\">RabbitMQ. Osa 3. Uurime Queues ja Bindings<\/a><\/noindex><\/li>\n<li>RabbitMQ. Osa 4. Uurime, mis on s\u00f5numid ja raamid<\/li>\n<li>RabbitMQ. Osa 5. S\u00f5numite avaldamise ja tarbimise j\u00f5udlus<\/li>\n<li>RabbitMQ. Osa 6. \u00dclevaade moodulitest Federation ja Shovel<\/li>\n<li>RabbitMQ. Osa 7. \u00dcksikasjalikult Connection ja Channel<\/li>\n<li>RabbitMQ. Osa 8. RabbitMQ .NET-is<\/li>\n<li>RabbitMQ. Osa 9. Juhendamine<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"vremennye-ocheredi\"><em>Ajutised j\u00e4rjekorrad<\/em><\/h4>\n<p><\/p>\n<p>Kui j\u00e4rjekorra loomine toimub seadistatud parameetriga <code>autoDelete<\/code>, siis selline j\u00e4rjekord saab v\u00f5ime <strong>automaatne end \u00e4ra kustutada<\/strong>. Sellised j\u00e4rjekorrad loodi tavaliselt siis, kui esimene klient on \u00fchendatud, ja kustutatakse hetkedel, kui k\u00f5ik kliendid on lahti \u00fchendatud. <\/p>\n<p><\/p>\n<p>Kui j\u00e4rjekorra loomine toimub seadistatud parameetriga <code>exclusive<\/code>, siis selline j\u00e4rjekord <strong>lubab ainult \u00fchele tarbijale \u00fchenduma<\/strong> ja eemaldatakse, kui kanal suletakse. Kuni kanali sulgemiseni v\u00f5ib klient lahti \u00fchenduda \/ taas \u00fchendada, kuid ainult sama \u00fchenduse piires. Kui parameeter <code>exclusive<\/code> on seadistatud, siis parameeter <code>autoDelete<\/code> ei avalda mingit m\u00f5ju.<\/p>\n<p><\/p>\n<p>Omadused:<\/p>\n<p><\/p>\n<ul>\n<li>l\u00fchiajaliste \u00fchenduste katkestuste korral kaotame s\u00f5numid, mis ei ole veel tarbijani j\u00f5udnud<\/li>\n<li>v\u00f5ib kogeda fenomeni <code>binding churn<\/code>. See fenomen tekib siis, kui j\u00e4rjekordade ja sidumiste loomise \/ kustutamise operatsioonide hulk saavutab v\u00e4ga suuri v\u00e4\u00e4rtusi. Klasterre\u017eiimis laienevad sellised operatsioonivoogud k\u00f5ikidele s\u00f5lmedele ja genereerivad suurt koormust. Selle protsessi saab optimeerida tellimuste arvu kontrollimisega<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"postoyannye-ocheredi\"><em>P\u00fcsivad j\u00e4rjekorrad<\/em><\/h4>\n<p><\/p>\n<p>Kui j\u00e4rjekorra loomine toimub seadistatud parameetriga <code>durable<\/code>, siis selline j\u00e4rjekord <strong>s\u00e4ilitavad oma oleku<\/strong> ja taastuvad p\u00e4rast serveri \/ vahendaja taask\u00e4ivitamist. See j\u00e4rjekord eksisteerib kuni korratakse k\u00e4sku <code>Queue.Delete<\/code>. <\/p>\n<p><\/p>\n<h4 id=\"highly-available-ocheredi\"><em>K\u00f5rge saadavuse j\u00e4rjekorrad<\/em><\/h4>\n<p><\/p>\n<p>HA j\u00e4rjekorrad n\u00f5uavad RabbitMQ klusterkeskkonda. Klasterre\u017eiimis kopeeritakse kogu teave vahetite, j\u00e4rjekordade, sidumiste ja tarbijate kohta k\u00f5igile s\u00f5lmedele.<\/p>\n<p><\/p>\n<p>Kui s\u00f5num avaldatakse HA j\u00e4rjekorda, salvestatakse see igas s\u00f5lmes, mis kuulub HA j\u00e4rjekorda. Kui s\u00f5num tarbitakse m\u00f5nes s\u00f5lmes, siis k\u00f5ik selle s\u00f5numi koopiad kustutatakse teistest s\u00f5lmedest. <\/p>\n<p><\/p>\n<p>HA j\u00e4rjekorrad v\u00f5ivad laieneda k\u00f5ikidesse s\u00f5lmedesse mingis klastris v\u00f5i ainult \u00fcksikutesse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 3. Uurime Queues ja Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/46d560ab33e686ddf9adb0b18b4bb0b0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Omadused:<\/p>\n<p><\/p>\n<ul>\n<li>HA j\u00e4rjekordade kasutamine toob kaasa j\u00f5udluse karistusi. Kui s\u00f5num paigutatakse m\u00f5nesse HA j\u00e4rjekorda v\u00f5i kui s\u00f5num tarbitakse HA j\u00e4rjekorrast, peab RabbitMQ koordineerima k\u00f5iki s\u00f5lmi (2-3 s\u00f5lme on tavaliselt piisavad).<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"sozdanie-ocheredi\"><em>J\u00e4rjekorra loomine<\/em><\/h4>\n<p><\/p>\n<p>J\u00e4rjekorra loomine toimub s\u00fcnkrone <code>RPC<\/code> p\u00e4ringuga serverisse. P\u00e4ring tehakse meetodi kaudu <code>Queue.Declare<\/code>, mida kutsutakse v\u00e4lja parameetritega:<\/p>\n<p><\/p>\n<ul>\n<li>j\u00e4rjekorra nimi<\/li>\n<li>teised parameetrid<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00e4ide j\u00e4rjekorra loomisest <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 j\u00e4rjekorra nimi, mida soovime luua. Nimi peab olema ainulaadne ja ei tohi kattuda s\u00fcsteemse j\u00e4rjekorra nimega.<\/li>\n<li><code>durable<\/code> \u2014 kui true, siis j\u00e4rjekord <strong>salvestab oma seisundi<\/strong> ja taastub p\u00e4rast serveri\/brokri taask\u00e4ivitamist.<\/li>\n<li><code>exclusive<\/code> \u2014 kui true, siis j\u00e4rjekord lubab \u00fchendada ainult \u00fchte tarbijat<\/li>\n<li><code>autoDelete<\/code> \u2014 kui true, siis j\u00e4rjekord omandab v\u00f5ime <strong>automaatne end \u00e4ra kustutada<\/strong><\/li>\n<li><code>argumentide<\/code> \u2014 valikulised argumendid. Allpool k\u00e4sitleme seda l\u00e4hemalt.<\/li>\n<\/ul>\n<p><\/p>\n<h5 id=\"arguments\"><em>argumentide<\/em><\/h5>\n<p><\/p>\n<ul>\n<li><code>x-message-ttl<\/code>(<code>x-message-time-to-live<\/code>) \u2014 v\u00f5imaldab seadistada s\u00f5numi eluea kestust millisekundites. Kui j\u00e4rjekorra loomine toimub seatud argumentidega <code>x-message-ttl<\/code>, siis selline j\u00e4rjekord <strong>k\u00e4tkeb automaatselt s\u00f5numeid, mille kehtivusaeg on l\u00f5ppenud<\/strong>. Argumendi seadmise v\u00e4\u00e4rtus <code>x-message-ttl<\/code> m\u00e4\u00e4rab maksimaalse vanuse k\u00f5ikidele s\u00f5numitele antud j\u00e4rjekorras. Sellise j\u00e4rjekorra loomine <strong>aitab v\u00e4ltida aegunud teabe saamist<\/strong>. Seda saab kasutada reaalajas s\u00fcsteemides. Kui j\u00e4rjekord, millele on m\u00e4\u00e4ratud vahetus tagasil\u00fckatud s\u00f5numite jaoks, seada argumendi v\u00e4\u00e4rtus <code>x-message-ttl<\/code>, siis tagasil\u00fckatud s\u00f5numid antud j\u00e4rjekorras <strong>hakkavad omama eluea<\/strong>.<\/li>\n<li><code>x-expires<\/code> \u2014 m\u00e4\u00e4rab v\u00e4\u00e4rtuse millisekundites, mille m\u00f6\u00f6dumisel j\u00e4rjekord kustutatakse. J\u00e4rjekord v\u00f5ib oma kehtivuse t\u00e4htaega kasutada ainult siis, kui sellel ei ole tellijaid. Kui j\u00e4rjekorrale on \u00fchendatud tellijad, saab see automaatselt kustutada, ainult kui k\u00f5ik tellijad v\u00e4ljakutse esitavad <code>Basic.Cancel<\/code> v\u00f5i lahti \u00fchendavad. J\u00e4rjekorra eluaeg saab l\u00f5ppeda ainult juhul, kui sellele ei ole esitatud p\u00e4ringut <code>Basic.Get<\/code>. Vastasel juhul l\u00e4htestatakse praegune eluaegade seade nulliks ja j\u00e4rjekord ei kustutata enam automaatselt. Samuti <strong>ei ole garanteeritud, kui kiiresti j\u00e4rjekord kustutatakse p\u00e4rast selle eluea l\u00f5ppemist<\/strong>.<\/li>\n<li><code>x-max-length<\/code> \u2014 m\u00e4\u00e4rab maksimaalse s\u00f5numite arvu j\u00e4rjekorras. Kui s\u00f5numite arv j\u00e4rjekorras hakkab \u00fcletama maksimaalset arvu, siis kustutatakse k\u00f5ige vanemad<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 3. Uurime Queues ja 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 m\u00e4\u00e4rab maksimaalse lubatud koormuse s\u00f5numite summaarsuuruse j\u00e4rjekorras. Kui seatud v\u00e4\u00e4rtust \u00fcletatakse (j\u00e4rjekorra \u00fclet\u00e4ide tekkis j\u00e4rgmise s\u00f5numi avaldamise ajal), hakkavad k\u00f5ige vanemad s\u00f5numid kustutama<\/li>\n<li><code>x-overflow<\/code> \u2014 seda argumenti kasutatakse j\u00e4rjekorra \u00fclevoolu k\u00e4itumise seadistamiseks. Saadaval on kaks v\u00e4\u00e4rtust: <code>drop-head<\/code> (vaikev\u00e4\u00e4rtus) ja <code>reject-publish<\/code>. Kui valida <code>drop-head<\/code>, siis eemaldatakse vanimad s\u00f5numid. Kui valida <code>reject-publish<\/code>, siis s\u00f5numite vastuv\u00f5tt peatatakse<\/li>\n<li><code>x-dead-letter-exchange<\/code> \u2014 m\u00e4\u00e4rab exchange'i, kuhu suunatakse tagasi l\u00fckatud s\u00f5numid, mida ei panna uuesti j\u00e4rjekorda<\/li>\n<li><code>x-dead-letter-routing-key<\/code> \u2014 m\u00e4\u00e4rab valikulise suunamisv\u00f5tme tagasi l\u00fckatud s\u00f5numitele<\/li>\n<li><code>x-max-priority<\/code> \u2014 lubab sorteerimise prioriteetide alusel j\u00e4rjekorras maksimaalse prioriteedi v\u00e4\u00e4rtusega 255 (RabbitMQ versioonides 3.5.0 ja uuemates). Number n\u00e4itab maksimaalset prioriteeti, mida j\u00e4rjekord toetab. Kui argument pole seadistatud, ei toeta j\u00e4rjekord s\u00f5numite prioriteeti<\/li>\n<li><code>x-queue-mode<\/code> \u2014 v\u00f5imaldab viia j\u00e4rjekorra <strong>laisk re\u017eiim<\/strong>. Sellises re\u017eiimis hoitakse v\u00f5imalikult palju s\u00f5numeid kettal. Operatiivm\u00e4lu kasutamine on minimaalne. Kui seda ei ole seadistatud, hoiab j\u00e4rjekord s\u00f5numeid m\u00e4lu, et edastada s\u00f5numeid v\u00f5imalikult kiiresti<\/li>\n<li><code>x-queue-master-locator<\/code> \u2014 kui meil on klaster, siis saab seada meistrij\u00e4rjekorra<\/li>\n<li><code>x-ha-policy<\/code> \u2014 kasutatakse HA j\u00e4rjestuste loomiseks ja m\u00e4\u00e4rab, kuidas s\u00f5num jaguneb s\u00f5lmede vahel. Kui v\u00e4\u00e4rtuseks on seatud <code>all<\/code>, siis s\u00e4ilitatakse s\u00f5num k\u00f5igil s\u00f5lmedel. Kui v\u00e4\u00e4rtuseks on seatud <code>nodes<\/code>, siis s\u00e4ilitatakse s\u00f5num m\u00e4\u00e4ratud klastris\u00f5lmedel<\/li>\n<li><code>x-ha-nodes<\/code> \u2014 m\u00e4\u00e4rab s\u00f5lmed, millele teatav j\u00e4rjekord kuulub <code>HA<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 3. Uurime Queues ja Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/a8f660b6c0a43626e4025cf7769a4425.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui j\u00e4rjekorra loomine <strong>on v\u00f5imalik<\/strong>, siis server saadab kliendile s\u00fcnkroonse <code>RPC<\/code> vastuse <code>Queue.DeclareOk<\/code>. Kui j\u00e4rjekorra loomine <strong>ei ole v\u00f5imalik<\/strong> (taotluse t\u00f5ttu tekkis t\u00f5rge <code>Queue.Declare<\/code>), siis <strong>kanal suletakse<\/strong> serveri poolt k\u00e4suga <code>Channel.Close<\/code> ja klient saab erandi <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>, mis sisaldab veakoodi ja selle kirjeldust. <\/p>\n<p><\/p>\n<p><strong>Uuesti kutsumine<\/strong> <code>Queue.Declare<\/code> <strong>samade parameetritega<\/strong> tagastab kasulikku teavet selle j\u00e4rjekorra kohta. N\u00e4iteks s\u00f5numite koguarv, mis ootavad antud j\u00e4rjekorras, ja registreeritud tarbijate koguarv. <\/p>\n<p><\/p>\n<p>Kutse <code>Queue.Declare<\/code> kasutaja mandaatide all, kellele ei ole m\u00e4\u00e4ratud vajalikke \u00f5igusi <strong>sulgeb kanali<\/strong> k\u00e4suga <code>Channel.Close<\/code> ja klient saab erandi <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>, mis sisaldab veakoodi <noindex><a rel=\"nofollow\" href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/HTTP\/Status\/403\">403<\/a><\/noindex> ja selle kirjeldust.<\/p>\n<p><\/p>\n<p>P\u00e4rast seda, kui j\u00e4rjekord on olnud 10 sekundi jooksul inaktiivne, <strong>sattub see ootusre\u017eiimi<\/strong>, kutsudes esile GC j\u00e4rjekorras, mis viib olulise m\u00e4lu kokkuhoidmiseni, mis on vajalik sellele j\u00e4rjekorrale.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-queue-cherez-graficheskiy-interfeys\"><em>Queue'i loomine graafilise liidese kaudu<\/em><\/h4>\n<p><\/p>\n<p>Siseneme administraatori paneeli <code>RabbitMQ<\/code> kasutaja all <code>guest<\/code> (kasutajanimi: <code>guest<\/code> ja parool: <code>guest<\/code>). Pange t\u00e4hele, et kasutaja <code>guest<\/code> saab \u00fchendust luua ainult kohalikust hostist. N\u00fc\u00fcd liigume vahekaardile <code>Queues<\/code> ja kl\u00f5psame <code>Add a new queue<\/code>. T\u00e4idame omadused:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 3. Uurime Queues ja Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/ea77a406ad16f0871c7197e96a66818f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Koheselt p\u00e4rast vajutamist <code>Add queues<\/code>, ilmub j\u00e4rjekord \u00fcldnimekirja.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 3. Uurime Queues ja Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/8342e044a0d6c0a035a2c9f646035cad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J\u00e4rjekorra nimele kl\u00f5psamine n\u00e4itab selle \u00fcksikasjalikku teavet. Siit saab seadistada sideme vahetuse ja j\u00e4rjekorra vahel, vaadata loendit <code>consumers<\/code>, avaldada\/saada s\u00f5numeid, kustutada j\u00e4rjekorda ja vaadata statistikat.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-binding\"><em>Sideme loomine<\/em><\/h4>\n<p><\/p>\n<p>Sideme loomine toimub s\u00fcnkroneeritud <code>RPC<\/code> p\u00e4ringuga serverisse. P\u00e4ring tehakse meetodi kaudu <code>Queue.Bind<\/code>, mida kutsutakse v\u00e4lja parameetritega:<\/p>\n<p><\/p>\n<ul>\n<li>j\u00e4rjekorra nimi<\/li>\n<li>vahetuse punkti nimi<\/li>\n<li>teised parameetrid<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00e4idis sideme loomise kohta <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 j\u00e4rjekorra nimi<\/li>\n<li><code>exchange<\/code> \u2014 vahetuse nimi<\/li>\n<li><code>routingKey<\/code> \u2014 marsruudiv\u00f5ti<\/li>\n<li><code>argumentide<\/code> \u2014 valikuline argument<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 3. Uurime Queues ja Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/9123186c94a822309b679f26c2e511ea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui sideme loomine <strong>on v\u00f5imalik<\/strong>, siis server saadab kliendile s\u00fcnkroonse <code>RPC<\/code> vastuse <code>Queue.BindOk<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-binding-cherez-graficheskiy-interfeys\"><em>Sideme loomine graafilise liidese kaudu<\/em><\/h4>\n<p><\/p>\n<p>Siseneme administraatori paneeli <code>RabbitMQ<\/code> kasutaja all <code>guest<\/code> (kasutajanimi: <code>guest<\/code> ja parool: <code>guest<\/code>). Pange t\u00e4hele, et kasutaja <code>guest<\/code> saab \u00fchendust luua ainult kohalikust hostist. N\u00fc\u00fcd liigume vahekaardile <code>Queues<\/code> ja vajutame j\u00e4rjekorrale <code>minu_j\u00e4rjekord<\/code>. T\u00e4itke jaotise v\u00e4ljad <code>seosed<\/code>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 3. Uurime Queues ja Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/7db6b42a4f29a1860aabe54ade0b6833.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Niipea, kui anname k\u00f5ik vajalikud andmed ja vajutame <code>Siduda<\/code>, kuvatakse seos \u00fcldises loendis:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 3. Uurime Queues ja Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/499eda8e8cb061e6feb75c471eb64b92.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"code\">Kood<\/h3>\n<p><\/p>\n<p>Selles jaotises kirjeldame j\u00e4rjekorda ja sidumist C# koodiga, nagu oleksime arendanud raamatukogu. See v\u00f5ib olla kasulik arusaamiseks.<\/p>\n<p><\/p>\n<pre><code class=\"cs\">public interface IQueue\n    {        \n        string Name { get; }\n\n        \/\/ &lt;summary&gt;\n        \/\/     Kui seadistada true, siis j\u00e4rjekord on p\u00fcsiv. \n        \/\/     See salvestatakse kettale ja suudab \n        \/\/     taluda serveri\/brokeri taasalustamist. \n        \/\/     Kui v\u00e4\u00e4rtus on false, siis j\u00e4rjekord on ajutine ja kustutatakse, \n        \/\/     kui server\/broker taasalustatakse\n        \/\/ &lt;\/summary&gt;\n        bool IsDurable { get; }\n\n        \/\/ &lt;summary&gt;\n        \/\/     Kui v\u00e4\u00e4rtus on true, siis \n        \/\/     sellesse j\u00e4rjekorda tohib \u00fchendada \n        \/\/     vaid \u00fcks consumer\n        \/\/ &lt;\/summary&gt;\n        bool IsExclusive { get; }\n\n        \/\/ &lt;summary&gt;\n        \/\/     Automaatne kustutamine. \n        \/\/     J\u00e4rjekord kustutatakse, kui k\u00f5ik kliendid lahkuvad.\n        \/\/ &lt;\/summary&gt;\n        bool IsAutoDelete { get; }\n\n        \/\/ &lt;summary&gt;\n        \/\/     Valikuline argument\n        \/\/ &lt;\/summary&gt;\n        IDictionary&lt;string, object&gt; Arguments { get; }\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">public class Queue : IQueue\n    {\n        public Queue(\n             string name, \n             bool isDurable = true, \n             bool isExclusive = false, \n             bool isAutoDelete = false, \n             IDictionary&lt;string, object&gt; arguments = null)\n        {\n            Name = name ??\n                throw new ArgumentNullException(name, $&quot;{name} must not be null&quot;);\n\n            IsDurable = isDurable;\n            IsExclusive = isExclusive;\n            IsAutoDelete = isAutoDelete;\n            Arguments = arguments ?? new Dictionary&lt;string, object&gt;();\n        }\n\n        public string Name { get; }\n        public bool IsDurable { get; }\n        public bool IsExclusive { get; }\n        public bool IsAutoDelete { get; }\n        public IDictionary&lt;string, object&gt; Arguments { get; }\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">public static class QueueMode\n    {       \n        public const string Default = &quot;default&quot;;\n        \/\/\/ &lt;summary&gt;\n        \/\/\/     \u041b\u0435\u043d\u0438\u0432\u044b\u0439 \u0440\u0435\u0436\u0438\u043c. \u041b\u0435\u043d\u0438\u0432\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \n        \/\/\/     \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0447\u0442\u043e\u0431\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \n        \/\/\/     \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438\n        \/\/\/ &lt;\/summary&gt;\n        public const string Lazy = &quot;lazy&quot;;\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">public interface IBinding\n    {\n        \/\/ <summary>\n        \/\/     Vahetus, mis seondub sidumisega\n        \/\/ <\/summary>\n        IExchange Exchange { get; }\n\n        \/\/ <summary>\n        \/\/     Marsruutimisv\u00f5ti\n        \/\/ <\/summary>\n        string RoutingKey { get; }\n\n        \/\/ <summary>\n        \/\/     Valikuline argument\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>Allikas: <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 4.9.10 - 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). 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.\" \/>\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\/et\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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). 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.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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. Osa 3. Tutvume j\u00e4rjekordade ja sidumistega | ProHoster","description":"Queue (j\u00e4rjekord) on andmestruktuur, mis asub kettal v\u00f5i m\u00e4lus ja hoiab s\u00f5numite viiteid, edastades nende koopiaid consumers (tarbijatele). Queue on Erlangi protsess, millel on olek (kus v\u00f5ivad vahem\u00e4llu j\u00e4\u00e4da ka s\u00f5numid). 1000 j\u00e4rjekorda v\u00f5ib v\u00f5tta umbes 80 Mb. Binding (sidumine) on reegel, mis \u00fctleb vahetajale, millisesse j\u00e4rjekorda s\u00f5numid peavad sattuma.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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). 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.","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/73065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=73065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/73065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/73066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=73065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=73065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=73065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}