{"id":73065,"date":"2020-03-06T20:42:13","date_gmt":"2020-03-06T17:42:13","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings"},"modified":"2020-03-06T20:42:13","modified_gmt":"2020-03-06T17:42:13","slug":"rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings","title":{"rendered":"RabbitMQ. Teil 3. Verst\u00e4ndnis von Queues und Bindings","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Warteschlange<\/code> (Warteschlange) \u2014 eine Datenstruktur auf der Festplatte oder im Arbeitsspeicher, die Verweis auf Nachrichten speichert und deren Kopien bereitstellt. <code>Konsumenten<\/code> (der Konsumenten). <code>Warteschlange<\/code> stellt dar <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">einen Erlang-Prozess<\/a><\/noindex> mit Zustand (in dem die Nachrichten auch zwischengespeichert werden k\u00f6nnen). 1.000 Warteschlangen k\u00f6nnen etwa 80 MB belegen.<\/p>\n<p><\/p>\n<p><code>Bindung<\/code> (Bindung) \u2014 eine Regel, die dem Broker mitteilt, in welche Warteschlange die Nachrichten zugestellt werden sollen.<\/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><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. Teil 1. Einf\u00fchrung. Erlang, AMQP und RPC<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">RabbitMQ. Teil 2. Verst\u00e4ndnis der Exchanges<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/490960\/\">RabbitMQ. Teil 3. Verst\u00e4ndnis von Queues und Bindings<\/a><\/noindex><\/li>\n<li>RabbitMQ. Teil 4. Was sind Nachrichten und Frames?<\/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<h4 id=\"vremennye-ocheredi\"><em>Tempor\u00e4re Warteschlangen<\/em><\/h4>\n<p><\/p>\n<p>Wenn eine Warteschlange mit dem Parameter <code>autoDelete<\/code>erstellt wird, dann erh\u00e4lt diese Warteschlange die F\u00e4higkeit <strong>sich automatisch zu l\u00f6schen<\/strong>. Solche Warteschlangen werden normalerweise beim Anschluss des ersten Clients erstellt und gel\u00f6scht, wenn alle Clients getrennt werden. <\/p>\n<p><\/p>\n<p>Wenn eine Warteschlange mit dem Parameter <code>exclusive<\/code>, dann erlaubt diese Warteschlange <strong>nur einem Konsumenten die Verbindung.<\/strong> und wird entfernt, wenn der Kanal geschlossen wird. Solange der Kanal nicht geschlossen ist, kann der Kunde sich ab- und wieder anmelden, jedoch nur innerhalb derselben Verbindung. Wenn der Parameter <code>exclusive<\/code> eingerichtet ist, hat der Parameter <code>autoDelete<\/code> keine Wirkung.<\/p>\n<p><\/p>\n<p>Besonderheiten:<\/p>\n<p><\/p>\n<ul>\n<li>Bei kurzzeitigem Verbindungsabbruch werden wir Nachrichten verlieren, die noch nicht beim Verbraucher angekommen sind.<\/li>\n<li>man kann das Ph\u00e4nomen <code>Binding Churn<\/code>. Dieses Ph\u00e4nomen entsteht, wenn die Anzahl der Erstellungs- und L\u00f6schvorg\u00e4nge von Warteschlangen und Bindungen sehr hoch wird. Im Clusterbetrieb wird dieser Strom von Operationen auf alle Knoten verteilt und erzeugt erhebliche Belastung. Dieser Prozess kann optimiert werden, indem die Anzahl der Abonnements kontrolliert wird.<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"postoyannye-ocheredi\"><em>Dauerhafte Warteschlangen<\/em><\/h4>\n<p><\/p>\n<p>Wenn eine Warteschlange mit dem Parameter <code>durable<\/code>, dann erlaubt diese Warteschlange <strong>bewahrt ihren Zustand<\/strong> und wird nach dem Neustart des Servers\/Brokers wiederhergestellt. Diese Warteschlange existiert, bis der Befehl <code>Queue.Delete<\/code>. <\/p>\n<p><\/p>\n<h4 id=\"highly-available-ocheredi\"><em>Hochverf\u00fcgbare Warteschlangen<\/em><\/h4>\n<p><\/p>\n<p>HA-Warteschlangen erfordern eine Cluster-Umgebung von RabbitMQ. Im Clusterbetrieb werden alle Informationen \u00fcber Austausch, Warteschlangen, Bindungen und Verbraucher auf alle Knoten kopiert.<\/p>\n<p><\/p>\n<p>Wenn eine Nachricht in eine HA-Warteschlange ver\u00f6ffentlicht wird, wird sie auf jedem Knoten gespeichert, der zu dieser HA-Warteschlange geh\u00f6rt. Nachdem die Nachricht von einem der Knoten konsumiert wurde, werden alle Kopien dieser Nachricht auf den anderen Knoten gel\u00f6scht. <\/p>\n<p><\/p>\n<p>HA-Warteschlangen k\u00f6nnen sich \u00fcber alle Knoten in einem Cluster erstrecken oder nur auf einzelne Knoten beschr\u00e4nkt sein. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 3. Verst\u00e4ndnis von Queues und Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/46d560ab33e686ddf9adb0b18b4bb0b0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Besonderheiten:<\/p>\n<p><\/p>\n<ul>\n<li>Die Nutzung von HA-Warteschlangen f\u00fchrt zu Leistungseinbu\u00dfen. Wenn eine Nachricht in eine HA-Warteschlange eingef\u00fcgt oder aus einer HA-Warteschlange konsumiert wird, muss RabbitMQ die Koordination zwischen allen Knoten durchf\u00fchren (2-3 Knoten sind in der Regel ausreichend).<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"sozdanie-ocheredi\"><em>Warteschlange erstellen<\/em><\/h4>\n<p><\/p>\n<p>Das Erstellen einer Warteschlange erfolgt \u00fcber einen synchronen <code>RPC<\/code> Anruf an den Server. Der Aufruf erfolgt \u00fcber die Methode <code>Queue.Declare<\/code>, die mit den folgenden Parametern aufgerufen wird:<\/p>\n<p><\/p>\n<ul>\n<li>Name der Warteschlange<\/li>\n<li>weitere Parameter<\/li>\n<\/ul>\n<p><\/p>\n<p>Ein Beispiel f\u00fcr die Erstellung einer Warteschlange 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\">\/\/ ...\nchannel.QueueDeclare(\n    queue: &quot;my_queue&quot;,\n    durable: false,\n    exclusive: false,\n    autoDelete: false,\n    arguments: null\n);\n\/\/ ...<\/code><\/pre>\n<p><\/p>\n<ul>\n<li><code>queue<\/code> \u2014 der Name der Warteschlange, die wir erstellen m\u00f6chten. Der Name muss eindeutig sein und darf nicht mit einem Systemnamen der Warteschlange \u00fcbereinstimmen.<\/li>\n<li><code>durable<\/code> \u2014 Wenn true, wird die Warteschlange <strong>ihren Zustand speichern<\/strong> und nach einem Neustart des Servers\/Brokers wiederhergestellt.<\/li>\n<li><code>exclusive<\/code> \u2014 wenn true, erlaubt die Warteschlange nur einem Verbraucher den Zugriff.<\/li>\n<li><code>autoDelete<\/code> \u2014 wenn true, erlangt die Warteschlange die F\u00e4higkeit <strong>sich automatisch zu l\u00f6schen<\/strong><\/li>\n<li><code>Argumente<\/code> \u2014 optionale Argumente. Im Folgenden erl\u00e4utern wir dies n\u00e4her.<\/li>\n<\/ul>\n<p><\/p>\n<h5 id=\"arguments\"><em>Argumente<\/em><\/h5>\n<p><\/p>\n<ul>\n<li><code>x-message-ttl<\/code>(<code>x-message-time-to-live<\/code>) \u2014 erm\u00f6glicht die Festlegung einer Verfallszeit f\u00fcr die Nachricht in Millisekunden. Wenn die Warteschlange mit einem festgelegten Argumentwert erstellt wird, <code>x-message-ttl<\/code>wird diese Warteschlange <strong>automatisch Nachrichten ausschlie\u00dfen, deren Ablaufdatum \u00fcberschritten ist.<\/strong>Durch die Festlegung eines Argumentwerts <code>x-message-ttl<\/code> wird das maximale Alter f\u00fcr alle Nachrichten in dieser Warteschlange definiert. Das Erstellen einer solchen Warteschlange <strong>hilft, das Empfangen veralteter Informationen zu verhindern.<\/strong>Dies kann in Echtzeitsystemen verwendet werden. Wenn f\u00fcr eine Warteschlange, f\u00fcr die ein Exchange f\u00fcr abgelehnte Nachrichten festgelegt ist, ein Argumentwert definiert wird, <code>x-message-ttl<\/code>beginnen die abgelehnten Nachrichten in dieser Warteschlange <strong>eine Lebensdauer zu haben.<\/strong>.<\/li>\n<li><code>x-expires<\/code> \u2014 legt die Zeit in Millisekunden fest, nach deren Ablauf die Warteschlange gel\u00f6scht wird. Eine Warteschlange kann ihre G\u00fcltigkeit nur verlieren, wenn sie keine Abonnenten hat. Ist die Warteschlange mit Abonnenten verbunden, kann sie sich nur dann automatisch l\u00f6schen, wenn alle Abonnenten\" <code>Basic.Cancel<\/code> oder sich abmelden. Die Lebensdauer der Warteschlange kann nur enden, wenn keine Anfrage an sie gerichtet wurde, <code>Basic.Get<\/code>. Andernfalls wird der aktuelle Wert der Lebensdauer zur\u00fcckgesetzt, und die Warteschlange wird nicht mehr automatisch gel\u00f6scht. Au\u00dferdem <strong>gibt es keine Garantie daf\u00fcr, wie schnell die L\u00f6schung der Warteschlange nach Ablauf ihrer Lebensdauer erfolgt.<\/strong>.<\/li>\n<li><code>x-max-length<\/code> \u2014 definiert die maximale Anzahl von Nachrichten in der Warteschlange. Wenn die Anzahl der Nachrichten in der Warteschlange die maximale Anzahl \u00fcberschreitet, beginnen die \u00e4ltesten Nachrichten gel\u00f6scht zu werden.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 3. Verst\u00e4ndnis von Queues und Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/738f23dcfdd173a66be619032b46c5cc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li><code>x-max-length-bytes<\/code> \u2014 legt die maximal zul\u00e4ssige Gesamtdatenmenge der Nachrichten in der Warteschlange fest. Wenn der festgelegte Wert \u00fcberschritten wird (eine \u00dcberlauf der Warteschlange tritt bei der n\u00e4chsten Ver\u00f6ffentlichung einer Nachricht auf), werden die \u00e4ltesten Nachrichten gel\u00f6scht.<\/li>\n<li><code>x-overflow<\/code> \u2014 Dieses Argument wird verwendet, um das Verhalten im Falle eines Warteschlangen\u00fcberlaufs zu steuern. Es sind zwei Werte verf\u00fcgbar: <code>drop-head<\/code> (Standardwert) und <code>reject-publish<\/code>. Wenn Sie w\u00e4hlen, <code>drop-head<\/code>, werden die \u00e4ltesten Nachrichten gel\u00f6scht. Wenn Sie w\u00e4hlen, <code>reject-publish<\/code>, wird der Empfang von Nachrichten unterbrochen.<\/li>\n<li><code>x-dead-letter-exchange<\/code> \u2014 Legt die Exchange fest, in die abgelehnte Nachrichten gesendet werden, die nicht erneut in die Warteschlange eingereiht werden.<\/li>\n<li><code>x-dead-letter-routing-key<\/code> \u2014 Legt einen optionalen Routing-Schl\u00fcssel f\u00fcr abgelehnte Nachrichten fest.<\/li>\n<li><code>x-max-priority<\/code> \u2014 Erm\u00f6glicht die Priorit\u00e4tsSortierung in der Warteschlange mit einem maximalen Priorit\u00e4tswert von 255 (RabbitMQ-Versionen 3.5.0 und h\u00f6her). Die Zahl gibt die maximale Priorit\u00e4t an, die die Warteschlange unterst\u00fctzen wird. Wenn das Argument nicht gesetzt ist, unterst\u00fctzt die Warteschlange keine Nachrichtenpriorit\u00e4ten.<\/li>\n<li><code>x-queue-mode<\/code> \u2014 Erm\u00f6glicht es, die Warteschlange in den <strong>schlummernden Modus<\/strong>zu versetzen. In diesem Modus werden so viele Nachrichten wie m\u00f6glich auf der Festplatte gespeichert. Der Verbrauch von RAM wird minimal sein. Wenn es nicht gesetzt ist, speichert die Warteschlange Nachrichten im Speicher, um eine m\u00f6glichst schnelle Lieferung zu gew\u00e4hrleisten.<\/li>\n<li><code>x-queue-master-locator<\/code> \u2014 wenn wir ein Cluster haben, kann eine Master-Warteschlange eingestellt werden<\/li>\n<li><code>x-ha-policy<\/code> \u2014 wird beim Erstellen von HA-Warteschlangen verwendet und bestimmt, wie die Nachricht \u00fcber die Knoten verteilt wird. Wenn der Wert gesetzt ist <code>all<\/code>, wird die Nachricht auf allen Knoten gespeichert. Wenn der Wert gesetzt ist <code>nodes<\/code>, wird die Nachricht auf bestimmten Knoten des Clusters gespeichert<\/li>\n<li><code>x-ha-nodes<\/code> \u2014 definiert die Knoten, denen eine bestimmte Warteschlange zugeordnet ist <code>HA<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 3. Verst\u00e4ndnis von Queues und Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/a8f660b6c0a43626e4025cf7769a4425.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn die Warteschlange erstellt wird <strong>m\u00f6glich<\/strong>, sendet der Server eine synchrone <code>RPC<\/code> Antwort <code>Queue.DeclareOk<\/code>. Wenn die Warteschlange <strong>nicht erstellt werden kann<\/strong> (Fehler beim Anforderungsauftrag <code>Queue.Declare<\/code>), dann <strong>wird der Kanal vom Server mit dem Befehl<\/strong> Channel.Close <code>geschlossen und der Client erh\u00e4lt eine Ausnahme<\/code> OperationInterruptedException <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/releases\/rabbitmq-dotnet-client\/v3.6.10\/rabbitmq-dotnet-client-3.6.10-client-htmldoc\/html\/type-RabbitMQ.Client.Exceptions.OperationInterruptedException.html\">, die einen Fehlercode und eine Beschreibung enthalten wird.<\/a><\/noindex>Ein erneuter Aufruf <\/p>\n<p><\/p>\n<p><strong>mit \u00e4hnlichen Parametern<\/strong> <code>Queue.Declare<\/code> <strong>liefert n\u00fctzliche Informationen \u00fcber diese Warteschlange. Beispielsweise die Gesamtzahl der Nachrichten, die in dieser Warteschlange warten, und die Gesamtzahl der darauf registrierten Verbraucher.<\/strong> Ein Aufruf <\/p>\n<p><\/p>\n<p>Aufruf <code>Queue.Declare<\/code> unter Benutzeranmeldedaten, denen die erforderlichen Rechte nicht zugewiesen sind <strong>schlie\u00dft den Kanal<\/strong> mithilfe des Befehls <code>geschlossen und der Client erh\u00e4lt eine Ausnahme<\/code> OperationInterruptedException <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/releases\/rabbitmq-dotnet-client\/v3.6.10\/rabbitmq-dotnet-client-3.6.10-client-htmldoc\/html\/type-RabbitMQ.Client.Exceptions.OperationInterruptedException.html\">, die einen Fehlercode und eine Beschreibung enthalten wird.<\/a><\/noindex>, der einen Fehlercode <noindex><a rel=\"nofollow\" href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/HTTP\/Status\/403\">403<\/a><\/noindex> und eine Beschreibung enthalten wird.<\/p>\n<p><\/p>\n<p>Nachdem die Warteschlange l\u00e4nger als 10 Sekunden inaktiv ist, <strong>geht sie in den Ruhezustand<\/strong>, was die GC in der Warteschlange ausl\u00f6st und zu einer signifikanten Reduzierung des ben\u00f6tigten Speichers f\u00fcr diese Warteschlange f\u00fchrt.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-queue-cherez-graficheskiy-interfeys\"><em>Erstellen einer Warteschlange \u00fcber die grafische Benutzeroberfl\u00e4che<\/em><\/h4>\n<p><\/p>\n<p>Loggen Sie sich im Administrationsbereich ein <code>RabbitMQ<\/code> mit dem Benutzer <code>guest<\/code> (Benutzername: <code>guest<\/code> und Passwort: <code>guest<\/code>). Beachten Sie, dass sich der Benutzer <code>guest<\/code> nur von localhost aus anmelden kann. Jetzt wechseln wir zum Tab <code>Queues<\/code> und klicken auf <code>Eine neue Warteschlange hinzuf\u00fcgen<\/code>. Wir f\u00fcllen die Eigenschaften aus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 3. Verst\u00e4ndnis von Queues und Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/ea77a406ad16f0871c7197e96a66818f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sobald wir alle erforderlichen Daten eingegeben haben und auf <code>Warteschlangen hinzuf\u00fcgen<\/code>, wird die Warteschlange in der Gesamtliste angezeigt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 3. Verst\u00e4ndnis von Queues und Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/8342e044a0d6c0a035a2c9f646035cad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein Klick auf den Namen der Warteschlange zeigt ihre Details an. Hier k\u00f6nnen Sie die Bindung zwischen dem Exchange und der Warteschlange konfigurieren, die Liste <code>Konsumenten<\/code>einsehen, Nachrichten ver\u00f6ffentlichen\/erhalten, die Warteschlange l\u00f6schen und Statistiken anzeigen.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-binding\"><em>Erstellen einer Bindung<\/em><\/h4>\n<p><\/p>\n<p>Die Erstellung der Bindung erfolgt mithilfe von <code>RPC<\/code> Anruf an den Server. Der Aufruf erfolgt \u00fcber die Methode <code>Queue.Bind<\/code>, die mit den folgenden Parametern aufgerufen wird:<\/p>\n<p><\/p>\n<ul>\n<li>Name der Warteschlange<\/li>\n<li>Name des Exchange<\/li>\n<li>weitere Parameter<\/li>\n<\/ul>\n<p><\/p>\n<p>Beispiel f\u00fcr die Erstellung einer Bindung 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\">\/\/...\nchannel.QueueBind(\n    queue: queueName,\n    exchange: &quot;my_exchange&quot;,\n    routingKey: &quot;my_key&quot;,\n    arguments: null\n);\n\/\/...<\/code><\/pre>\n<p><\/p>\n<ul>\n<li><code>queue<\/code> \u2014 Name der Warteschlange<\/li>\n<li><code>exchange<\/code> \u2014 Name des Exchanges<\/li>\n<li><code>routingKey<\/code> \u2014 Schl\u00fcssel zur Weiterleitung<\/li>\n<li><code>Argumente<\/code> \u2014 optionale Argumente<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 3. Verst\u00e4ndnis von Queues und Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/9123186c94a822309b679f26c2e511ea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn die Bindung erstellt wird, <strong>m\u00f6glich<\/strong>, sendet der Server eine synchrone <code>RPC<\/code> Antwort <code>Queue.BindOk<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-binding-cherez-graficheskiy-interfeys\"><em>Erstellen einer Bindung \u00fcber die grafische Benutzeroberfl\u00e4che<\/em><\/h4>\n<p><\/p>\n<p>Loggen Sie sich im Administrationsbereich ein <code>RabbitMQ<\/code> mit dem Benutzer <code>guest<\/code> (Benutzername: <code>guest<\/code> und Passwort: <code>guest<\/code>). Beachten Sie, dass sich der Benutzer <code>guest<\/code> nur von localhost aus anmelden kann. Jetzt wechseln wir zum Tab <code>Queues<\/code> und klicken Sie auf die Warteschlange <code>my_queue<\/code>. F\u00fcllen Sie die Felder im Abschnitt aus <code>Bindings<\/code>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 3. Verst\u00e4ndnis von Queues und Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/7db6b42a4f29a1860aabe54ade0b6833.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sobald wir alle erforderlichen Daten eingegeben und auf <code>Bind<\/code>geklickt haben, wird die Bindung in der Gesamtliste angezeigt:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 3. Verst\u00e4ndnis von Queues und Bindings\" src=\"\/wp-content\/uploads\/2020\/03\/499eda8e8cb061e6feb75c471eb64b92.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"code\">Code<\/h3>\n<p><\/p>\n<p>In diesem Abschnitt beschreiben wir die Warteschlange und die Bindung mit C#, als ob wir eine Bibliothek entwickeln m\u00fcssten. Dies k\u00f6nnte hilfreich sein, um das Konzept besser zu verstehen.<\/p>\n<p><\/p>\n<pre><code class=\"cs\">public interface IQueue\n    {        \n        string Name { get; }\n\n        \/\/ <summary>\n        \/\/     Wenn true gesetzt ist, ist die Warteschlange dauerhaft. \n        \/\/     Sie wird auf der Festplatte gespeichert und kann \n        \/\/     einen Server-\/Brokerneustart \u00fcberstehen. \n        \/\/     Wenn der Wert false ist, ist die Warteschlange vor\u00fcbergehend und wird gel\u00f6scht, \n        \/\/     wenn der Server\/Broker neu gestartet wird.\n        \/\/ <\/summary>\n        bool IsDurable { get; }\n\n        \/\/ <summary>\n        \/\/     Wenn der Wert true ist, \n        \/\/     erlaubt diese Warteschlange den Zugriff \n        \/\/     nur f\u00fcr einen Verbraucher.\n        \/\/ <\/summary>\n        bool IsExclusive { get; }\n\n        \/\/ <summary>\n        \/\/     Automatisches L\u00f6schen. \n        \/\/     Die Warteschlange wird gel\u00f6scht, wenn alle Clients getrennt sind.\n        \/\/ <\/summary>\n        bool IsAutoDelete { get; }\n\n        \/\/ <summary>\n        \/\/     Optionale Argumente\n        \/\/ <\/summary>\n        IDictionary Arguments { get; }\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">public class Queue : IQueue\n    {\n        public Queue(\n             string name, \n             bool isDurable = true, \n             bool isExclusive = false, \n             bool isAutoDelete = false, \n             IDictionary arguments = null)\n        {\n            Name = name ??\n                throw new ArgumentNullException(name, $\"{name} darf nicht null sein\");\n\n            IsDurable = isDurable;\n            IsExclusive = isExclusive;\n            IsAutoDelete = isAutoDelete;\n            Arguments = arguments ?? new Dictionary();\n        }\n\n        public string Name { get; }\n        public bool IsDurable { get; }\n        public bool IsExclusive { get; }\n        public bool IsAutoDelete { get; }\n        public IDictionary Arguments { get; }\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">public static class QueueMode\n    {       \n        public const string Default = \"standard\";\n        \n        \/\/ <summary>\n        \/\/     Fauler Modus. Der faule Modus sorgt daf\u00fcr, dass \n        \/\/     so viele Nachrichten wie m\u00f6glich auf der Festplatte gespeichert werden, um die \n        \/\/     Verwendung des Arbeitsspeichers zu reduzieren\n        \/\/ <\/summary>\n        public const string Lazy = \"faul\";\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">public interface IBinding\n    {\n        \/\/ <summary>\n        \/\/     Der Austausch, der mit der Bindung verbunden ist\n        \/\/ <\/summary>\n        IExchange Exchange { get; }\n\n        \/\/ <summary>\n        \/\/     Routing-Schl\u00fcssel\n        \/\/ <\/summary>\n        string RoutingKey { get; }\n\n        \/\/ <summary>\n        \/\/     Optionale Argumente\n        \/\/ <\/summary>\n        IDictionary Arguments { get; }\n    }<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"cs\">public class Binding : IBinding\n    {\n        public Binding(\n             IExchange exchange, \n             string routingKey, \n             IDictionary arguments)\n        {\n            Exchange = exchange;\n            RoutingKey = routingKey;\n            Arguments = arguments;\n        }\n\n        public IExchange Exchange { get; }\n        public string RoutingKey { get; }\n        public IDictionary Arguments { get; }\n    }<\/code><\/pre>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/490960\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Queue (\u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u0438\u0445 \u043a\u043e\u043f\u0438\u0438 consumers (\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c). Queue \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 Erlang-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c (\u0433\u0434\u0435 \u043c\u043e\u0433\u0443\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0441\u0430\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f). 1 \u0442\u044b\u0441\u044f\u0447\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 80Mb. Binding (\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430) \u2014 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a\u0443 \u0432 \u043a\u0430\u043a\u0443\u044e \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":73066,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-73065","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=\"Queue (\u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u0438\u0445 \u043a\u043e\u043f\u0438\u0438 consumers (\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c). Queue \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 Erlang-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c (\u0433\u0434\u0435 \u043c\u043e\u0433\u0443\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0441\u0430\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f). 1 \u0442\u044b\u0441\u044f\u0447\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 80Mb. Binding (\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430) \u2014 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a\u0443 \u0432 \u043a\u0430\u043a\u0443\u044e \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.\" \/>\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-3-razbiraemsya-s-queues-i-bindings\" \/>\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 3. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Queues \u0438 Bindings | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Queue (\u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u0438\u0445 \u043a\u043e\u043f\u0438\u0438 consumers (\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c). Queue \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 Erlang-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c (\u0433\u0434\u0435 \u043c\u043e\u0433\u0443\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0441\u0430\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f). 1 \u0442\u044b\u0441\u044f\u0447\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 80Mb. Binding (\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430) \u2014 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a\u0443 \u0432 \u043a\u0430\u043a\u0443\u044e \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings\" \/>\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-03-06T17:42:13+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-06T17:42:13+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 3. Wir besch\u00e4ftigen uns mit Queues und Bindings | ProHoster","description":"Die Warteschlange (Queue) ist eine Datenstruktur, die auf der Festplatte oder im Arbeitsspeicher gespeichert wird und Verweise auf Nachrichten speichert, die dann ihren Kopien an die Consumers (Verbraucher) \u00fcbergeben werden. Eine Warteschlange stellt einen Erlang-Prozess mit Zustand dar (in dem die Nachrichten gespeichert werden k\u00f6nnen). 1.000 Warteschlangen k\u00f6nnen etwa 80 MB beanspruchen. Binding (Bindung) ist eine Regel, die dem Exchange mitteilt, in welche Warteschlange die Nachrichten gelangen sollen.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings","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 3. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Queues \u0438 Bindings | ProHoster","og:description":"Queue (\u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u0438\u0445 \u043a\u043e\u043f\u0438\u0438 consumers (\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c). Queue \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 Erlang-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c (\u0433\u0434\u0435 \u043c\u043e\u0433\u0443\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0441\u0430\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f). 1 \u0442\u044b\u0441\u044f\u0447\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 80Mb. Binding (\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430) \u2014 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a\u0443 \u0432 \u043a\u0430\u043a\u0443\u044e \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rabbitmq-chast-3-razbiraemsya-s-queues-i-bindings","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-03-06T17:42:13+00:00","article:modified_time":"2020-03-06T17:42:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"73065","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 18:41:06","updated":"2022-09-30 05:07:23"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/73065","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=73065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/73065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/73066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=73065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=73065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=73065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}