{"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\/nl\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","title":{"rendered":"RabbitMQ. Deel 1. Inleiding. Erlang, AMQP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo Habr! Ik wil een studiehandleiding delen met kennis die ik heb kunnen verzamelen over <code>RabbitMQ<\/code> en samengeperst in korte aanbevelingen en conclusies. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Inhoudsopgave<\/h3>\n<p><\/p>\n<ul>\n<li>RabbitMQ. Deel 1. Introductie. Erlang, AMQP en RPC<\/li>\n<li>RabbitMQ. Deel 2. Laten we Exchanges verkennen<\/li>\n<li>RabbitMQ. Deel 3. Laten we kijken naar Queues en Bindings<\/li>\n<li>RabbitMQ. Deel 4. We duiken in wat berichten en frames zijn<\/li>\n<li>RabbitMQ. Deel 5. Prestatie van het publiceren en consumeren van berichten<\/li>\n<li>RabbitMQ. Deel 6. Overzicht van de modules Federation en Shovel<\/li>\n<li>RabbitMQ. Deel 7. Gedetailleerd over Connection en Channel<\/li>\n<li>RabbitMQ. Deel 8. RabbitMQ in .NET<\/li>\n<li>RabbitMQ. Deel 9. Monitoring<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"kratko-pro-amqp\">Kort over AMQP<\/h3>\n<p><\/p>\n<blockquote><p>AMQP (Advanced Message Queuing Protocol) is een open protocol voor het verzenden van berichten tussen de componenten van een systeem. Het belangrijkste idee is dat afzonderlijke subsysteem (of onafhankelijke applicaties) berichten op willekeurige wijze kunnen uitwisselen via een AMQP-broker, die routing uitvoert, mogelijk levering garandeert, datastromen distribueert en zich abonneert op de benodigde soorten berichten.<\/p><\/blockquote>\n<p>Protocol <code>AMQP<\/code> introduceert drie concepten:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 1. Inleiding. 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> (wisselpunt of exchange) - daarin worden berichten verzonden. Het wisselpunt <strong>verdeelt het bericht<\/strong> over een of meerdere wachtrijen. Het <strong>routet berichten naar de wachtrij<\/strong> op basis van de gemaakte verbindingen (<code>binding<\/code>) tussen hem en de wachtrij<\/li>\n<li><code>queue<\/code> (wachtrij) - een gegevenstructuur op de schijf of in het geheugen, die <strong>verwijzingen naar berichten opslaat en kopie\u00ebn van berichten afgeeft <code>consumers<\/code><\/strong> (consumenten)<\/li>\n<li><code>binding<\/code> (binding) - een regel die <strong>de wisselpunt vertelt naar welke van die wachtrijen deze berichten zouden moeten gaan<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Het protocol werkt bovenop <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 over Erlang<\/h3>\n<p><\/p>\n<p>De broncode van het project is te vinden in de repository op <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\">GitHub<\/a><\/noindex>. Architectuur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-server\">RabbitMQ-server<\/a><\/noindex> is gebaseerd op <noindex><a rel=\"nofollow\" href=\"https:\/\/www.erlang.org\/\">Erlang<\/a><\/noindex> en BEAM.<\/p>\n<p><\/p>\n<blockquote><p><code>Erlang<\/code> ontwikkeld door het bedrijf <code>Ericsson<\/code> in het midden van de jaren 1980 als een gedistribueerd, fouttolerant, real-time systeem voor toepassingen die een ononderbroken werking van 99,999% vereisen. <code>Erlang<\/code> wordt toegepast in verschillende sectoren en moderne toepassingen, bijvoorbeeld in <code>WhatsApp<\/code>. Meer details zijn te lezen in het artikel over de <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276951\/\">architectuur van WhatsApp, dat Facebook kocht voor $19 miljard<\/a><\/noindex><\/p><\/blockquote>\n<p><\/p>\n<h3 id=\"kratko-pro-rabbitmq\">Kort over RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2013 dit is een broker voor berichten met open bron. Het routeert berichten volgens alle basisprincipes van het protocol <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">AMQP<\/a><\/noindex> beschreven in <noindex><a rel=\"nofollow\" href=\"http:\/\/www.amqp.org\/resources\/download\">de specificatie<\/a><\/noindex>. <code>RabbitMQ<\/code> voert en aanvult het protocol <code>AMQP<\/code>.<\/p>\n<p><\/p>\n<p>Het belangrijkste idee van het berichten-uitwisselingsmodel in <code>RabbitMQ<\/code> is dat <code>producer<\/code> (de publisher) verstuurt geen berichten rechtstreeks naar de wachtrij. In feite weet de publisher vaak zelfs niet of een bericht \u00fcberhaupt aan een wachtrij zal worden bezorgd. <\/p>\n<p><\/p>\n<p>In plaats daarvan kan de publisher berichten alleen naar de broker sturen. Enerzijds ontvangt de broker berichten van publishers, en anderzijds stuurt hij ze naar wachtrijen. De broker moet precies weten wat er met het ontvangen bericht moet gebeuren. Moet het aan een specifieke wachtrij worden toegevoegd? Moet het aan meerdere wachtrijen worden toegevoegd? Of moet het bericht worden genegeerd?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 1. Inleiding. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/1deaebddebde216b8f706953ddf2d3c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De werking <code>RabbitMQ<\/code> kan als volgt worden samengevat:<\/p>\n<p><\/p>\n<ol>\n<li>De publisher stuurt een bericht naar een bepaalde broker<\/li>\n<li>De broker, nadat hij het bericht heeft ontvangen, routeert het naar een of meer wachtrijen volgens de bindregels tussen hem en de wachtrij.<\/li>\n<li>De wachtrij houdt een referentie naar dit bericht. Het bericht zelf wordt in het geheugen of op de schijf opgeslagen.<\/li>\n<li>Zodra de consument klaar is om een bericht uit de wachtrij te ontvangen, maakt de server een kopie van het bericht op basis van de link en verzendt deze.<\/li>\n<li>De consument ontvangt het bericht en stuurt een bevestiging naar de broker.<\/li>\n<li>De broker verwijdert de kopie van het bericht uit de wachtrij zodra hij de bevestiging heeft ontvangen. Vervolgens verwijdert hij het uit het geheugen en van de schijf.<\/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\">RPC (remote procedure call)<\/a><\/noindex> ligt ten grondslag aan vrijwel alle interacties met de kernel. <code>RabbitMQ<\/code>. Bijvoorbeeld, de initi\u00eble discussies over voorwaarden met de <code>RabbitMQ<\/code>, illustreert een bepaald proces. <code>RPC<\/code>. Zodra deze reeks is voltooid, <code>RabbitMQ<\/code> is hij klaar om verzoeken van de klant te ontvangen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 1. Inleiding. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/059f37304f45a1f0ff625b671f6462ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ook in de specificatie <code>AMQP<\/code> kunnen zowel de client als de server commando's aanroepen. Dit betekent dat de client interactie met de server verwacht. Commando's zijn klassen en methoden. Bijvoorbeeld, <code>Connection.Start<\/code> \u2013 is een aanroep van een methode. <code>Start<\/code> klasse <code>Verbinden<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"podklyuchenie-i-kanaly\"><em>Verbinden en kanalen<\/em><\/h4>\n<p><\/p>\n<p>Voor dit soort informatie-uitwisseling tussen de client en de server worden <strong>kanalen<\/strong>. Kanalen worden gecre\u00eberd binnen het kader van <strong>een bepaalde verbinding.<\/strong>. Elke kanaal is ge\u00efsoleerd van andere kanalen. In het geval van synchronisatie is het niet mogelijk om het volgende commando uit te voeren totdat een antwoord is ontvangen. <\/p>\n<p><\/p>\n<p>Om commando's parallel te kunnen verzenden, moet er meerdere kanalen worden geopend. Elk kanaal cre\u00ebert een aparte <code>Erlang<\/code> proces. E\u00e9n verbinding kan meerdere kanalen hebben (<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>). Voor elk kanaal zijn er bepaalde structuren en objecten in het geheugen. Dus hoe meer kanalen er binnen een verbinding zijn, hoe <strong>meer geheugen RabbitMQ<\/strong> gebruikt voor het beheer van zo'n verbinding.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 1. Inleiding. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/9bc388200f4f82eb8f98cb1dd1580675.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Een eenvoudig voorbeeld van het maken van een verbinding en kanaal met behulp van <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>Het is ten zeerste af te raden om voor elke operatie een nieuwe verbinding te openen, omdat dit <strong>leidt tot hoge kosten<\/strong>. Kanalen moeten ook persistent zijn, maar veel protocolfouten leiden tot het sluiten van een kanaal, waardoor de levensduur van een kanaal korter kan zijn dan die van de verbinding.<\/p>\n<p><\/p>\n<h4 id=\"gde-ispolzuetsya-rabbitmq\"><em>Waar wordt RabbitMQ gebruikt?<\/em><\/h4>\n<p><\/p>\n<p>In de context van microservices wordt het protocol <code>AMQP<\/code> en de implementatie ervan in <code>RabbitMQ<\/code> vaak gebruikt voor <strong>asynchrone interactie<\/strong> tussen diensten.<\/p>\n<p><\/p>\n<p>In de context van <code>IIOT<\/code> wordt het protocol <code>AMQP<\/code> en de implementatie ervan in <code>RabbitMQ<\/code> gebruikt voor gegevensuitwisseling tussen servers (server-server). De MQTT Plugin RabbitMQ <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/mqtt.html\">is de implementatie van het protocol<\/a><\/noindex> voor gegevensoverdracht tussen een sensor en een server in omgevingen met lage snelheid en hoge latentie (een volledige lijst van ondersteunde protocollen staat vermeld in <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/MQTT\">MQTT<\/a><\/noindex> In het volgende artikel zullen we verder ingaan op Exchanges. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/protocols.html\">de projectwebsite<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>Webseite van het RabbitMQ-project<\/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\/\">Goedendag, Habr! Ik wil een handboek delen met kennis die ik heb verzameld over RabbitMQ en samengevoegd in korte aanbevelingen en conclusies.<\/a><\/noindex><\/li>\n<\/ul>\n<p>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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. Deel 1. Introductie. Erlang, AMQP | ProHoster","description":"\ud83e\udd47RabbitMQ. Deel 1. Inleiding. Erlang, AMQP | ProHoster","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/69346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=69346"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/69346\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/69347"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=69346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=69346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=69346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}