{"id":69346,"date":"2020-02-18T14:44:04","date_gmt":"2020-02-18T11:44:04","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/rabbitmq-chast-1-introduction-erlang-amqp"},"modified":"2020-03-03T16:14:59","modified_gmt":"2020-03-03T13:14:59","slug":"rabbitmq-chast-1-introduction-erlang-amqp","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","title":{"rendered":"RabbitMQ. Del 1. Introduktion. Erlang, AMQP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Goddag, Habr! Jeg vil dele en l\u00e6re- og referenceguide med de oplysninger, jeg har samlet om <code>RabbitMQ<\/code> og komprimeret til korte anbefalinger og konklusioner. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Indholdsfortegnelse<\/h3>\n<p><\/p>\n<ul>\n<li>RabbitMQ. Del 1. Introduktion. Erlang, AMQP og RPC<\/li>\n<li>RabbitMQ. Del 2. Vi ser p\u00e5 Exchanges<\/li>\n<li>RabbitMQ. Del 3. Vi ser p\u00e5 Queues og Bindings<\/li>\n<li>RabbitMQ. Del 4. Vi ser p\u00e5, hvad beskeder og rammer er<\/li>\n<li>RabbitMQ. Del 5. Ydeevne for publicering og forbrug af beskeder<\/li>\n<li>RabbitMQ. Del 6. Oversigt over modulerne Federation og Shovel<\/li>\n<li>RabbitMQ. Del 7. Detaljer om Connection og Channel<\/li>\n<li>RabbitMQ. Del 8. RabbitMQ i .NET<\/li>\n<li>RabbitMQ. Del 9. Overv\u00e5gning<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"kratko-pro-amqp\">Kort om AMQP<\/h3>\n<p><\/p>\n<blockquote><p>AMQP (Advanced Message Queuing Protocol) - en \u00e5ben protokol til overf\u00f8rsel af beskeder mellem systemkomponenter. Hovedideen er, at separate undersystemer (eller uafh\u00e6ngige applikationer) kan udveksle beskeder p\u00e5 vilk\u00e5rlig m\u00e5de gennem en AMQP-broker, som h\u00e5ndterer routing, sikrer mulig leverance, fordeler dataflows og abonnerer p\u00e5 de relevante typer beskeder.<\/p><\/blockquote>\n<p>Protokol <code>AMQP<\/code> introducerer tre begreber:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 1. Introduktion. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/bb523c277776ca1ae13fcb9eb10788df.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li><code>exchange<\/code> (udvekslingspunkt eller udveksling) - beskeder sendes til den. Udvekslingspunktet <strong>fordeler besked<\/strong> til \u00e9n eller flere k\u00f8er. Den <strong>ruter beskeder til k\u00f8en<\/strong> baseret p\u00e5 de oprettede forbindelser (<code>binding<\/code>) mellem den og k\u00f8en<\/li>\n<li><code>k\u00f8<\/code> (k\u00f8) - en datastruktur p\u00e5 disk eller i RAM, der <strong>opbevarer referencer til beskeder og leverer kopier af beskeder <code>forbrugere<\/code><\/strong> (til forbrugerne)<\/li>\n<li><code>binding<\/code> (binding) - en regel, der <strong>fort\u00e6ller udvekslingspunktet, hvilken af k\u00f8erne disse beskeder skal sendes til<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Protokollen fungerer over <noindex><a rel=\"nofollow\" href=\"https:\/\/www.amqp.org\/product\/architecture\">TCP\/IP<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"kratko-pro-erlang\">Kort om Erlang<\/h3>\n<p><\/p>\n<p>Projektets kildekode findes i depotet p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\">GitHub<\/a><\/noindex>. Arkitekturen <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-server\">RabbitMQ-server<\/a><\/noindex> er baseret p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.erlang.org\/\">Erlang<\/a><\/noindex> og BEAM.<\/p>\n<p><\/p>\n<blockquote><p><code>Erlang<\/code> udviklet af <code>Ericsson<\/code> i midten af 1980'erne som et distribueret, fejltolerant realtidssystem til applikationer, der kr\u00e6ver fejlfri drift p\u00e5 99,999%. <code>Erlang<\/code> anvendes i forskellige industrier og moderne applikationer, f.eks. i <code>WhatsApp<\/code>. L\u00e6s mere i artiklen <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276951\/\">arkitekturen af WhatsApp, som Facebook k\u00f8bte for 19 milliarder dollars<\/a><\/noindex><\/p><\/blockquote>\n<p><\/p>\n<h3 id=\"kratko-pro-rabbitmq\">Kort om RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2013 det er en open source messaging broker. Den rutere beskeder if\u00f8lge de grundl\u00e6ggende principper for protokollen <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">AMQP<\/a><\/noindex> beskrevet i <noindex><a rel=\"nofollow\" href=\"http:\/\/www.amqp.org\/resources\/download\">specifikationerne<\/a><\/noindex>. <code>RabbitMQ<\/code> implementerer og supplerer protokollen <code>AMQP<\/code>.<\/p>\n<p><\/p>\n<p>Hovedideen i messaging-modellen i <code>RabbitMQ<\/code> er, at <code>producer<\/code> (udgiver) ikke sender beskeder direkte til k\u00f8en. Faktisk ved udgiveren ofte ikke, om beskeden overhovedet vil blive leveret til nogen k\u00f8. <\/p>\n<p><\/p>\n<p>I stedet for dette kan udgiveren kun sende meddelelser til en broker. P\u00e5 den ene side modtager brokeren meddelelser fra udgivere, og p\u00e5 den anden sender den dem til k\u00f8er. Brokeren skal vide pr\u00e6cist, hvad der skal g\u00f8res med den modtagne meddelelse. B\u00f8r den tilf\u00f8jes til en bestemt k\u00f8? B\u00f8r den tilf\u00f8jes til flere k\u00f8er? Eller skal meddelelsen ignoreres?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 1. Introduktion. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/1deaebddebde216b8f706953ddf2d3c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Arbejdet kan kort beskrives som f\u00f8lger: <code>RabbitMQ<\/code> Udgiveren sender en meddelelse til en bestemt broker<\/p>\n<p><\/p>\n<ol>\n<li>Brokeren, der modtager meddelelsen, ruter den til en eller flere k\u00f8er i overensstemmelse med bindingreglerne mellem den og k\u00f8en<\/li>\n<li>K\u00f8en gemmer en reference til denne meddelelse. Selve meddelelsen gemmes i hukommelsen eller p\u00e5 disken<\/li>\n<li>N\u00e5r forbrugeren er klar til at modtage meddelelsen fra k\u00f8en, opretter serveren en kopi af meddelelsen via reference og sender den<\/li>\n<li>Forbrugeren modtager meddelelsen og sender en bekr\u00e6ftelse tilbage til brokeren<\/li>\n<li>Brokeren, der modtager bekr\u00e6ftelsen, fjerner kopien af meddelelsen fra k\u00f8en. Derefter fjerner den den fra hukommelsen og disken<\/li>\n<li>RPC (remote procedure call)<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"rpc\"><em>RPC<\/em><\/h4>\n<p><\/p>\n<p>Proces <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A3%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80\">ligger til grund for n\u00e6sten alle interaktioner med kernen<\/a><\/noindex> . For eksempel indledende dr\u00f8ftelser af betingelserne med kunden <code>RabbitMQ<\/code>, demonstrerer en bestemt proces <code>RabbitMQ<\/code>. N\u00e5r denne sekvens er afsluttet, <code>RPC<\/code>vil den v\u00e6re klar til at modtage anmodninger fra kunden: <code>RabbitMQ<\/code> Derudover kan b\u00e5de specifikationen<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 1. Introduktion. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/059f37304f45a1f0ff625b671f6462ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>og klienten og serveren kalde kommandoer. Dette betyder, at klienten forventer interaktion med serveren. Kommandoer er klasser og metoder. For eksempel, <code>AMQP<\/code> Connection.Start <code>\u2013 kald af metoden<\/code> Forbindelse og kanaler <code>Start<\/code> klassen <code>Connection<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"podklyuchenie-i-kanaly\"><em>Til s\u00e5dan informationsudveksling mellem klienten og serveren bruges<\/em><\/h4>\n<p><\/p>\n<p>kanaler <strong>. Kanaler oprettes inden for<\/strong>en bestemt forbindelse <strong>. Hver kanal er isoleret fra andre kanaler. I det synkrone tilf\u00e6lde er det ikke muligt at udf\u00f8re den n\u00e6ste kommando, f\u00f8r et svar er modtaget.<\/strong>For at kunne sende kommandoer parallelt, skal man \u00e5bne flere kanaler. Hver kanal opretter en separat <\/p>\n<p><\/p>\n<p>proces. En forbindelse kan have mange kanaler ( <code>Erlang<\/code> multiplexing<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BF%D0%BB%D0%B5%D0%BA%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">). For hver kanal findes der visse strukturer og objekter i hukommelsen. Derfor, jo flere kanaler der er inden for forbindelsen, jo<\/a><\/noindex>mere hukommelse bruger RabbitMQ <strong>til at administrere s\u00e5dan en forbindelse.<\/strong> Et simpelt eksempel p\u00e5 oprettelse af en forbindelse og kanal ved hj\u00e6lp af<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 1. Introduktion. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/9bc388200f4f82eb8f98cb1dd1580675.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et simpelt eksempel p\u00e5 oprettelse af en forbindelse og en kanal ved hj\u00e6lp af <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/dotnet.html\">RabbitMQ.Client<\/a><\/noindex>:<\/p>\n<p><\/p>\n<pre><code class=\"cs\">\/\/ ...\nprivate void TryConnect()\n{\n    var factory = new ConnectionFactory() \n    {\n        HostName = &quot;host_name&quot;,\n        UserName = &quot;user_name&quot;,\n        Password = &quot;p@ssword&quot;,\n        \/\/ \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u043a\u043e\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\n        \/\/ \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0435\u0432 \u0441\u0435\u0442\u0438 \n        AutomaticRecoveryEnabled = true\n    };\n    _connection = factory.CreateConnection();\n}\n\/\/ ...\npublic void CreateChanel()\n{\n    _channel = _connection.CreateModel();\n    \/\/ other options \n}<\/code><\/pre>\n<p><\/p>\n<p>Det anbefales ikke at \u00e5bne en ny forbindelse for hver operation, da det <strong>vil medf\u00f8re h\u00f8je omkostninger<\/strong>. Kanalerne b\u00f8r ogs\u00e5 v\u00e6re vedvarende, men mange protokolfejl f\u00f8rer til lukning af kanalen, s\u00e5 kanalens levetid kan v\u00e6re kortere end forbindelsens.<\/p>\n<p><\/p>\n<h4 id=\"gde-ispolzuetsya-rabbitmq\"><em>Hvor bruges RabbitMQ?<\/em><\/h4>\n<p><\/p>\n<p>I konteksten af mikrotjenester anvendes protokollen <code>AMQP<\/code> og dens implementering i <code>RabbitMQ<\/code> bruges ofte til <strong>asynkron kommunikation<\/strong> mellem tjenester.<\/p>\n<p><\/p>\n<p>I konteksten <code>IIOT<\/code> protokol <code>AMQP<\/code> og dens implementering i <code>RabbitMQ<\/code> bruges til datadelings mellem servere (server-til-server). Derudover bruges pluginet <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/mqtt.html\">MQTT Plugin RabbitMQ<\/a><\/noindex> som er en implementering af protokollen <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/MQTT\">MQTT<\/a><\/noindex> til dataoverf\u00f8rsel mellem sensor og server i lav-hastighedsmilj\u00f8er med h\u00f8j latency (en komplet liste over underst\u00f8ttede protokoller er n\u00e6vnt p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/protocols.html\">projektets hjemmeside<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>I den n\u00e6ste artikel vil vi begynde at se n\u00e6rmere p\u00e5 Exchanges.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Links<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">Projektets hjemmeside RabbitMQ<\/a><\/noindex><\/li>\n<\/ul>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u043e\u043c-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0437\u043d\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e RabbitMQ \u0438 \u0441\u0436\u0430\u0442\u044c \u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u044b. \u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435 RabbitMQ. \u0427\u0430\u0441\u0442\u044c 1. Introduction. Erlang, AMQP \u0438 RPC RabbitMQ. \u0427\u0430\u0441\u0442\u044c 2. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Exchanges RabbitMQ. \u0427\u0430\u0441\u0442\u044c 3. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Queues \u0438 Bindings RabbitMQ. \u0427\u0430\u0441\u0442\u044c 4. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e-\u0442\u0430\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0444\u0440\u0435\u0439\u043c\u044b RabbitMQ. \u0427\u0430\u0441\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":69347,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-69346","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=\"\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u043e\u043c-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0437\u043d\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e RabbitMQ \u0438 \u0441\u0436\u0430\u0442\u044c \u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u044b.\" \/>\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\/da\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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 1. Introduction. Erlang, AMQP | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u043e\u043c-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0437\u043d\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e RabbitMQ \u0438 \u0441\u0436\u0430\u0442\u044c \u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u044b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp\" \/>\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-18T11:44:04+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:59+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 1. Introduktion. Erlang, AMQP | ProHoster","description":"Goddag, Habr! Jeg vil gerne dele en vejledning med de viden, jeg har samlet om RabbitMQ, og komprimere det til korte anbefalinger og konklusioner.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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 1. Introduction. Erlang, AMQP | ProHoster","og:description":"\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u043e\u043c-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0437\u043d\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e RabbitMQ \u0438 \u0441\u0436\u0430\u0442\u044c \u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u044b.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","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-18T11:44:04+00:00","article:modified_time":"2020-03-03T13:14:59+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"69346","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 19:24:45","updated":"2022-10-05 05:26:04","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/69346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=69346"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/69346\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/69347"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=69346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=69346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=69346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}