Goedemiddag, Habr! Ik wil graag een naslagwerk met kennis delen dat ik heb verzameld RabbitMQ en condenseren tot korte aanbevelingen en conclusies.
inhoudsopgave
- KonijnMQ. Deel 1. Inleiding. Erlang, AMQP en RPC
- KonijnMQ. Deel 2. Uitwisselingen begrijpen
- KonijnMQ. Deel 3. Wachtrijen en bindingen begrijpen
- KonijnMQ. Deel 4. Begrijpen wat berichten en frames zijn
- KonijnMQ. Deel 5: Berichtpublicatie en consumptieprestaties
- KonijnMQ. Deel 6. Overzicht van de Federatie- en Shovel-modules
- KonijnMQ. Deel 7. Details over Connection en Chanel
- KonijnMQ. Deel 8. RabbitMQ in .NET
- KonijnMQ. Deel 9. Toezicht
Kort over AMQP
AMQP (Advanced Message Queuing Protocol) is een open protocol voor het verzenden van berichten tussen systeemcomponenten. Het basisidee is dat individuele subsystemen (of onafhankelijke applicaties) op verschillende manieren berichten kunnen uitwisselen via een AMQP-broker. Deze broker verzorgt de routering en garandeert eventueel de levering, de distributie van gegevensstromen en het abonnement op de vereiste berichttypen.
protocol AMQP introduceert drie concepten:

exchange(uitwisselingspunt of exchange) - Hier worden berichten naartoe gestuurd. Wisselpunt verspreidt boodschap in één of meerdere wachtrijen. Zij stuurt berichten naar een wachtrij op basis van de gemaakte verbindingen (binding) tussen hem en de wachtrijqueue(wachtrij) - een gegevensstructuur op schijf of in RAM die slaat links naar berichten op en retourneert kopieën van berichtenconsumers(aan consumenten)binding(bindend) - een regel die vertelt het uitwisselingspunt naar welke wachtrij deze berichten moeten gaan
Het protocol draait bovenop .
Kort over Erlang
De broncode voor het project bevindt zich in de repository op . Architectuur gebaseerd op en BEAM.
Erlangontwikkeld door het bedrijfEricssonhalverwege de jaren 1980 als een gedistribueerd, fouttolerant, real-time systeem voor toepassingen die 99,999% uptime vereisen.Erlangwordt gebruikt in verschillende industrieën en moderne toepassingen, zoals
Kort over RabbitMQ
– is een open source berichtenmakelaar. Berichten worden gerouteerd volgens alle basisprotocolprincipes. beschreven in . RabbitMQ implementeert en vult het protocol aan AMQP.
Het basisidee van het berichtenmodel in RabbitMQ het ding is producer (uitgever) stuurt geen berichten rechtstreeks naar de wachtrij. Vaak weet de uitgever zelfs niet of het bericht überhaupt in een wachtrij terechtkomt.
In plaats daarvan kan de uitgever alleen berichten naar de exchange sturen. Enerzijds ontvangt de exchange berichten van uitgevers en anderzijds stuurt het deze door naar wachtrijen. De centrale 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 de boodschap moet genegeerd worden.

Kort over het werk RabbitMQ kan als volgt worden beschreven:
- De uitgever stuurt een bericht naar een specifieke exchange
- Wanneer een exchange een bericht ontvangt, routeert het dit naar een of meer wachtrijen op basis van de bindingsregels tussen de exchange en de wachtrij.
- De wachtrij slaat een verwijzing naar dit bericht op. Het bericht zelf wordt in het RAM-geheugen of op schijf opgeslagen.
- Zodra de consument klaar is om een bericht uit de wachtrij te ontvangen, maakt de server een kopie van het bericht door middel van een referentie en verstuurt deze
- De consument ontvangt het bericht en stuurt een bevestiging naar de makelaar
- Zodra de broker de bevestiging heeft ontvangen, verwijdert hij de kopie van het bericht uit de wachtrij. Vervolgens worden de bestanden uit het RAM-geheugen en de schijf verwijderd.
RPC
Процесс ligt ten grondslag aan vrijwel alle interacties met de kern RabbitMQ. Bijvoorbeeld de eerste besprekingen over de voorwaarden van de cliënt met RabbitMQ, toont een bepaald proces RPC. Zodra deze reeks voltooid is, RabbitMQ zal klaar zijn om verzoeken van de klant te accepteren:

Ook in de specificatie AMQP Zowel de client als de server kunnen opdrachten geven. Dit betekent dat de client wacht op interactie met de server. Opdrachten zijn klassen en methoden. Bijvoorbeeld, Connection.Start – methodeaanroep Start klasse Connection.
Verbinding en kanalen
Voor de uitwisseling van informatie tussen de client en de server worden de volgende methoden gebruikt: аналы. Kanalen worden binnen gecreëerd specifieke verbinding. Elk kanaal is geïsoleerd van andere kanalen. In het synchrone geval is het niet mogelijk om de volgende opdracht uit te voeren totdat er een antwoord is ontvangen.
Om commando's parallel te kunnen versturen, moet je meerdere kanalen openen. Elk kanaal creëert een apart Erlang proces. Eén verbinding kan meerdere kanalen hebben (). Voor elk kanaal zijn er bepaalde structuren en objecten in het geheugen. Hoe meer kanalen er dus binnen een verbinding zijn, hoe RabbitMQ gebruikt meer geheugen om zo'n verbinding te controleren.

Een eenvoudig voorbeeld van het maken van een verbinding en kanaal met behulp van :
// ...
private void TryConnect()
{
var factory = new ConnectionFactory()
{
HostName = "host_name",
UserName = "user_name",
Password = "p@ssword",
// Включение автоматичекого восстановления
// соединения после сбоев сети
AutomaticRecoveryEnabled = true
};
_connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
_channel = _connection.CreateModel();
// other options
}Het wordt sterk afgeraden om voor elke bewerking een nieuwe verbinding te openen, omdat dit zal leiden tot hoge kosten. Kanalen zijn ook bedoeld om persistent te zijn, maar veel protocolfouten zorgen ervoor dat het kanaal wordt gesloten. De levensduur van een kanaal kan daardoor korter zijn dan die van de verbinding.
Waar wordt RabbitMQ gebruikt?
In de context van microservices is het protocol AMQP en de implementatie ervan in RabbitMQ vaak gebruikt voor asynchrone interactie tussen diensten.
In context IIOT protocol AMQP en de implementatie ervan in RabbitMQ wordt gebruikt om gegevens tussen servers uit te wisselen (server-naar-server). Gebruik ook plugin wat een implementatie is van het protocol voor het overbrengen van gegevens tussen de sensor en de server in omgevingen met lage snelheid en hoge latentie (de volledige lijst met ondersteunde protocollen vindt u op ).
In het volgende artikel gaan we dieper in op Exchanges.
referenties
Bron: www.habr.com
