{"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\/de\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","title":{"rendered":"RabbitMQ. Teil 1. Einf\u00fchrung. Erlang, AMQP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Guten Tag, Habr! Ich m\u00f6chte ein Lehrbuch und Nachschlagewerk teilen, das ich sammeln konnte \u00fcber <code>RabbitMQ<\/code> und in kurze Empfehlungen und Schlussfolgerungen komprimiert habe. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Inhaltsverzeichnis<\/h3>\n<p><\/p>\n<ul>\n<li>RabbitMQ. Teil 1. Einf\u00fchrung. Erlang, AMQP und RPC<\/li>\n<li>RabbitMQ. Teil 2. Verstehen der Exchanges<\/li>\n<li>RabbitMQ. Teil 3. Wir besch\u00e4ftigen uns mit Queues und Bindings<\/li>\n<li>RabbitMQ. Teil 4. Verst\u00e4ndnis von Nachrichten und Frames<\/li>\n<li>RabbitMQ. Teil 5. Leistung bei der Publikation und dem Konsum von Nachrichten<\/li>\n<li>RabbitMQ. Teil 6. \u00dcberblick \u00fcber die Module Federation und Shovel<\/li>\n<li>RabbitMQ. Teil 7. Detaillierte Informationen zu Verbindung und Kanal<\/li>\n<li>RabbitMQ. Teil 8. RabbitMQ in .NET<\/li>\n<li>RabbitMQ. Teil 9. Monitoring<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"kratko-pro-amqp\">Kurz zu AMQP<\/h3>\n<p><\/p>\n<blockquote><p>AMQP (Advanced Message Queuing Protocol) \u2014 ein offenes Protokoll zur \u00dcbertragung von Nachrichten zwischen den Komponenten eines Systems. Die Grundidee ist, dass separate Teilsysteme (oder unabh\u00e4ngige Anwendungen) beliebig Nachrichten \u00fcber einen AMQP-Broker austauschen k\u00f6nnen, der das Routing \u00fcbernimmt, m\u00f6glicherweise die Zustellung garantiert, Datenstr\u00f6me verteilt und sich f\u00fcr die ben\u00f6tigten Nachrichtentypen registriert.<\/p><\/blockquote>\n<p>Protokoll <code>), das einen offenen Standard f\u00fcr den Austausch von Gesch\u00e4ftsnachrichten zwischen Anwendungen oder Organisationen darstellt.<\/code> f\u00fchrt drei Konzepte ein:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 1. Einf\u00fchrung. 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> (Austauschpunkt oder Exchange) \u2014 dorthin werden Nachrichten gesendet. Der Austauschpunkt <strong>verteilt die Nachricht<\/strong> an eine oder mehrere Warteschlangen. Er <strong>leitet Nachrichten anhand von erstellten Verbindungen (<\/strong> Binding<code>) zwischen ihm und der Warteschlange<\/code>.<\/li>\n<li><code>queue<\/code> (Warteschlange) \u2014 eine Datenstruktur auf der Festplatte oder im Arbeitsspeicher, die <strong>Links zu Nachrichten speichert und Kopien der Nachrichten bereitstellt <code>consumers<\/code><\/strong> (Kunden)<\/li>\n<li><code>) zwischen ihm und der Warteschlange<\/code> (Binding) \u2014 eine Regel, die <strong>dem Austauschpunkt mitteilt, in welche der Warteschlangen diese Nachrichten gelangen sollen.<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Das Protokoll arbeitet \u00fcber <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\">Kurz zu Erlang<\/h3>\n<p><\/p>\n<p>Der Quellcode des Projekts befindet sich im Repository auf <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\">GitHub<\/a><\/noindex>. Die Architektur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-server\">RabbitMQ-Server<\/a><\/noindex> basiert auf <noindex><a rel=\"nofollow\" href=\"https:\/\/www.erlang.org\/\">Erlang<\/a><\/noindex> und BEAM.<\/p>\n<p><\/p>\n<blockquote><p><code>Erlang<\/code> wurde von der Firma <code>Ericsson<\/code> in den 1980er Jahren entwickelt als verteiltes, fehlertolerantes Echtzeitsystem f\u00fcr Anwendungen, die eine Ausfallsicherheit von 99,999 % erfordern. <code>Erlang<\/code> wird in verschiedenen Branchen und modernen Anwendungen eingesetzt, beispielsweise in <code>WhatsApp<\/code>. N\u00e4heres kann im Artikel \u00fcber die <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276951\/\">Architektur von WhatsApp, das Facebook f\u00fcr 19 Milliarden Dollar gekauft hat<\/a><\/noindex><\/p><\/blockquote>\n<p><\/p>\n<h3 id=\"kratko-pro-rabbitmq\">Kurz zu RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2013 es handelt sich um einen Open-Source-Nachrichtenbroker. Er leitet Nachrichten gem\u00e4\u00df allen grundlegenden Prinzipien des Protokolls <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">), das einen offenen Standard f\u00fcr den Austausch von Gesch\u00e4ftsnachrichten zwischen Anwendungen oder Organisationen darstellt.<\/a><\/noindex> beschrieben in <noindex><a rel=\"nofollow\" href=\"http:\/\/www.amqp.org\/resources\/download\">Spezifikation<\/a><\/noindex>. <code>RabbitMQ<\/code> setzt das Protokoll um und erg\u00e4nzt es. <code>), das einen offenen Standard f\u00fcr den Austausch von Gesch\u00e4ftsnachrichten zwischen Anwendungen oder Organisationen darstellt.<\/code>.<\/p>\n<p><\/p>\n<p>Die Grundidee des Modells f\u00fcr Nachrichten\u00fcbertragung in <code>RabbitMQ<\/code> besteht darin, dass <code>Produzenten<\/code> (der Publisher) sendet Nachrichten nicht direkt in die Warteschlange. Tats\u00e4chlich wei\u00df der Publisher oft nicht einmal, ob eine Nachricht \u00fcberhaupt in eine Warteschlange zugestellt wird. <\/p>\n<p><\/p>\n<p>Stattdessen kann der Publisher Nachrichten nur an den Austausch senden. Einerseits erh\u00e4lt der Austausch Nachrichten von den Publishern, andererseits sendet er sie in die Warteschlangen. Der Austausch muss genau wissen, was mit der empfangenen Nachricht geschehen soll. Sollte sie in eine bestimmte Warteschlange eingef\u00fcgt werden? Soll sie in mehrere Warteschlangen eingef\u00fcgt werden? Oder sollte die Nachricht ignoriert werden.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 1. Einf\u00fchrung. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/1deaebddebde216b8f706953ddf2d3c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die Arbeit <code>RabbitMQ<\/code> kann folgenderma\u00dfen beschrieben werden:<\/p>\n<p><\/p>\n<ol>\n<li>Der Publisher sendet eine Nachricht an einen bestimmten Austausch.<\/li>\n<li>Der Austausch routet die empfangene Nachricht entsprechend den Bindungsregeln zwischen ihm und der Warteschlange in eine oder mehrere Warteschlangen.<\/li>\n<li>Die Warteschlange speichert einen Verweis auf diese Nachricht. Die Nachricht selbst wird im Arbeitsspeicher oder auf der Festplatte gespeichert.<\/li>\n<li>Sobald der Verbraucher bereit ist, die Nachricht aus der Warteschlange zu empfangen, erstellt der Server eine Kopie der Nachricht anhand des Verweises und sendet sie.<\/li>\n<li>Der Verbraucher erh\u00e4lt die Nachricht und sendet eine Best\u00e4tigung an den Broker.<\/li>\n<li>Der Broker entfernt die Kopie der Nachricht aus der Warteschlange, nachdem er die Best\u00e4tigung erhalten hat. Danach wird sie aus dem Arbeitsspeicher und von der Festplatte gel\u00f6scht.<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"rpc\"><em>RPC<\/em><\/h4>\n<p><\/p>\n<p>Prozess <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> liegt den meisten Interaktionen mit dem Kern zugrunde. <code>RabbitMQ<\/code>. Zum Beispiel zeigen erste Diskussionen \u00fcber die Bedingungen des Kunden mit <code>RabbitMQ<\/code>, einen bestimmten Prozess <code>RPC<\/code>. Sobald diese Sequenz abgeschlossen ist, <code>RabbitMQ<\/code> wird bereit sein, Anfragen vom Kunden entgegenzunehmen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 1. Einf\u00fchrung. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/059f37304f45a1f0ff625b671f6462ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Auch in der Spezifikation <code>), das einen offenen Standard f\u00fcr den Austausch von Gesch\u00e4ftsnachrichten zwischen Anwendungen oder Organisationen darstellt.<\/code> k\u00f6nnen sowohl der Client als auch der Server Befehle aufrufen. Das bedeutet, dass der Client eine Interaktion mit dem Server erwartet. Befehle sind Klassen und Methoden. Zum Beispiel <code>Connection.Start<\/code> \u2013 Aufruf der Methode <code>Start<\/code> Klasse <code>Verbindung<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"podklyuchenie-i-kanaly\"><em>Verbindung und Kan\u00e4le<\/em><\/h4>\n<p><\/p>\n<p>F\u00fcr den Informationsaustausch zwischen Client und Server werden <strong>Kan\u00e4le<\/strong>verwendet. Kan\u00e4le werden im Rahmen <strong>einer bestimmten Verbindung<\/strong>erstellt. Jeder Kanal ist von anderen Kan\u00e4len isoliert. Im synchronen Fall ist es nicht m\u00f6glich, den n\u00e4chsten Befehl auszuf\u00fchren, solange keine Antwort erhalten wurde. <\/p>\n<p><\/p>\n<p>Um Befehle parallel versenden zu k\u00f6nnen, m\u00fcssen mehrere Kan\u00e4le ge\u00f6ffnet werden. Jeder Kanal erzeugt einen separaten <code>Erlang<\/code> Prozess. Eine Verbindung kann viele Kan\u00e4le haben (<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\u00fcr jeden Kanal gibt es bestimmte Strukturen und Objekte im Speicher. Je mehr Kan\u00e4le innerhalb einer Verbindung existieren, desto <strong>mehr Speicher nutzt RabbitMQ<\/strong> zur Verwaltung einer solchen Verbindung.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 1. Einf\u00fchrung. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/9bc388200f4f82eb8f98cb1dd1580675.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein einfaches Beispiel f\u00fcr die Erstellung einer Verbindung und eines Kanals mit <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>Es wird dringend davon abgeraten, f\u00fcr jede Operation eine neue Verbindung zu \u00f6ffnen, da dies <strong>zu hohen Kosten f\u00fchren wird<\/strong>. Kan\u00e4le sollten ebenfalls dauerhaft sein, aber viele Protokollfehler f\u00fchren zur Schlie\u00dfung des Kanals, sodass die Lebensdauer eines Kanals k\u00fcrzer sein kann als die einer Verbindung.<\/p>\n<p><\/p>\n<h4 id=\"gde-ispolzuetsya-rabbitmq\"><em>Wo wird RabbitMQ eingesetzt?<\/em><\/h4>\n<p><\/p>\n<p>Im Kontext von Mikrodiensten wird das Protokoll <code>), das einen offenen Standard f\u00fcr den Austausch von Gesch\u00e4ftsnachrichten zwischen Anwendungen oder Organisationen darstellt.<\/code> und seine Implementierung in <code>RabbitMQ<\/code> h\u00e4ufig f\u00fcr <strong>asynchrone Interaktionen<\/strong> zwischen Diensten verwendet.<\/p>\n<p><\/p>\n<p>Im Kontext von <code>IIOT<\/code> wird das Protokoll <code>), das einen offenen Standard f\u00fcr den Austausch von Gesch\u00e4ftsnachrichten zwischen Anwendungen oder Organisationen darstellt.<\/code> und seine Implementierung in <code>RabbitMQ<\/code> zum Datenaustausch zwischen Servern (Server-zu-Server) genutzt. Das Plugin <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/mqtt.html\">MQTT Plugin RabbitMQ<\/a><\/noindex> stellt eine Implementierung des Protokolls dar <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/MQTT\">MQTT<\/a><\/noindex> f\u00fcr die \u00dcbertragung von Daten zwischen Sensor und Server in Niederstgeschwindigkeitsumgebungen mit hoher Latenz (eine vollst\u00e4ndige Liste der unterst\u00fctzten Protokolle finden Sie auf <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/protocols.html\">der Projektwebsite<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>Im n\u00e4chsten Artikel gehen wir n\u00e4her auf Exchanges ein.<\/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\/\">Die Projektwebsite RabbitMQ<\/a><\/noindex><\/li>\n<\/ul>\n<p>Quelle: <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.1.1 - 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\/de\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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. Teil 1. Einf\u00fchrung. Erlang, AMQP | ProHoster","description":"Guten Tag, Habr! Ich m\u00f6chte ein Lehrbuch-Referenzwerk teilen, das ich \u00fcber RabbitMQ zusammenstellen konnte, und in kurze Empfehlungen und Schlussfolgerungen komprimiert habe.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/69346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=69346"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/69346\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/69347"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=69346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=69346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=69346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}