{"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\/sv\/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>God dag, Habr! Jag vill dela med mig av en l\u00e4robok-guide med den kunskap jag har kunnat samla om <code>RabbitMQ<\/code> och sammanst\u00e4lla som korta rekommendationer och slutsatser. <\/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>RabbitMQ. Del 1. Introduktion. Erlang, AMQP och RPC<\/li>\n<li>RabbitMQ. Del 2. Vi g\u00e5r igenom Exchanges<\/li>\n<li>RabbitMQ. Del 3. Vi g\u00e5r igenom Queues och Bindings<\/li>\n<li>RabbitMQ. Del 4. Vi g\u00e5r igenom vad meddelanden och ramverk \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<h3 id=\"kratko-pro-amqp\">Kort om AMQP<\/h3>\n<p><\/p>\n<blockquote><p>AMQP (Advanced Message Queuing Protocol) \u2013 en \u00f6ppen protokoll f\u00f6r att \u00f6verf\u00f6ra meddelanden mellan systemkomponenter. Huvudid\u00e9n \u00e4r att separata delsystem (eller oberoende applikationer) kan utbyta meddelanden p\u00e5 valfritt s\u00e4tt genom en AMQP-broker, som ansvarar f\u00f6r routning, eventuellt garanterar leverans, distribuerar datastreams och prenumererar p\u00e5 n\u00f6dv\u00e4ndiga meddelandetyper.<\/p><\/blockquote>\n<p>Protokoll <code>AMQP<\/code> introducerar tre begrepp:<\/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> (utbytespunkt eller utbyte) \u2013 till vilken meddelanden skickas. Utbytespunkten <strong>f\u00f6rdelar meddelandet<\/strong> skickar vidare till en eller flera k\u00f6er. Den <strong>ruttnar meddelanden till k\u00f6er<\/strong> baserat p\u00e5 de skapade kopplingarna (<code>binding<\/code>) mellan den och k\u00f6n<\/li>\n<li><code>queue<\/code> (k\u00f6) \u2013 en databasstruktur p\u00e5 disk eller i RAM som <strong>lagrar referenser till meddelanden och ger kopior av meddelanden <code>consumers<\/code><\/strong> (konsumenter)<\/li>\n<li><code>binding<\/code> (bindning) \u2013 en regel som <strong>meddelar utbytespunkten till vilken av k\u00f6erna dessa meddelanden ska komma.<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Protokollet fungerar ovanp\u00e5 <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>K\u00e4llkoden f\u00f6r projektet finns i ett repository 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> \u00e4r baserad p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.erlang.org\/\">Erlang<\/a><\/noindex> och BEAM.<\/p>\n<p><\/p>\n<blockquote><p><code>Erlang<\/code> utvecklades av f\u00f6retaget <code>Ericsson<\/code> i mitten av 1980-talet som ett distribuerat, felfritt realtidsystem f\u00f6r applikationer som kr\u00e4ver en p\u00e5litlighet p\u00e5 99,999%. <code>Erlang<\/code> anv\u00e4nds inom olika branscher och moderna applikationer, exempelvis i <code>WhatsApp<\/code>. Mer kan l\u00e4sas i artikeln <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276951\/\">WhatsApp-arkitektur, som Facebook k\u00f6pte f\u00f6r 19 miljarder dollar.<\/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 \u00e4r en meddelandebroker med \u00f6ppen k\u00e4llkod. Den routar meddelanden enligt alla grundl\u00e4ggande principer f\u00f6r protokollet <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">AMQP<\/a><\/noindex> beskrivna i <noindex><a rel=\"nofollow\" href=\"http:\/\/www.amqp.org\/resources\/download\">specifikationen<\/a><\/noindex>. <code>RabbitMQ<\/code> implementerar och kompletterar protokollet. <code>AMQP<\/code>.<\/p>\n<p><\/p>\n<p>Huvudid\u00e9n med meddelandeutbytesmodellen i <code>RabbitMQ<\/code> \u00e4r att <code>producer<\/code> (producent) inte skickar meddelanden direkt till k\u00f6n. I sj\u00e4lva verket vet producenten oftast inte ens om meddelandet kommer att levereras till n\u00e5gon k\u00f6. <\/p>\n<p><\/p>\n<p>Ist\u00e4llet kan utgiveren skicka meddelanden endast till en m\u00e4klare. \u00c5 ena sidan tar m\u00e4klaren emot meddelanden fr\u00e5n utgivarna, \u00e5 andra sidan skickar den dem till k\u00f6er. M\u00e4klaren m\u00e5ste veta exakt vad som ska g\u00f6ras med det mottagna meddelandet. Ska det l\u00e4ggas till i en viss k\u00f6? Ska det l\u00e4ggas till i flera k\u00f6er? Eller ska meddelandet ignoreras?<\/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>Kortfattat kan arbetet <code>RabbitMQ<\/code> beskrivas p\u00e5 f\u00f6ljande s\u00e4tt:<\/p>\n<p><\/p>\n<ol>\n<li>Utgivaren skickar ett meddelande till en specifik m\u00e4klare<\/li>\n<li>M\u00e4klaren, n\u00e4r den mottar ett meddelande, dirigerar det till en eller flera k\u00f6er enligt bindningsreglerna mellan m\u00e4klaren och k\u00f6erna<\/li>\n<li>K\u00f6n lagrar en referens till detta meddelande. Meddelandet i sig lagras i RAM eller p\u00e5 disk<\/li>\n<li>N\u00e4r konsumenten \u00e4r redo att h\u00e4mta ett meddelande fr\u00e5n k\u00f6n, skapar servern en kopia av meddelandet via referensen och skickar det<\/li>\n<li>Konsumenten tar emot meddelandet och skickar en bekr\u00e4ftelse till m\u00e4klaren<\/li>\n<li>M\u00e4klaren, n\u00e4r den f\u00e5r bekr\u00e4ftelsen, tar bort kopian av meddelandet fr\u00e5n k\u00f6n. D\u00e4refter tar den bort den fr\u00e5n RAM och disk<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"rpc\"><em>RPC<\/em><\/h4>\n<p><\/p>\n<p>Process <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\">RPC (remote procedure call)<\/a><\/noindex> ligger till grund f\u00f6r praktiskt taget all interaktion med k\u00e4rnan <code>RabbitMQ<\/code>. Till exempel, inledande diskussioner om kundens villkor med <code>RabbitMQ<\/code>, visar en viss process <code>RPC<\/code>. N\u00e4r denna sekvens \u00e4r klar, <code>RabbitMQ<\/code> kommer att vara redo att ta emot f\u00f6rfr\u00e5gningar fr\u00e5n kunden:<\/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>Det finns ocks\u00e5 i specifikationen <code>AMQP<\/code> och b\u00e5de klient och server kan anropa kommandon. Detta inneb\u00e4r att klienten f\u00f6rv\u00e4ntar sig interaktion med servern. Kommandon \u00e4r klasser och metoder. Till exempel, <code>Connection.Start<\/code> \u2013 anrop av metoden <code>Start<\/code> klassen <code>Connection<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"podklyuchenie-i-kanaly\"><em>Anslutning och kanaler<\/em><\/h4>\n<p><\/p>\n<p>F\u00f6r s\u00e5dan informationsutbyte mellan klienten och servern anv\u00e4nds <strong>kanaler<\/strong>. Kanaler skapas inom ramen f\u00f6r <strong>en viss anslutning<\/strong>. Varje kanal \u00e4r isolerad fr\u00e5n andra kanaler. I synkron l\u00e4ge kan man inte utf\u00f6ra n\u00e4sta kommando f\u00f6rr\u00e4n svar har mottagits. <\/p>\n<p><\/p>\n<p>F\u00f6r att kunna skicka kommandon parallellt m\u00e5ste flera kanaler \u00f6ppnas. Varje kanal skapar en separat <code>Erlang<\/code> process. En anslutning kan ha m\u00e5nga kanaler (<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\">multiplexing<\/a><\/noindex>). F\u00f6r varje kanal finns det vissa strukturer och objekt i minnet. Ju fler kanaler som finns inom en anslutning, desto <strong>mer minne anv\u00e4nds RabbitMQ<\/strong> f\u00f6r att hantera en s\u00e5dan anslutning.<\/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>Ett enkelt exempel p\u00e5 att skapa en anslutning och kanal 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\">\/\/ ...\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>Att \u00f6ppna en ny anslutning f\u00f6r varje operation rekommenderas starkt inte, eftersom detta <strong>kommer att leda till stora kostnader<\/strong>. Kanalerna b\u00f6r ocks\u00e5 vara permanenta, men m\u00e5nga protokollfel leder till att kanalen st\u00e4ngs, s\u00e5 livsl\u00e4ngden f\u00f6r kanalen kan vara kortare \u00e4n f\u00f6r anslutningen.<\/p>\n<p><\/p>\n<h4 id=\"gde-ispolzuetsya-rabbitmq\"><em>Var anv\u00e4nds RabbitMQ?<\/em><\/h4>\n<p><\/p>\n<p>I kontexten av mikrotj\u00e4nster anv\u00e4nds protokollet <code>AMQP<\/code> och dess implementation i <code>RabbitMQ<\/code> anv\u00e4nds ofta f\u00f6r <strong>asynkron kommunikation<\/strong> mellan tj\u00e4nster.<\/p>\n<p><\/p>\n<p>I kontexten av <code>IIOT<\/code> protokoll <code>AMQP<\/code> och dess implementation i <code>RabbitMQ<\/code> anv\u00e4nds f\u00f6r datadelning mellan servrar (server-till-server). Dessutom anv\u00e4nds plugin <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/mqtt.html\">MQTT Plugin RabbitMQ<\/a><\/noindex> som \u00e4r en implementation av protokollet <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/MQTT\">MQTT<\/a><\/noindex> f\u00f6r datatransmission mellan sensorn och servern i l\u00e5ga hastighetsmilj\u00f6er med h\u00f6g latens (en fullst\u00e4ndig lista \u00f6ver st\u00f6dda protokoll finns p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/protocols.html\">projektets webbplats<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>I n\u00e4sta artikel kommer vi att b\u00f6rja titta n\u00e4rmare p\u00e5 Exchanges.<\/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\/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.4 - 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\/sv\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp\" \/>\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 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\/sv\/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":"Hej, Habr! Jag vill dela en handbok med kunskap som jag har lyckats samla om RabbitMQ och sammanfatta i korta rekommendationer och slutsatser.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","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 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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/69346","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=69346"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/69346\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/69347"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=69346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=69346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=69346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}