{"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\/hu\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings","title":{"rendered":"RabbitMQ. 3. r\u00e9sz. Queues \u00e9s Bindings meg\u00e9rt\u00e9se","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Sor<\/code> (sor) \u2014 olyan adatt\u00edpus a lemezen vagy a mem\u00f3ri\u00e1ban, amely hivatkoz\u00e1sokat t\u00e1rol az \u00fczenetekre, \u00e9s visszaadja azok m\u00e1solatait <code>consumers<\/code> (fogyaszt\u00f3knak). <code>Sor<\/code> jelent\u00e9se <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">Erlang-folyamat<\/a><\/noindex> \u00e1llapottal (ahol maguk az \u00fczenetek is cache-elhet\u0151k). 1 ezer sor k\u00f6r\u00fclbel\u00fcl 80 MB-ot foglalhat.<\/p>\n<p><\/p>\n<p><code>Binding<\/code> (k\u00f6t\u00e9s) \u2014 egy szab\u00e1ly, amely megmondja a cser\u00e9l\u0151nek, hogy melyik sorba kell az \u00fczeneteknek ker\u00fclni\u00fck.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Tartalomjegyz\u00e9k<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. 1. r\u00e9sz. Bevezet\u00e9s. Erlang, AMQP \u00e9s RPC<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">RabbitMQ. 2. r\u00e9sz. Az Exchanges r\u00e9szletez\u00e9se<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/490960\/\">RabbitMQ. 3. r\u00e9sz. Queues \u00e9s Bindings meg\u00e9rt\u00e9se<\/a><\/noindex><\/li>\n<li>RabbitMQ. 4. r\u00e9sz. N\u00e9zz\u00fck meg, hogy mik azok az \u00fczenetek \u00e9s keretek<\/li>\n<li>RabbitMQ. 5. r\u00e9sz. Az \u00fczenetek k\u00f6zz\u00e9t\u00e9teli \u00e9s fogyaszt\u00e1si teljes\u00edtm\u00e9nye<\/li>\n<li>RabbitMQ. 6. r\u00e9sz. A Federation \u00e9s Shovel modulok \u00e1ttekint\u00e9se<\/li>\n<li>RabbitMQ. 7. r\u00e9sz. R\u00e9szletesen a Kapcsolatr\u00f3l \u00e9s csatorn\u00e1r\u00f3l<\/li>\n<li>RabbitMQ. 8. r\u00e9sz. RabbitMQ .NET k\u00f6rnyezetben<\/li>\n<li>RabbitMQ. 9. r\u00e9sz. Monitoring<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"vremennye-ocheredi\"><em>Ideiglenes sorok<\/em><\/h4>\n<p><\/p>\n<p>Ha a sor l\u00e9trehoz\u00e1sa egy megadott param\u00e9terrel t\u00f6rt\u00e9nik <code>autoDelete<\/code>, akkor ez a sor olyan k\u00e9pess\u00e9get kap <strong>\u00f6n\u00e1ll\u00f3an elt\u00e1vol\u00edtja mag\u00e1t<\/strong>. Ezek a sorok \u00e1ltal\u00e1ban akkor j\u00f6nnek l\u00e9tre, amikor az els\u0151 kliens csatlakozik, \u00e9s akkor t\u00f6rl\u0151dnek, amikor minden kliens lecsatlakozik. <\/p>\n<p><\/p>\n<p>Ha a sor l\u00e9trehoz\u00e1sa egy megadott param\u00e9terrel t\u00f6rt\u00e9nik <code>kiz\u00e1r\u00f3lagos<\/code>, akkor ez a sor <strong>csak egy fogyaszt\u00f3nak enged\u00e9lyezi a csatlakoz\u00e1st<\/strong> \u00e9s elt\u00e1vol\u00edt\u00f3dik, ha a csatorna bez\u00e1r\u00f3dik. Addig, am\u00edg a csatorna nyitva van, a kliens el tudja t\u00e1vol\u00edtani\/csatlakozni, de csak ugyanazon a kapcsolaton bel\u00fcl. Ha a param\u00e9ter <code>kiz\u00e1r\u00f3lagos<\/code> be van \u00e1ll\u00edtva, akkor a <code>autoDelete<\/code> param\u00e9ternek nincs hat\u00e1sa.<\/p>\n<p><\/p>\n<p>Jellemz\u0151k:<\/p>\n<p><\/p>\n<ul>\n<li>r\u00f6vid idej\u0171 kapcsolatzavar eset\u00e9n elvesz\u00edtj\u00fck azokat az \u00fczeneteket, amelyek m\u00e9g nem jutottak el a fogyaszt\u00f3hoz<\/li>\n<li>lehet elkapni a jelens\u00e9get <code>binding churn<\/code>. A jelens\u00e9g akkor fordul el\u0151, amikor a sorok \u00e9s k\u00f6t\u00e9seik l\u00e9trehoz\u00e1s\u00e1ra\/t\u00f6rl\u00e9s\u00e9re vonatkoz\u00f3 m\u0171veletek sz\u00e1ma nagyon magas \u00e9rt\u00e9ket \u00e9r el. Klaszter m\u00f3dban ez a m\u0171veletsorozat az \u00f6sszes csom\u00f3ponton sz\u00e9t fog terjedni, \u00e9s nagy terhel\u00e9st fog l\u00e9trehozni. Ezt a folyamatot optimaliz\u00e1lni lehet a feliratkoz\u00e1sok sz\u00e1m\u00e1nak ellen\u0151rz\u00e9s\u00e9vel<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"postoyannye-ocheredi\"><em>\u00c1lland\u00f3 sorok<\/em><\/h4>\n<p><\/p>\n<p>Ha a sor l\u00e9trehoz\u00e1sa egy megadott param\u00e9terrel t\u00f6rt\u00e9nik <code>durable<\/code>, akkor ez a sor <strong>meg\u0151rzi az \u00e1llapot\u00e1t<\/strong> \u00e9s helyre\u00e1ll a szerver\/broker \u00fajraind\u00edt\u00e1sa ut\u00e1n. Ez a sor addig fog l\u00e9tezni, am\u00edg a <code>Queue.Delete<\/code>. <\/p>\n<p><\/p>\n<h4 id=\"highly-available-ocheredi\"><em>parancsot nem h\u00edvj\u00e1k meg.<\/em><\/h4>\n<p><\/p>\n<p>Magas rendelkez\u00e9sre \u00e1ll\u00e1s\u00fa sorok<\/p>\n<p><\/p>\n<p>A HA sorok klaszter k\u00f6rnyezetet ig\u00e9nyelnek a RabbitMQ sz\u00e1m\u00e1ra. Klaszter m\u00f3dban az \u00f6sszes inform\u00e1ci\u00f3 a cser\u00e9l\u0151kr\u0151l, sorokr\u00f3l, k\u00f6t\u00e9sekr\u0151l \u00e9s fogyaszt\u00f3kr\u00f3l m\u00e1sol\u00f3dik az \u00f6sszes csom\u00f3pontba. <\/p>\n<p><\/p>\n<p>Amikor egy \u00fczenet publik\u00e1lva van egy HA sorba, akkor az minden csom\u00f3ponton t\u00e1rol\u00f3dik, amely a HA sorhoz tartozik. Miut\u00e1n egy \u00fczenetet egy csom\u00f3ponton fogyasztanak, az \u00fczenet minden m\u00e1s csom\u00f3pontban l\u00e9v\u0151 m\u00e1solata t\u00f6rl\u00e9sre ker\u00fcl. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 3. r\u00e9sz. Queues \u00e9s Bindings meg\u00e9rt\u00e9se\" src=\"\/wp-content\/uploads\/2020\/03\/46d560ab33e686ddf9adb0b18b4bb0b0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jellemz\u0151k:<\/p>\n<p><\/p>\n<ul>\n<li>A HA queue's use can lead to performance penalties. When placing a message into a HA queue or consuming a message from it, RabbitMQ must perform coordination across all nodes (2-3 nodes are usually sufficient).<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"sozdanie-ocheredi\"><em>Queue l\u00e9trehoz\u00e1sa<\/em><\/h4>\n<p><\/p>\n<p>A queue l\u00e9trehoz\u00e1sa szinkron <code>RPC<\/code> lek\u00e9r\u00e9ssel a szerverhez. A k\u00e9r\u00e9s a k\u00f6vetkez\u0151 met\u00f3dussal t\u00f6rt\u00e9nik: <code>Queue.Declare<\/code>, az al\u00e1bbi param\u00e9terekkel:<\/p>\n<p><\/p>\n<ul>\n<li>a queue neve<\/li>\n<li>egy\u00e9b param\u00e9terek<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00e9lda queue l\u00e9trehoz\u00e1s\u00e1ra <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 a queue neve, amelyet l\u00e9tre szeretn\u00e9nk hozni. A n\u00e9vnek egyedinek kell lennie, \u00e9s nem lehet azonos a rendszer queue nev\u00e9vel.<\/li>\n<li><code>durable<\/code> \u2014 ha igaz, a queue meg\u0151rzi az \u00e1llapot\u00e1t <strong>\u00e9s vissza\u00e1ll a szerver\/broker \u00fajraindul\u00e1sa ut\u00e1n.<\/strong> \u2014 ha igaz, a queue lehet\u0151v\u00e9 teszi, hogy csak egy fogyaszt\u00f3 csatlakozzon.<\/li>\n<li><code>kiz\u00e1r\u00f3lagos<\/code> \u2014 ha igaz, a queue rendelkezik azzal a k\u00e9pess\u00e9ggel,<\/li>\n<li><code>autoDelete<\/code> arguments <strong>\u00f6n\u00e1ll\u00f3an elt\u00e1vol\u00edtja mag\u00e1t<\/strong><\/li>\n<li><code>\u2014 v\u00e1laszthat\u00f3 argumentumok. R\u00e9szletesebben l\u00e1sd al\u00e1bb.<\/code> x-message-ttl<\/li>\n<\/ul>\n<p><\/p>\n<h5 id=\"arguments\"><em>\u2014 v\u00e1laszthat\u00f3 argumentumok. R\u00e9szletesebben l\u00e1sd al\u00e1bb.<\/em><\/h5>\n<p><\/p>\n<ul>\n<li><code>x-message-time-to-live<\/code>(<code>) \u2014 lehet\u0151v\u00e9 teszi a message \u00e9lettartam\u00e1nak be\u00e1ll\u00edt\u00e1s\u00e1t milliszekundumban. Ha a queue l\u00e9trehoz\u00e1sa egy megadott \u00e9rt\u00e9kkel t\u00f6rt\u00e9nik,<\/code>, akkor a queue automatikusan ki fogja z\u00e1rni azokat a message-eket, amelyek m\u00falt id\u0151tartam\u00faak. <code>x-message-time-to-live<\/code>. Az argumentum \u00e9rt\u00e9k\u00e9nek be\u00e1ll\u00edt\u00e1sa <strong>meghat\u00e1rozza az \u00f6sszes message maxim\u00e1lis \u00e9letkor\u00e1t a queue-ban. Ilyen queue l\u00e9trehoz\u00e1sa<\/strong>megel\u0151zheti az elavult inform\u00e1ci\u00f3k megszerz\u00e9s\u00e9t. <code>x-message-time-to-live<\/code> . Ezt val\u00f3s idej\u0171 rendszerekben lehet haszn\u00e1lni. Ha a queue-hoz, amelyhez elutas\u00edtott message-ek cser\u00e9je van megadva, argumentum \u00e9rt\u00e9ket adunk meg, <strong>, akkor az elutas\u00edtott message-ek ebben a queue-ban<\/strong>\u00e9letid\u0151vel fognak rendelkezni. <code>x-message-time-to-live<\/code>x-expires <strong>\u2014 meghat\u00e1roz egy milliszekundumban kifejezett \u00e9rt\u00e9ket, amely ut\u00e1n a queue t\u00f6rl\u0151dik. A queue csak akkor vesz\u00edtheti el az \u00e9rv\u00e9nyess\u00e9g\u00e9t, ha nincs el\u0151fizet\u0151je. Ha a queue el\u0151fizet\u0151kkel rendelkezik, automatikusan csak akkor t\u00f6rl\u0151dik, amikor az \u00f6sszes el\u0151fizet\u0151 h\u00edvja a<\/strong>.<\/li>\n<li><code>Basic.Cancel<\/code> vagy lev\u00e1lik. A queue \u00e9lettartama csak \u00fagy \u00e9rhet v\u00e9get, ha nem t\u00f6rt\u00e9nt k\u00e9r\u00e9s a fel\u00e9 <code>Basic.Get<\/code> . Ellenkez\u0151 esetben a jelenlegi \u00e9lettartam-k\u00e9pess\u00e9g vissza\u00e1ll, \u00e9s a queue m\u00e1r nem t\u00f6rl\u0151dik automatikusan. Tov\u00e1bb\u00e1 <code>Basic.Get.<\/code>Otherwise, the current lifetime setting is reset, and the queue will no longer be automatically deleted. Also <strong>nincs garancia arra, hogy milyen gyorsan t\u00e1vol\u00edtj\u00e1k el a sort a lej\u00e1rati ideje ut\u00e1n<\/strong>.<\/li>\n<li><code>x-max-length<\/code> \u2014 meghat\u00e1rozza a sorban l\u00e9v\u0151 \u00fczenetek maxim\u00e1lis sz\u00e1m\u00e1t. Ha az \u00fczenetek sz\u00e1ma meghaladja a maxim\u00e1lis \u00e9rt\u00e9ket, a legr\u00e9gebbi \u00fczenetek kezdik elt\u00e1vol\u00edtani<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 3. r\u00e9sz. Queues \u00e9s Bindings meg\u00e9rt\u00e9se\" 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-length-bytes<\/code> \u2014 meghat\u00e1rozza az \u00fczenetek hasznos terhel\u00e9s\u00e9nek maxim\u00e1lisan megengedett \u00f6sszes\u00edtett m\u00e9ret\u00e9t a sorban. Ha ezt a be\u00e1ll\u00edtott \u00e9rt\u00e9ket t\u00fall\u00e9pik (t\u00falcsordul\u00e1s l\u00e9p fel a k\u00f6vetkez\u0151 \u00fczenet k\u00f6zz\u00e9t\u00e9telekor), a legr\u00e9gebbi \u00fczenetek kezdenek elt\u00e1vol\u00edtani<\/li>\n<li><code>x-overflow<\/code> \u2014 ez az argumentum a sor t\u00falcsordul\u00e1s\u00e1nak k\u00f6vetkezm\u00e9nyeinek be\u00e1ll\u00edt\u00e1s\u00e1ra szolg\u00e1l. K\u00e9t \u00e9rt\u00e9k \u00e9rhet\u0151 el: <code>drop-head<\/code> (alap\u00e9rtelmezett \u00e9rt\u00e9k) \u00e9s <code>reject-publish<\/code>. Ha a <code>drop-head<\/code>opci\u00f3t v\u00e1lasztjuk, a legr\u00e9gebbi \u00fczeneteket elt\u00e1vol\u00edtj\u00e1k. Ha <code>reject-publish<\/code>opci\u00f3t v\u00e1lasztjuk, az \u00fczenetek fogad\u00e1sa felf\u00fcggeszt\u00e9sre ker\u00fcl<\/li>\n<li><code>x-dead-letter-exchange<\/code> \u2014 meghat\u00e1rozza azt az exchange-t, ahov\u00e1 a visszautas\u00edtott \u00fczenetek mennek, amelyek nem ker\u00fclnek \u00fajra a sorba<\/li>\n<li><code>x-dead-letter-routing-key<\/code> \u2014 meghat\u00e1rozza a nem k\u00f6telez\u0151 ir\u00e1ny\u00edt\u00e1si kulcsot a visszautas\u00edtott \u00fczenetekhez<\/li>\n<li><code>x-max-priority<\/code> \u2014 lehet\u0151v\u00e9 teszi a sorban a priorit\u00e1sok szerinti rendez\u00e9st a maxim\u00e1lis priorit\u00e1s 255 \u00e9rt\u00e9kkel (RabbitMQ 3.5.0 \u00e9s \u00fajabb verzi\u00f3k). A sz\u00e1m a maxim\u00e1lis priorit\u00e1st jelzi, amelyet a sor t\u00e1mogatni fog. Ha a param\u00e9ter nincs be\u00e1ll\u00edtva, a sor nem fogja t\u00e1mogatni az \u00fczenetek priorit\u00e1s\u00e1t<\/li>\n<li><code>x-queue-mode<\/code> \u2014 lehet\u0151v\u00e9 teszi a sor v\u00e1lt\u00e1s\u00e1t <strong>lusta m\u00f3dba<\/strong>. Ebben a m\u00f3dban annyi \u00fczenetet t\u00e1rolnak, amennyit csak lehet a lemezen. A mem\u00f3ria haszn\u00e1lata minim\u00e1lis lesz. Ha ez nincs be\u00e1ll\u00edtva, a sor az \u00fczeneteket a mem\u00f3ri\u00e1ban t\u00e1rolja, hogy az \u00fczeneteket a lehet\u0151 leggyorsabban sz\u00e1ll\u00edthassa<\/li>\n<li><code>x-queue-master-locator<\/code> \u2014 ha van klaszter\u00fcnk, be lehet \u00e1ll\u00edtani a mester sort<\/li>\n<li><code>x-ha-policy<\/code> \u2014 HA sorok l\u00e9trehoz\u00e1sakor haszn\u00e1lj\u00e1k, \u00e9s meghat\u00e1rozza, hogyan fog az \u00fczenet eloszlani a csom\u00f3pontok k\u00f6z\u00f6tt. Ha be van \u00e1ll\u00edtva az \u00e9rt\u00e9k <code>mind<\/code>, az \u00fczenet ment\u00e9sre ker\u00fcl minden csom\u00f3ponton. Ha az \u00e9rt\u00e9k <code>nodes<\/code>, az \u00fczenet csak a klaszter meghat\u00e1rozott csom\u00f3pontjain marad meg<\/li>\n<li><code>x-ha-nodes<\/code> \u2014 meghat\u00e1rozza azokat a csom\u00f3pontokat, amelyekhez egy sor tartozni fog <code>HA<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 3. r\u00e9sz. Queues \u00e9s Bindings meg\u00e9rt\u00e9se\" src=\"\/wp-content\/uploads\/2020\/03\/a8f660b6c0a43626e4025cf7769a4425.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha a sor l\u00e9trehoz\u00e1sa <strong>lehets\u00e9ges<\/strong>, a szerver szinkronikus <code>RPC<\/code> v\u00e1laszt fog k\u00fcldeni az \u00fcgyf\u00e9lnek <code>Queue.DeclareOk<\/code>. Ha a sor l\u00e9trehoz\u00e1sa <strong>lehetetlen<\/strong> (k\u00e9relmez\u00e9s sor\u00e1n hiba t\u00f6rt\u00e9nt <code>Queue.Declare<\/code>), akkor <strong>a csatorna le fog z\u00e1rulni<\/strong> a szerver \u00e1ltal a <code>Channel.Close parancs seg\u00edts\u00e9g\u00e9vel<\/code> \u00e9s az \u00fcgyf\u00e9l kiv\u00e9telt kap <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>, amely tartalmazni fog egy hiba k\u00f3dot \u00e9s annak le\u00edr\u00e1s\u00e1t. <\/p>\n<p><\/p>\n<p><strong>\u00dajrah\u00edv\u00e1s<\/strong> <code>Queue.Declare<\/code> <strong>hasonl\u00f3 param\u00e9terekkel<\/strong> hasznos inform\u00e1ci\u00f3t ad vissza err\u0151l a sorban. P\u00e9ld\u00e1ul a sorban v\u00e1rakoz\u00f3 \u00fczenetek \u00f6sszes\u00edtett sz\u00e1ma \u00e9s a r\u00e1 feliratkozott fogyaszt\u00f3k \u00f6sszes\u00edtett sz\u00e1ma. <\/p>\n<p><\/p>\n<p>H\u00edv\u00e1s <code>Queue.Declare<\/code> a felhaszn\u00e1l\u00f3 azonos\u00edt\u00f3val, akinek nincsenek a sz\u00fcks\u00e9ges jogai <strong>lez\u00e1rja a csatorn\u00e1t<\/strong> a parancs seg\u00edts\u00e9g\u00e9vel <code>Channel.Close parancs seg\u00edts\u00e9g\u00e9vel<\/code> \u00e9s az \u00fcgyf\u00e9l kiv\u00e9telt kap <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>, amely tartalmazni fog egy hiba k\u00f3dot <noindex><a rel=\"nofollow\" href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/HTTP\/Status\/403\">403<\/a><\/noindex> \u00e9s annak le\u00edr\u00e1s\u00e1t.<\/p>\n<p><\/p>\n<p>Miut\u00e1n a sor legal\u00e1bb 10 m\u00e1sodpercig inakt\u00edv, <strong>\u00e1lomba mer\u00fcl<\/strong>, GC-t h\u00edv el\u0151 a sorban, ami jelent\u0151s mem\u00f3ria megtakar\u00edt\u00e1st eredm\u00e9nyez ennek a sor\u00e1nak.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-queue-cherez-graficheskiy-interfeys\"><em>Queue l\u00e9trehoz\u00e1sa a grafikus fel\u00fcleten<\/em><\/h4>\n<p><\/p>\n<p>Bel\u00e9p\u00fcnk az adminisztr\u00e1tori panelre <code>RabbitMQ<\/code> a felhaszn\u00e1l\u00f3val <code>guest<\/code> (felhaszn\u00e1l\u00f3n\u00e9v: <code>guest<\/code> \u00e9s jelsz\u00f3: <code>guest<\/code>). K\u00e9rj\u00fck, vegye figyelembe, hogy a felhaszn\u00e1l\u00f3 <code>guest<\/code> csak a helyi g\u00e9pr\u0151l csatlakozhat. Most t\u00e9rj\u00fcnk \u00e1t a <code>Sorok<\/code> f\u00fclre \u00e9s kattintsunk a <code>\u00daj sor hozz\u00e1ad\u00e1sa<\/code>. T\u00f6ltse ki a tulajdons\u00e1gokat:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 3. r\u00e9sz. Queues \u00e9s Bindings meg\u00e9rt\u00e9se\" src=\"\/wp-content\/uploads\/2020\/03\/ea77a406ad16f0871c7197e96a66818f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Amint megadjuk az \u00f6sszes sz\u00fcks\u00e9ges adatot \u00e9s r\u00e1kattintunk a <code>Sorok hozz\u00e1ad\u00e1sa<\/code>, a sor megjelenik a f\u0151list\u00e1ban.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 3. r\u00e9sz. Queues \u00e9s Bindings meg\u00e9rt\u00e9se\" src=\"\/wp-content\/uploads\/2020\/03\/8342e044a0d6c0a035a2c9f646035cad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A sor nev\u00e9re kattintva megjelenik a r\u00e9szletes inform\u00e1ci\u00f3 r\u00f3la. Itt be\u00e1ll\u00edthatjuk a k\u00f6t\u0151d\u00e9st a csere \u00e9s a sor k\u00f6z\u00f6tt, megtekinthetj\u00fck a list\u00e1t <code>consumers<\/code>, \u00fczeneteket publik\u00e1lhatunk\/megkaphatunk, t\u00f6r\u00f6lhetj\u00fck a sort \u00e9s megtekinthetj\u00fck a statisztik\u00e1t.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-binding\"><em>K\u00f6t\u00e9s l\u00e9trehoz\u00e1sa<\/em><\/h4>\n<p><\/p>\n<p>A k\u00f6t\u00e9s l\u00e9trehoz\u00e1sa szinkron <code>RPC<\/code> lek\u00e9r\u00e9ssel a szerverhez. A k\u00e9r\u00e9s a k\u00f6vetkez\u0151 met\u00f3dussal t\u00f6rt\u00e9nik: <code>Queue.Bind<\/code>, az al\u00e1bbi param\u00e9terekkel:<\/p>\n<p><\/p>\n<ul>\n<li>a queue neve<\/li>\n<li>a csere nev\u00e9t<\/li>\n<li>egy\u00e9b param\u00e9terek<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00e9lda k\u00f6t\u00e9s l\u00e9trehoz\u00e1s\u00e1ra a <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 a sor neve<\/li>\n<li><code>exchange<\/code> \u2014 a csere neve<\/li>\n<li><code>routingKey<\/code> \u2014 a routing kulcs<\/li>\n<li><code>\u2014 v\u00e1laszthat\u00f3 argumentumok. R\u00e9szletesebben l\u00e1sd al\u00e1bb.<\/code> \u2014 opcion\u00e1lis argumentumok<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 3. r\u00e9sz. Queues \u00e9s Bindings meg\u00e9rt\u00e9se\" src=\"\/wp-content\/uploads\/2020\/03\/9123186c94a822309b679f26c2e511ea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha a k\u00f6t\u00e9s l\u00e9trehoz\u00e1sa <strong>lehets\u00e9ges<\/strong>, a szerver szinkronikus <code>RPC<\/code> v\u00e1laszt fog k\u00fcldeni az \u00fcgyf\u00e9lnek <code>Queue.BindOk<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-binding-cherez-graficheskiy-interfeys\"><em>K\u00f6t\u00e9s l\u00e9trehoz\u00e1sa a grafikus fel\u00fcleten<\/em><\/h4>\n<p><\/p>\n<p>Bel\u00e9p\u00fcnk az adminisztr\u00e1tori panelre <code>RabbitMQ<\/code> a felhaszn\u00e1l\u00f3val <code>guest<\/code> (felhaszn\u00e1l\u00f3n\u00e9v: <code>guest<\/code> \u00e9s jelsz\u00f3: <code>guest<\/code>). K\u00e9rj\u00fck, vegye figyelembe, hogy a felhaszn\u00e1l\u00f3 <code>guest<\/code> csak a helyi g\u00e9pr\u0151l csatlakozhat. Most t\u00e9rj\u00fcnk \u00e1t a <code>Sorok<\/code> \u00e9s kattintsunk a sorra <code>my_queue<\/code>. T\u00f6ltse ki a mez\u0151ket a szakaszban <code>k\u00f6t\u00e9sek<\/code>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 3. r\u00e9sz. Queues \u00e9s Bindings meg\u00e9rt\u00e9se\" src=\"\/wp-content\/uploads\/2020\/03\/7db6b42a4f29a1860aabe54ade0b6833.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Amint megadjuk az \u00f6sszes sz\u00fcks\u00e9ges adatot \u00e9s r\u00e1kattintunk a <code>K\u00f6ti<\/code>, a k\u00f6t\u00e9s megjelenik a f\u0151list\u00e1ban:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 3. r\u00e9sz. Queues \u00e9s Bindings meg\u00e9rt\u00e9se\" 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>Ebben a r\u00e9szben a C# k\u00f3d seg\u00edts\u00e9g\u00e9vel le\u00edrjuk a sort \u00e9s a k\u00f6t\u00e9sek, mintha k\u00f6nyvt\u00e1rat kellene fejleszten\u00fcnk. Lehet, hogy ez hasznos lesz a meg\u00e9rt\u00e9shez.<\/p>\n<p><\/p>\n<pre><code class=\"cs\">public interface IQueue\n    {        \n        string Name { get; }\n\n        \/\/ <summary>\n        \/\/     Ha a true \u00e9rt\u00e9kre \u00e1ll\u00edtja, akkor a queue \u00e1lland\u00f3 lesz. \n        \/\/     Ez a lemezen t\u00e1rol\u00f3dik, \u00e9s t\u00fal\u00e9lheti a szerver\/broker \u00fajraind\u00edt\u00e1s\u00e1t. \n        \/\/     Ha a false \u00e9rt\u00e9kre \u00e1ll\u00edtja, akkor a queue ideiglenes, \u00e9s t\u00f6r\u00f6lve lesz, \n        \/\/     amikor a szerver\/broker \u00fajraindul\n        \/\/ <\/summary>\n        bool IsDurable { get; }\n\n        \/\/ <summary>\n        \/\/     Ha az \u00e9rt\u00e9k true, akkor \n        \/\/     ez a queue csak egy consumer-hez val\u00f3 kapcsol\u00f3d\u00e1st enged\u00e9lyez\n        \/\/ <\/summary>\n        bool IsExclusive { get; }\n\n        \/\/ <summary>\n        \/\/     Automatikus t\u00f6rl\u00e9s. \n        \/\/     A queue t\u00f6rl\u00e9sre ker\u00fcl, amikor az \u00f6sszes kliens lev\u00e1lik.\n        \/\/ <\/summary>\n        bool IsAutoDelete { get; }\n\n        \/\/ <summary>\n        \/\/     Opcion\u00e1lis argumentumok\n        \/\/ <\/summary>\n        IDictionary 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 arguments = null)\n        {\n            Name = name ??\n                throw new ArgumentNullException(name, $\"{name} nem lehet \u00fcres\");\n\n            IsDurable = isDurable;\n            IsExclusive = isExclusive;\n            IsAutoDelete = isAutoDelete;\n            Arguments = arguments ?? new Dictionary();\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 Arguments { get; }\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">public static class QueueMode\n    {       \n        public const string Default = \"default\";\n        \/\/ <summary>\n        \/\/     Lust\u00e1s m\u00f3d. A lust\u00e1s m\u00f3d megk\u00f6veteli, hogy a\n        \/\/     lehet\u0151 legt\u00f6bb \u00fczenetet t\u00e1roljunk a lemezen, hogy cs\u00f6kkents\u00fck\n        \/\/     a mem\u00f3riahaszn\u00e1latot\n        \/\/ <\/summary>\n        public const string Lazy = \"lazy\";\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">public interface IBinding\n    {\n        \/\/ <summary>\n        \/\/     K\u00f6zvet\u00edt\u0151, amely a k\u00f6t\u0151d\u00e9ssel fog \u00f6sszekapcsol\u00f3dni\n        \/\/ <\/summary>\n        IExchange Exchange { get; }\n\n        \/\/ <summary>\n        \/\/     \u00datvonal kulcs\n        \/\/ <\/summary>\n        string RoutingKey { get; }\n\n        \/\/ <summary>\n        \/\/     Opcion\u00e1lis argumentumok\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>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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. 3. r\u00e9sz. Fedezz\u00fck fel a sorokat (Queues) \u00e9s a k\u00f6t\u00e9seket (Bindings) | ProHoster","description":"A sor (Queue) \u2014 egy adatstrukt\u00fara a lemezen vagy a RAM-ban, amely \u00fczenetek hivatkoz\u00e1sait t\u00e1rolja, \u00e9s \u00e1tadja azok m\u00e1solat\u00e1t a fogyaszt\u00f3knak (consumers).","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/73065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=73065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/73065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/73066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=73065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=73065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=73065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}