Bon apremidi, Habr! Mwen vle pataje yon liv referans-liv konesans ke mwen jere kolekte sou RabbitMQ ak kondanse nan rekòmandasyon kout ak konklizyon.
Table of Contents
RabbitMQ. Pati 1. Entwodiksyon. Erlang, AMQP ak RPC
RabbitMQ. Pati 2. Konprann Echanj yo
RabbitMQ. Pati 3. Konprann ke moun kap kriye ak Liaisons
RabbitMQ. Pati 4. Konprann ki mesaj ak ankadreman yo ye
RabbitMQ. Pati 5: Piblikasyon Mesaj ak Pèfòmans Konsomasyon
RabbitMQ. Pati 6. Revizyon modil Federasyon an ak Pèl
RabbitMQ. Pati 7. Detay sou Koneksyon ak Chanel
RabbitMQ. Pati 8. RabbitMQ nan .NET
RabbitMQ. Pati 9. Siveyans
Yon ti tan sou AMQP
AMQP (Advanced Message Queuing Protocol) se yon pwotokòl louvri pou transmèt mesaj ant eleman sistèm yo. Lide debaz la se ke subsystems endividyèl (oswa aplikasyon endepandan) ka echanj mesaj nan yon fason abitrè atravè yon koutye AMQP, ki fè routage, pètèt garanti livrezon, distribye kouran done, ak abònman nan kalite mesaj yo vle.
Pwotokòl AMQP prezante twa konsèp:
exchange (pwen echanj oswa echanj) - mesaj yo voye ba li. Echanj pwen distribye mesaj nan youn oswa plis ke moun kap kriye. Li wout mesaj yo nan yon keu baze sou koneksyon yo kreye (binding) ant li menm ak keu la
queue (keu) - yon estrikti done sou disk oswa nan RAM sa estoke lyen ki mennen nan mesaj epi li bay kopi mesaj yo consumers (pou konsomatè)
binding (obligatwa) - yon règ ki di pwen echanj la nan ki keu mesaj sa yo ta dwe antre
Erlang devlope pa konpayi an Ericsson nan mitan ane 1980 yo kòm yon distribiye, toleran fay, sistèm an tan reyèl pou aplikasyon ki mande 99,999% disponiblite. Erlang itilize nan divès endistri ak aplikasyon modèn, pa egzanp. WhatsApp. Ou ka li plis nan atik la WhatsApp achitekti, ki Facebook te achte pou $19 milya dola
Yon ti tan sou RabbitMQ
Lapen MQ se yon koutye mesaj sous louvri. Li voye mesaj yo sou tout prensip debaz pwotokòl la AMQP ki dekri nan espesifikasyon. RabbitMQ aplike ak konplete pwotokòl la AMQP.
Lide prensipal la nan modèl la messagerie nan RabbitMQ bagay se producer (piblikatè) pa voye mesaj dirèkteman nan keu la. An reyalite, e byen souvan, piblikatè a pa menm konnen si mesaj la pral delivre nan nenpòt keu ditou.
Olye de sa, Piblikatè a ka sèlman voye mesaj nan echanj la. Sou yon bò, echanj la resevwa mesaj nan men piblikatè, epi sou lòt men an, li voye yo nan ke moun kap kriye. Echanj la dwe konnen egzakteman kisa pou l fè ak mesaj li resevwa a. Èske li ta dwe ajoute nan yon keu espesifik? Èske li ta dwe ajoute nan plizyè ke moun kap kriye? Oswa mesaj la ta dwe inyore.
Travay kout RabbitMQ ka dekri jan sa a:
Piblikatè a voye yon mesaj nan yon echanj espesifik
Yon echanj, li te resevwa yon mesaj, wout li nan youn oswa plizyè keu an akò ak règ obligatwa ki genyen ant li ak nat la.
Nat la estoke yon referans a mesaj sa a. Se mesaj la li menm ki estoke nan RAM oswa sou disk
Yon fwa konsomatè a pare pou resevwa yon mesaj nan keu a, sèvè a kreye yon kopi mesaj la atravè lyen an epi li voye
Konsomatè a resevwa mesaj la epi li voye konfimasyon bay koutye a
Koutye a, lè li resevwa konfimasyon, retire yon kopi mesaj la nan keu a. Lè sa a, efase soti nan RAM ak disk
kp
pwosesis RPC (rele pwosedi adistans) kache prèske tout entèraksyon ak nwayo a RabbitMQ. Pou egzanp, premye diskisyon sou kondisyon kliyan an ak RabbitMQ, demontre yon sèten pwosesis RPC. Yon fwa sekans sa a fini, RabbitMQ pral pare pou aksepte demann nan men kliyan an:
Epitou nan spesifikasyon la AMQP tou de kliyan an ak sèvè ka bay kòmandman. Sa vle di ke kliyan an ap tann pou kominike ak sèvè a. Kòmandman yo se klas ak metòd. Pa egzanp, Connection.Start - metòd apèl Start klas Connection.
Koneksyon ak chanèl
Pou echanj enfòmasyon sa yo ant kliyan ak sèvè, chanèl. Chanèl yo kreye andedan koneksyon espesifik. Chak chanèl izole de lòt chanèl. Nan ka synchrone a, li pa posib pou egzekite pwochen kòmandman an jiskaske yo resevwa yon repons.
Pou kapab voye kòmandman an paralèl, ou dwe louvri plizyè chanèl. Chak chanèl kreye yon separe Erlang pwosesis. Yon koneksyon ka gen plizyè chanèl (multiplexage). Pou chak chanèl gen sèten estrikti ak objè nan memwa. Se poutèt sa, plis chanèl gen nan yon koneksyon, la RabbitMQ itilize plis memwa pou jere yon koneksyon konsa.
Yon egzanp senp pou kreye yon koneksyon ak chanèl lè l sèvi avèk RabbitMQ.Kliyan:
// ...
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
}
Ouvèti yon nouvo koneksyon pou chak operasyon yo fòtman dekouraje kòm sa a ap mennen nan gwo depans yo. Chanèl yo ta dwe tou pèsistan, men anpil erè pwotokòl lakòz kanal la fèmen, kidonk lavi kanal la ka pi kout pase sa ki nan koneksyon an.
Ki kote yo itilize RabbitMQ?
Nan kontèks microservices, pwotokòl la AMQP ak aplikasyon li nan RabbitMQ souvan itilize pou entèraksyon asynchrone ant sèvis yo.
Nan kontèks la IIOT pwotokòl AMQP ak aplikasyon li nan RabbitMQ itilize pou echanj done ant sèvè (sèvè-sèvè). Sèvi ak plugin a tou MQTT Plugin RabbitMQ ki se yon aplikasyon pwotokòl la MQTT pou transmèt done ant Capteur ak sèvè nan anviwònman ki ba vitès ak gwo latansi (yon lis konplè pwotokòl sipòte yo nan sit entènèt pwojè).
Nan pwochen atik la nou pral kòmanse konprann Echanj yo an plis detay.