{"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 Handbuch teilen, das Wissen zusammenfasst, das ich \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. Verst\u00e4ndnis der Exchanges<\/li>\n<li>RabbitMQ. Teil 3. Verst\u00e4ndnis von Queues und Bindings<\/li>\n<li>RabbitMQ. Teil 4. Wir kl\u00e4ren, was Nachrichten und Frames sind.<\/li>\n<li>RabbitMQ. Teil 5. Leistung bei der Ver\u00f6ffentlichung 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. \u00dcberwachung<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"kratko-pro-amqp\">Kurz \u00fcber AMQP<\/h3>\n<p><\/p>\n<blockquote><p>AMQP (Advanced Message Queuing Protocol) ist ein offenes Protokoll f\u00fcr den Nachrichtenaustausch zwischen Systemkomponenten. Die Hauptidee ist, dass verschiedene Teilsysteme (oder unabh\u00e4ngige Anwendungen) Nachrichten auf beliebige Weise \u00fcber einen AMQP-Broker austauschen k\u00f6nnen, der die Nachrichten weiterleitet, m\u00f6glicherweise die Zustellung garantiert, Datenstr\u00f6me verteilt und die Anmeldung zu den ben\u00f6tigten Nachrichtentypen erm\u00f6glicht.<\/p><\/blockquote>\n<p>Protokoll <code>AMQP<\/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> (Austausch oder Exchange) \u2014 hier werden Nachrichten gesendet. Der Austausch <strong>verteilt die Nachricht<\/strong> an eine oder mehrere Warteschlangen. Er <strong>leitet Nachrichten an die Warteschlange<\/strong> auf der Grundlage von erstellten Verbindungen (<code>Binding<\/code>) zwischen ihm und der Warteschlange.<\/li>\n<li><code>queue<\/code> (Warteschlange) \u2014 eine Datenstruktur auf der Festplatte oder im RAM, die <strong>Verweise auf Nachrichten speichert und Kopien der Nachrichten <code>Konsumenten<\/code><\/strong> an die Verbraucher liefert.<\/li>\n<li><code>Binding<\/code> (Binding) \u2014 eine Regel, die <strong>dem Austausch mitteilt, in welche 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\">Kurzinformation zu Erlang<\/h3>\n<p><\/p>\n<p>Der Quellcode des Projekts ist im Repository unter <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\">GitHub<\/a><\/noindex>. 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> entwickelt von <code>Ericsson<\/code> in den 1980er Jahren als verteiltes, fehlertolerantes Echtzeitsystem f\u00fcr Anwendungen, die eine Verf\u00fcgbarkeit von 99,999 % erfordern. <code>Erlang<\/code> Es wird in verschiedenen Branchen und modernen Anwendungen eingesetzt, beispielsweise in <code>WhatsApp<\/code>. Weitere Informationen finden Sie im Artikel <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276951\/\">die 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\">Kurzinformation zu RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2013 ein Open-Source-Nachrichtenbroker. Er leitet Nachrichten nach allen grundlegenden Prinzipien des Protokolls <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">AMQP<\/a><\/noindex> beschrieben in <noindex><a rel=\"nofollow\" href=\"http:\/\/www.amqp.org\/resources\/download\">Spezifikationen<\/a><\/noindex>. <code>RabbitMQ<\/code> setzt das Protokoll um und erg\u00e4nzt es <code>AMQP<\/code>.<\/p>\n<p><\/p>\n<p>Die Hauptidee des Nachrichtenwechselmodells in <code>RabbitMQ<\/code> besteht darin, dass <code>der Producer<\/code> (Publisher) die Nachrichten nicht direkt an die Warteschlange sendet. Tats\u00e4chlich wei\u00df der Publisher oft nicht einmal, ob die Nachricht \u00fcberhaupt in eine Warteschlange zugestellt wird. <\/p>\n<p><\/p>\n<p>Stattdessen kann der Publisher Nachrichten nur an die Warteschlange senden. Einerseits empf\u00e4ngt die Warteschlange Nachrichten von den Publishern, andererseits sendet sie diese an die Warteschlangen. Die Warteschlange muss genau wissen, wie mit der empfangenen Nachricht umzugehen ist. Soll sie in eine bestimmte Warteschlange eingeordnet werden? Soll sie in mehrere Warteschlangen eingeordnet werden? Oder soll 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 Funktionsweise kann kurz beschrieben werden als: <code>RabbitMQ<\/code> kann wie folgt beschrieben werden:<\/p>\n<p><\/p>\n<ol>\n<li>Der Publisher sendet eine Nachricht an eine bestimmte Warteschlange<\/li>\n<li>Die Warteschlange, die die Nachricht erh\u00e4lt, leitet sie gem\u00e4\u00df den Bindungsregeln zwischen ihr und der Warteschlange in eine oder mehrere Warteschlangen weiter<\/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, eine Nachricht aus der Warteschlange zu erhalten, 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, nachdem er die Best\u00e4tigung erhalten hat, die Kopie der Nachricht aus der Warteschlange. Danach entfernt er sie aus dem Arbeitsspeicher und von der Festplatte<\/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 nahezu allen Interaktionen mit dem Kernel zugrunde <code>RabbitMQ<\/code>. Zum Beispiel, die anf\u00e4nglichen Diskussionen \u00fcber die Bedingungen des Kunden mit <code>RabbitMQ<\/code>, demonstriert einen bestimmten Prozess <code>RPC<\/code>. Sobald diese Abfolge abgeschlossen ist, <code>RabbitMQ<\/code> wird es 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>In der Spezifikation <code>AMQP<\/code> k\u00f6nnen sowohl der Kunde als auch der Server Befehle ausf\u00fchren. Das bedeutet, dass der Kunde eine Interaktion mit dem Server erwartet. Befehle sind Klassen und Methoden. Zum Beispiel, <code>Connection.Start<\/code> \u2013 der Aufruf der Methode <code>Start<\/code> der 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 einen solchen Informationsaustausch zwischen Kunde und Server werden <strong>Kan\u00e4le<\/strong>. Kan\u00e4le werden im Rahmen von <strong>einer bestimmten Verbindung<\/strong>. Jeder Kanal ist von anderen Kan\u00e4len isoliert. Im synchronen Fall kann der n\u00e4chste Befehl nicht ausgef\u00fchrt werden, solange nicht die Antwort erhalten wurde. <\/p>\n<p><\/p>\n<p>Um Befehle parallel senden 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. Daher gilt: Je mehr Kan\u00e4le innerhalb einer Verbindung vorhanden sind, desto <strong>mehr Speicher ben\u00f6tigt RabbitMQ<\/strong> zur Verwaltung dieser 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 zur Erstellung einer Verbindung und eines Kanals mit Hilfe von <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>hohe Kosten verursachen kann.<\/strong>Kan\u00e4le sollten ebenfalls best\u00e4ndig sein, jedoch f\u00fchren viele Protokollfehler dazu, dass der Kanal geschlossen wird, 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>AMQP<\/code> und dessen Implementierung in <code>RabbitMQ<\/code> h\u00e4ufig f\u00fcr <strong>asynchrone Interaktionen<\/strong> zwischen Diensten verwendet.<\/p>\n<p><\/p>\n<p>Im Bereich <code>IIOT<\/code> Protokoll <code>AMQP<\/code> und dessen Implementierung in <code>RabbitMQ<\/code> wird es f\u00fcr den Datenaustausch zwischen Servern (Server-zu-Server) genutzt. Au\u00dferdem wird das Plugin <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/mqtt.html\">MQTT Plugin RabbitMQ<\/a><\/noindex> verwendet, das eine Implementierung des Protokolls darstellt <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/MQTT\">MQTT<\/a><\/noindex> zur Daten\u00fcbertragung zwischen Sensor und Server in niedrigbandbreitigen Umgebungen 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\">Projektwebsite<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>Im n\u00e4chsten Artikel werden wir uns detaillierter mit Exchanges befassen.<\/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 Website des RabbitMQ-Projekts<\/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 4.9.10 - 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. \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\" \/>\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) 4.9.10\" \/>\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. \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\" \/>\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 Handbuch teilen, das Wissen \u00fcber RabbitMQ zusammenfasst und in kurze Empfehlungen und Erkenntnisse komprimiert. Inhaltsverzeichnis RabbitMQ. Teil 1. Einf\u00fchrung. Erlang, AMQP und RPC RabbitMQ. Teil 2. Wir kl\u00e4ren die Exchanges in RabbitMQ. Teil 3. Wir kl\u00e4ren die Queues und Bindings in RabbitMQ. Teil 4. Wir kl\u00e4ren, was Nachrichten und Frames in RabbitMQ sind. Teil","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. \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","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"},"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}]}}