{"id":69621,"date":"2020-02-21T02:56:53","date_gmt":"2020-02-20T23:56:53","guid":{"rendered":"https:\/\/prohoster.info\/blog\/rabbitmq-chast-2-razbiraemsya-s-exchanges"},"modified":"2020-03-03T16:14:48","modified_gmt":"2020-03-03T13:14:48","slug":"rabbitmq-chast-2-razbiraemsya-s-exchanges","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","title":{"rendered":"RabbitMQ. Del 2. Vi g\u00e5r igenom Exchanges","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Exchange<\/code> \u2014 en v\u00e4xelkurs eller utbyte. Meddelanden skickas dit. <code>Exchange<\/code> <strong>f\u00f6rdelar meddelandet<\/strong> till ett eller flera k\u00f6er. Den <strong>ruttnar meddelanden till k\u00f6er<\/strong> baserat p\u00e5 de skapade kopplingarna (<code>bindings<\/code>) mellan den och k\u00f6n. <\/p>\n<p><\/p>\n<p><code>Exchange<\/code> inte \u00e4r <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">Erlang-process.<\/a><\/noindex>. Av skalbarhetssk\u00e4l <code>exchange<\/code> \u2013 \u00e4r en str\u00e4ng (l\u00e4nk till modulen med logik f\u00f6r ruttnande) i den inbyggda databasen <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Mnesia\">mnesia<\/a><\/noindex>. 1 tusen v\u00e4xlingsst\u00e4llen kommer att konsumera endast 1 MB minne. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Inneh\u00e5llsf\u00f6rteckning<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. Del 1. Introduktion. Erlang, AMQP och RPC<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">RabbitMQ. Del 2. Vi g\u00e5r igenom Exchanges<\/a><\/noindex><\/li>\n<li>RabbitMQ. Del 3. Vi g\u00e5r igenom Queues och Bindings<\/li>\n<li>RabbitMQ. Del 4. L\u00e5t oss f\u00f6rst\u00e5 vad meddelanden och ramar \u00e4r<\/li>\n<li>RabbitMQ. Del 5. Prestanda f\u00f6r publicering och konsumtion av meddelanden<\/li>\n<li>RabbitMQ. Del 6. \u00d6versikt av modulerna Federation och Shovel<\/li>\n<li>RabbitMQ. Del 7. Detaljer om Connection och Channel<\/li>\n<li>RabbitMQ. Del 8. RabbitMQ i .NET<\/li>\n<li>RabbitMQ. Del 9. \u00d6vervakning<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"direct-exchange\"><em>Direct Exchange<\/em><\/h4>\n<p><\/p>\n<p><code>Direct exchange<\/code> \u2013 anv\u00e4nds n\u00e4r du beh\u00f6ver <strong>leverera meddelanden till specifika k\u00f6er.<\/strong>Meddelandet publiceras i v\u00e4xelkursen med en specifik <strong>ruttningsnyckel<\/strong> och hamnar i alla k\u00f6er som \u00e4r kopplade till denna v\u00e4xelkurs med samma ruttningsnyckel. <strong>Ruttningsnyckeln \u00e4r en str\u00e4ng.<\/strong>S\u00f6kningen av \u00f6verensst\u00e4mmelse g\u00f6rs genom <strong>att kontrollera str\u00e4ngar f\u00f6r likhet.<\/strong>.<\/p>\n<p><\/p>\n<p>En grafisk representation av meddelandefl\u00f6det:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Vi g\u00e5r igenom Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/8ce3ab37542f2a7f8e7ac02a737c5f88.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I <code>rabbitmq<\/code> finns begreppet <strong>standardv\u00e4xel<\/strong>. Det \u00e4r <code>direct exchange<\/code> utan namn. Om den standardv\u00e4xeln anv\u00e4nds kommer meddelandet att rutnas till en k\u00f6 med namnet som \u00e4r lika med <strong>ruttningsnyckeln f\u00f6r meddelandet.<\/strong>. <\/p>\n<p><\/p>\n<h4 id=\"topic-exchange\"><em>Topic Exchange<\/em><\/h4>\n<p><\/p>\n<p><code>Topic exchange<\/code> \u2013 liknande <code>direct exchange<\/code> ger m\u00f6jlighet till selektiv rutning genom att j\u00e4mf\u00f6ra ruttningsnyckeln. Men i detta fall st\u00e4lls nyckeln in <strong>enligt ett m\u00f6nster.<\/strong>Vid skapandet av m\u00f6nstret anv\u00e4nds <code>0<\/code> eller fler ord (bokst\u00e4ver <code>AZ<\/code> och <code>az<\/code> och siffror <code>0-9<\/code>), \u00e5tskilda med punkt, samt tecken <code>*<\/code> och <code>#<\/code>. <\/p>\n<p><\/p>\n<ul>\n<li><code>*<\/code> \u2014 kan ers\u00e4ttas med exakt <code>1<\/code> ordet <\/li>\n<li><code>#<\/code> \u2014 kan ers\u00e4ttas med <code>0<\/code> eller fler ord. <\/li>\n<\/ul>\n<p><\/p>\n<p>En grafisk representation av meddelandefl\u00f6det:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Vi g\u00e5r igenom Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/a0ce48b291a3003eabbe61b3dfa5a4e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fr\u00e5n och med versionen <code>RabbitMQ 2.4.0<\/code> har rutningsalgoritmen f\u00f6r <code>topic exchange<\/code> blivit upp till <code>145<\/code> mycket snabbare. De uppn\u00e5dde detta genom att implementera tillv\u00e4gag\u00e5ngss\u00e4ttet <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/blog\/2011\/03\/28\/very-fast-and-scalable-topic-routing-part-2\/\">trie implementation<\/a><\/noindex>, vilket inneb\u00e4r att m\u00f6nstren presenteras som en tr\u00e4struktur. Exempel p\u00e5 m\u00f6nster <code>a.b.c<\/code>, <code>a.*.b.c<\/code>, <code>a.#.c<\/code> och <code>b.b.c<\/code> \u00e4r strukturerade p\u00e5 f\u00f6ljande s\u00e4tt:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Vi g\u00e5r igenom Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/56ef5809fec9eb6c1b50a362b89dd05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u00f6kningen av \u00f6verensst\u00e4mmelse med m\u00f6nstret sker fr\u00e5n roten och f\u00f6ljer uppifr\u00e5n och ner.<\/p>\n<p><\/p>\n<p>Egenskaper:<\/p>\n<p><\/p>\n<ul>\n<li>anv\u00e4ndning av denna v\u00e4xel kan bli <strong>ett bra val f\u00f6r potentiell framtida utveckling av applikationen.<\/strong>, eftersom mallarna alltid kan anpassas f\u00f6r att publicera meddelanden p\u00e5 samma s\u00e4tt <code>direct exchange<\/code> eller <code>fanout-utbyte<\/code><\/li>\n<li>mallar som anv\u00e4nds <code>*<\/code> <strong>mycket snabbare<\/strong>, \u00e4n mallar som anv\u00e4nds <code>#<\/code>. <\/li>\n<li><code>topic exchange<\/code> l\u00e5ngsammare <code>direct exchange<\/code><\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"fanout-exchange\"><em>Fanout-utbyte<\/em><\/h4>\n<p><\/p>\n<p><code>Fanout-utbyte<\/code> \u2013 <strong>alla meddelanden levereras till alla k\u00f6er<\/strong> \u00e4ven om meddelandet har en routning nyckel.<\/p>\n<p><\/p>\n<p>Egenskaper:<\/p>\n<p><\/p>\n<ul>\n<li><code>RabbitMQ<\/code> <strong>fungerar inte med routning nycklar och mallar<\/strong> vilket positivt p\u00e5verkar prestandan. Detta \u00e4r det snabbaste <code>exchange<\/code>;<\/li>\n<li>alla konsumenter m\u00e5ste kunna hantera alla meddelanden;<\/li>\n<\/ul>\n<p><\/p>\n<p>En grafisk representation av meddelandefl\u00f6det:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Vi g\u00e5r igenom Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/575d86093f151016aef8058fc7d92907.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h4 id=\"headers-exchange\"><em>Headers-utbyte<\/em><\/h4>\n<p><\/p>\n<p><code>Headers-utbyte<\/code> \u2014 dirigerar meddelanden till relaterade k\u00f6er baserat p\u00e5 j\u00e4mf\u00f6relsen av par (nyckel, v\u00e4rde) egenskap <code>headers<\/code> bindningar och motsvarande egenskap hos meddelandet. <code>headers<\/code> representerar <code>Dictionary&lt;nyckel, v\u00e4rde&gt;<\/code>. <\/p>\n<p><\/p>\n<p>Om en speciell nyckel l\u00e4ggs till i ordboken <code>x-match<\/code> med v\u00e4rdet <code>any<\/code>, s\u00e5 dirigeras meddelandet vid delvis matchning av par (nyckel, v\u00e4rde). Detta beteende \u00e4r liknande operat\u00f6ren <code>or<\/code>. <\/p>\n<p><\/p>\n<pre><code class=\"cs\">var bindingArguments = new Dictinary();\nbindingArguments.add(\"x-match\", \"any\");<\/code><\/pre>\n<p><\/p>\n<p>Som standard inneh\u00e5ller nyckeln <code>x-match<\/code> v\u00e4rdet <code>all<\/code>. Det inneb\u00e4r att meddelandet dirigeras vid fullst\u00e4ndig matchning av par (nyckel, v\u00e4rde). Detta beteende liknar operat\u00f6ren <code>och<\/code>.<\/p>\n<p><\/p>\n<p>En grafisk representation av meddelandefl\u00f6det:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Vi g\u00e5r igenom Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/e9a02a0df88cb2c0538b97cec9002bf4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Egenskaper:<\/p>\n<p><\/p>\n<ul>\n<li>extra flexibilitet<\/li>\n<li>extra ber\u00e4knings\u00f6verhead. Alla par (nyckel, v\u00e4rde) i attributet <code>headers<\/code> m\u00e5ste sorteras efter nyckelns namn innan v\u00e4rdena f\u00f6r meddelandets dirigering ber\u00e4knas. <strong>L\u00e5ngsammare \u00e4n andra typer av utbyte<\/strong>.<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"consistent-hashing-exchange\"><em>Consistent-Hashing-utbyte<\/em><\/h4>\n<p><\/p>\n<p>Detta utbyte \u00e4r <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-consistent-hash-exchange\">en plugin<\/a><\/noindex> och <strong>\u00e4r inte inbyggd<\/strong> p\u00e5 <code>RabbitMQ<\/code>.<\/p>\n<p><\/p>\n<p><code>Consistent-hashing-utbyte<\/code> (utbyte med konsekvent hashning) \u2013 anv\u00e4nds n\u00e4r det finns flera k\u00f6er som potentiella mottagare av meddelandet, och n\u00e4r det beh\u00f6vs f\u00f6r att balansera belastningen mellan dem. Kopplingen av meddelandet till k\u00f6n sker baserat p\u00e5 vikt (ett villkorligt str\u00e4ngv\u00e4rde fr\u00e5n <code>0 - n<\/code>). <\/p>\n<p><\/p>\n<p>Den motsvarande vikten av k\u00f6er antyder att varje k\u00f6 kommer att f\u00e5 <strong>ungef\u00e4r lika m\u00e5nga<\/strong> meddelanden (varje meddelande kommer att placeras endast i en k\u00f6). <strong>Det finns ingen fullst\u00e4ndig garanti f\u00f6r en j\u00e4mn f\u00f6rdelning av meddelanden<\/strong>. <\/p>\n<p><\/p>\n<p>En grafisk representation av meddelandefl\u00f6det:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Vi g\u00e5r igenom Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/dd22749cad463fe86619a98276554e10.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><code>Hash<\/code> ber\u00e4knas baserat p\u00e5 routning nyckeln eller egenskapen <code>headers<\/code> hos meddelandet. Om alla publicerade meddelanden hade olika routning nycklar eller <code>headers<\/code>, s\u00e5 kommer f\u00f6rdelningen att ske baserat p\u00e5 vikt. Annars kommer routning nyckeln att anv\u00e4ndas eller <code>headers<\/code>.<\/p>\n<p><\/p>\n<p><strong>Ska hj\u00e4lpa n\u00e4r anv\u00e4ndarens bandbredd beh\u00f6ver v\u00e4xa mer \u00e4n en l\u00f6sning med flera anv\u00e4ndare som anv\u00e4nder en k\u00f6.<\/strong><\/p>\n<p><\/p>\n<h4 id=\"kombinirovanie-obmennikov-e2e\"><em>Kombinering av v\u00e4xlare (E2E)<\/em><\/h4>\n<p><\/p>\n<p>Beteendet hos alla v\u00e4xlare kan kombineras genom kopplingar <strong>Exchange-to-Exchange<\/strong> (kombinering av v\u00e4xlare ing\u00e5r inte i specifikationen <code>AMQP<\/code>. Detta \u00e4r en protokollutvidgning fr\u00e5n sidan av <code>RabbitMQ<\/code>).<\/p>\n<p><\/p>\n<p>En grafisk representation av meddelandefl\u00f6det:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Vi g\u00e5r igenom Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/41ea01a0f43f2dd195fa4f34f7fc176c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Genom <code>E2E<\/code> kan vi hitta den r\u00e4tta skalbara konfigurationen som uppfyller b\u00e5de nuvarande och v\u00e4xande krav.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange\"><em>Skapande av Exchange<\/em><\/h4>\n<p><\/p>\n<p>Skapandet av en v\u00e4xlare sker genom en synkron <code>RPC<\/code> beg\u00e4ran till servern. Beg\u00e4ran g\u00f6rs genom metoden <code>Exchange.Declare<\/code>, som anropas med f\u00f6ljande parametrar:<\/p>\n<p><\/p>\n<ul>\n<li>namn p\u00e5 v\u00e4xlaren<\/li>\n<li>typ av v\u00e4xlare<\/li>\n<li>andra parametrar<\/li>\n<\/ul>\n<p><\/p>\n<p>Exempel p\u00e5 skapande av <code>exchange<\/code> med hj\u00e4lp av <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.ExchangeDeclare(\n    exchange: &quot;my_exchange&quot;,\n    type: &quot;direct&quot;,\n    durable: &quot;false&quot;,\n    autoDelete: &quot;false&quot;,\n    arguments: null\n);\n\/\/...<\/code><\/pre>\n<p><\/p>\n<ul>\n<li><code>exchange<\/code> \u2014 namnet p\u00e5 v\u00e4xlare som vi vill skapa. Namnet m\u00e5ste vara unikt<\/li>\n<li><code>typ<\/code> \u2014 typ av v\u00e4xlare<\/li>\n<li><code>h\u00e5llbar<\/code> \u2014 om det st\u00e4lls in <code>true<\/code>, s\u00e5 <code>exchange<\/code> kommer det att vara best\u00e4ndigt. Det kommer att lagras p\u00e5 disken och kan \u00f6verleva en omstart av servern\/m\u00e4klaren. Om v\u00e4rdet <code>false<\/code>, s\u00e5 <code>exchange<\/code> \u00e4r tempor\u00e4rt och kommer att tas bort n\u00e4r servern\/kr\u00e4ver en omstart<\/li>\n<li><code>autoDelete<\/code> \u2014 automatisk borttagning. <code>Exchange<\/code> kommer att tas bort n\u00e4r alla relaterade k\u00f6er tas bort<\/li>\n<li><code>argument<\/code> \u2014 valfria argument. Oftast anges <code>alternativ v\u00e4xlare<\/code> (<strong>alternativ v\u00e4xlare<\/strong>). Om ett meddelande inte kan g\u00e5 genom den ursprungliga v\u00e4gen kan det skickas till den alternativa v\u00e4xlaren f\u00f6r routing p\u00e5 ett annat s\u00e4tt.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Vi g\u00e5r igenom Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/6a352e92f94dadf58ba24de453806133.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Om skapandet <code>exchange<\/code> <strong>\u00e4r m\u00f6jligt<\/strong>, s\u00e5 kommer servern att skicka ett synkront <code>RPC<\/code> svar <code>Exchange.DeclareOk<\/code>. Om skapandet <strong>\u00e4r om\u00f6jligt<\/strong> (det har skett ett avslag p\u00e5 beg\u00e4ran <code>Exchange.Declare<\/code>), s\u00e5 <strong>kanalen st\u00e4ngs<\/strong> av servern med hj\u00e4lp av ett asynkront kommando <code>Channel.Close<\/code> och klienten f\u00e5r ett undantag <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>, som kommer att inneh\u00e5lla felkoden och dess beskrivning. <\/p>\n<p><\/p>\n<p>En v\u00e4xlare m\u00e5ste skapa innan meddelanden publiceras. Om du publicerar ett meddelande till en icke-existerande v\u00e4xlare \u2014 <code>RabbitMQ<\/code> tyst tas bort.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange-cherez-graficheskiy-interfeys\"><em>Skapande av Exchange via grafiskt gr\u00e4nssnitt<\/em><\/h4>\n<p><\/p>\n<p>G\u00e5 till administrationspanelen <code>RabbitMQ<\/code> under anv\u00e4ndaren <code>guest<\/code> (anv\u00e4ndarnamn: <code>guest<\/code> och l\u00f6senord: <code>guest<\/code>). Observera att anv\u00e4ndaren <code>guest<\/code> bara kan ansluta fr\u00e5n localhost. L\u00e5t oss nu g\u00e5 till fliken <code>Exchanges<\/code> och klicka p\u00e5 <code>L\u00e4gg till en ny v\u00e4xlare<\/code>. Fyll i egenskaperna:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Vi g\u00e5r igenom Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/c4fd31b8cdb8182690ec8c01ccd2a460.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>St\u00f6rsta delen av egenskaperna har beskrivits ovan. H\u00e4r noterar vi att om man st\u00e4ller in <code>Intern<\/code>, s\u00e5 kan utbytet endast anv\u00e4ndas f\u00f6r <code>E2E<\/code>. <code>Producer<\/code> kan inte skicka meddelanden till ett s\u00e5dant utbyte.<\/p>\n<p><\/p>\n<h3 id=\"zaklyuchenie\">Slutsats<\/h3>\n<p><\/p>\n<p>Vid utvecklingen av systemet \u00e4r det bekv\u00e4mt att beskriva topologin <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\">f\u00f6r rutning<\/a><\/noindex> med hj\u00e4lp av en graf. Men innan man b\u00f6rjar bygga grafen b\u00f6r man identifiera v\u00e4gar med h\u00f6g trafik, eftersom det \u00e4r dessa som kr\u00e4ver <strong>h\u00f6gre bandbredd<\/strong> (prestanda). D\u00e4refter kan trafiken klassificeras. Och f\u00f6rst d\u00e5 kan man b\u00f6rja bygga.<\/p>\n<p><\/p>\n<p>Om det finns ett <strong>\u00e4ndligt antal<\/strong> routningsnycklar, b\u00f6r man titta p\u00e5 flera <code>fanout-utbyte<\/code>, som \u00e4r 1:1 kopplade till routningsnyckeln. Kom ih\u00e5g att <code>fanout-utbyte<\/code> den \u00e4r snabbast.<\/p>\n<p><\/p>\n<p>Om antalet rutter <strong>str\u00e4var mot o\u00e4ndligheten<\/strong>, b\u00f6r man uppm\u00e4rksamma <code>topic exchange<\/code> eller, om m\u00f6nstret inte beh\u00f6vs, kan man v\u00e4lja <code>direktutbyte<\/code>, eftersom det \u00e4r snabbare. <code>topic exchange<\/code>.<\/p>\n<p><\/p>\n<p>Kombinationer av olika <code>exchange<\/code> b\u00f6r hj\u00e4lpa till att hitta r\u00e4tt <strong>skalerbar konfiguration<\/strong>, som uppfyller b\u00e5de nuvarande och v\u00e4xande krav f\u00f6r systemet.<\/p>\n<p><\/p>\n<p>Antalet <code>exchange<\/code> och k\u00f6er m\u00e5ste vara minimalt i f\u00f6rh\u00e5llande till antalet rutter.<\/p>\n<p><\/p>\n<p>I n\u00e4sta artikel kommer vi att b\u00f6rja titta n\u00e4rmare p\u00e5 Queues och Bindings.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">L\u00e4nkar<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">Webbplats f\u00f6r projektet RabbitMQ<\/a><\/noindex><\/li>\n<\/ul>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Exchange \u2014 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u0438\u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u043c\u0435\u043d\u0430. \u0412 \u043d\u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. Exchange \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439. \u041e\u043d \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 (bindings) \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e. Exchange \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Erlang-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c. \u0418\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 exchange \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 (\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043a\u043e\u0434\u043e\u043c, \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 \u043b\u043e\u0433\u0438\u043a\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438) \u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":69622,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-69621","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.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"Exchange \u2014 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u0438\u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u043c\u0435\u043d\u0430. \u0412 \u043d\u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. Exchange \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439.\" \/>\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\/sv\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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 2. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Exchanges | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Exchange \u2014 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u0438\u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u043c\u0435\u043d\u0430. \u0412 \u043d\u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. Exchange \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges\" \/>\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-02-20T23:56:53+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:48+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. Del 2. Vi g\u00e5r igenom Exchanges | ProHoster","description":"Exchange \u2013 en utbytespunkt eller bytespunkt. Meddelanden skickas till den. Exchange distribuerar meddelandet till en eller flera k\u00f6er.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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 2. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Exchanges | ProHoster","og:description":"Exchange \u2014 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u0438\u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u043c\u0435\u043d\u0430. \u0412 \u043d\u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. Exchange \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","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-02-20T23:56:53+00:00","article:modified_time":"2020-03-03T13:14:48+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"69621","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 17:31:26","updated":"2022-09-28 03:24:29","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/69621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=69621"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/69621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/69622"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=69621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=69621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=69621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}