Exchange — intercanviador o punt d'intercanvi. S'hi envien missatges. Exchangedistribueix el missatge en una o més cues. Ell encamina els missatges a una cua basat en les connexions creades (bindings) entre ell i la cua.
Exchange no ho és Procés Erlang. Per raons d'escalabilitat exchange - aquesta és una línia (enllaç a un mòdul amb codi on es troba la lògica d'encaminament) a la base de dades integrada mnèsia. 1 intercanviadors només consumiran 1 MB de memòria.
ConillMQ. Part 3. Comprensió de les cues i enllaços
ConillMQ. Part 4. Entendre què són els missatges i els marcs
ConillMQ. Part 5: Publicació de missatges i rendiment del consum
ConillMQ. Part 6. Revisió dels mòduls Federació i Pala
ConillMQ. Part 7. Detalls sobre Connection i Chanel
ConillMQ. Part 8. RabbitMQ a .NET
ConillMQ. Part 9. Seguiment
Intercanvi directe
Direct exchange - S'utilitza quan cal lliurar el missatge a cues específiques. El missatge es publica a l'intercanviador amb un missatge específic clau d'encaminament i entra a totes les cues que estan connectades a aquest intercanviador amb una clau d'encaminament similar. La clau d'encaminament és una cadena. La concordança es troba utilitzant comprovant l'equivalència de les cadenes.
Representació gràfica del flux de missatges:
В rabbitmq hi ha un concepte intercanviador per defecte. El direct exchange sense nom. Si s'utilitza l'intercanviador predeterminat, el missatge s'enviarà a una cua amb un nom igual a clau d'encaminament de missatges.
Intercanvi de temes
Topic exchange – similars direct exchange permet l'encaminament selectiu comparant la clau d'encaminament. Però, en aquest cas, la clau està donada segons la plantilla. Quan creeu una plantilla, feu servir 0 o més paraules (lletres AZ и az i números 0-9), separats per un punt, així com símbols * и #.
* - es pot substituir per exactament 1 Sòl
# - es pot substituir per 0 o més paraules
Representació gràfica del flux de missatges:
Des de la versió RabbitMQ 2.4.0 algorisme d'encaminament per topic exchange va començar a treballar fins 145 vegades més ràpid. Ho van aconseguir introduint un enfocament provar la implementació, que implica representar patrons com una estructura d'arbre. Per exemple plantilles a.b.c, a.*.b.c, a.#.c и b.b.c es representarà amb la següent estructura:
La cerca de la concordança d'un patró es duu a terme a partir de l'arrel i procedint de dalt a baix.
Característiques:
l'ús d'aquest intercanviador pot arribar a ser una bona opció per al possible desenvolupament futur de l'aplicació, perquè Les plantilles sempre es poden personalitzar perquè el missatge es publiqui de la mateixa manera direct exchange o fanout exchange
plantilles que utilitzen *molt més ràpidque les plantilles que utilitzen #.
topic exchange més lent direct exchange
Intercanvi de fanouts
Fanout exchange - tots els missatges s'entreguen a totes les cues encara que s'especifiqui una clau d'encaminament al missatge.
Característiques:
RabbitMQno funciona amb claus i plantilles d'encaminament que té un efecte positiu en la productivitat. Aquest és el més ràpid exchange;
tots els consumidors han de poder processar tots els missatges;
Representació gràfica del flux de missatges:
Intercanvi de capçaleres
Headers exchange - Encamina els missatges a les cues associades basant-se en la comparació de parells de propietats (clau, valor). headers enllaços i propietats de missatge similars. headers és un Dictionary<ключ, значение>.
Si afegiu una clau especial al diccionari x-match amb significat any, llavors el missatge s'encamina si hi ha una coincidència parcial de parells (clau, valor). Aquest comportament és similar al de l'operador or.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");
Clau per defecte x-match conté el valor all. Això vol dir que el missatge s'encamina si els parells (clau, valor) coincideixen exactament. Aquest comportament és similar al de l'operador and.
Representació gràfica del flux de missatges:
Característiques:
flexibilitat addicional
sobrecàrrega computacional addicional. Tots els parells (clau, valor) d'un atribut headers s'han d'ordenar pel nom de la clau abans de calcular els valors d'encaminament dels missatges. Més lent que altres tipus d'intercanvi.
Intercanvi de hashing coherent
Aquest intercanviador és connectar и no incorporat в RabbitMQ.
Consistent-hashing exchange (intercanvi amb hashing coherent): s'utilitza quan hi ha diverses cues que són receptors potencials d'un missatge i quan necessiteu equilibrar la càrrega entre elles. La connexió d'un missatge amb la cua es produeix per pes (valor de cadena condicional de 0 - n).
Pes equivalent de les cues - indica que cada cua rebrà aproximadament la mateixa quantitat missatges (cada missatge es col·locarà només en una cua). No hi ha una garantia completa de distribució uniforme dels missatges.
Representació gràfica del flux de missatges:
Hash calculat en funció de la clau o propietat d'encaminament headers missatges. Si tots els missatges publicats tinguessin claus d'encaminament diferents o headers, aleshores la distribució es produirà per pes. En cas contrari, s'utilitzarà la clau d'encaminament o headers.
Hauria d'ajudar quan el rendiment dels consumidors ha de créixer més que una solució amb diversos consumidors que utilitzen una única cua.
Intercanviadors combinats (E2E)
El comportament de tots els intercanviadors es pot combinar mitjançant la comunicació Intercanvi a intercanvi (la combinació d'intercanviadors no s'inclou a l'especificació AMQP. Aquesta és una extensió del protocol des del costat RabbitMQ).
Representació gràfica del flux de missatges:
A costa de E2E podem trobar la configuració escalable adequada per satisfer els requisits actuals i creixents.
Crear Exchange
La creació d'un intercanviador es produeix mitjançant síncrons RPC petició al servidor. La sol·licitud es fa mitjançant el mètode Exchange.Declarecridat amb paràmetres:
exchange — el nom de l'intercanviador que volem crear. El nom ha de ser únic
type - tipus d'intercanviador
durable - si està instal·lat true, Llavors exchange serà permanent. S'emmagatzemarà al disc i pot sobreviure a un reinici del servidor/agent. Si el valor false, Llavors exchange és temporal i s'eliminarà quan es reiniciï el servidor/agent
autoDelete - eliminació automàtica. Exchange s'eliminarà quan s'eliminin totes les cues associades
arguments - arguments opcionals. Molt sovint, especifiquen mitjançant arguments alternative exchange (intercanviador alternatiu). Si un missatge no pot viatjar per la ruta original, es pot enviar a un intercanviador alternatiu per ser encaminat per un camí diferent.
Si creació exchangepotser, aleshores el servidor enviarà al client un síncron RPC resposta Exchange.DeclareOk. Si creació és impossible (la sol·licitud va ser denegada Exchange.Declare) doncs el canal es tancarà servidor mitjançant una ordre asíncrona Channel.Close i el client rebrà una excepció OperationInterruptedException, que contindrà el codi d'error i la seva descripció.
S'ha de crear un intercanviador abans de publicar missatges. Si publiqueu un missatge a algun intercanviador inexistent - RabbitMQ l'eliminarà en silenci.
Creació d'Exchange mitjançant GUI
Aneu al tauler d'administració RabbitMQ sota usuari guest (nom d'usuari: guest i contrasenya: guest). Tingueu en compte que l'usuari guest només es pot connectar des de localhost. Ara anem a la pestanya Exchanges i feu clic a Add a new exchange. Ompliu les propietats:
La majoria de les propietats s'han descrit anteriorment. Aquí observem que si establim Internal, llavors l'intercanvi només es pot utilitzar per E2E. Producer no podrà enviar missatges a aquest intercanvi.
Conclusió
Quan es desenvolupa un sistema, és convenient descriure la topologia encaminament utilitzant un gràfic. Però abans de començar a construir un gràfic, val la pena destacar els camins amb molt trànsit, perquè són ells els que demanen rendiment més elevat (rendiment). A continuació, podeu classificar el trànsit. I només llavors començar a construir.
Si al gràfic construït n'hi ha conjunt finit tecles d'encaminament, llavors val la pena mirar-ne diverses fanout exchange, que són 1:1 relacionats amb la clau d'encaminament. Ho recordem fanout exchange el més ràpid.
Si el nombre de rutes tendeix a l'infinit, llavors hauríeu de parar atenció topic exchange o, si la plantilla no és necessària, podeu seleccionar-la direct exchnge, perquè ell és més ràpid topic exchange.
Combinacions de diferents exchange hauria d'ajudar-te a trobar el correcte configuració escalable, que compleix els requisits del sistema actuals i creixents.
Nombre exchange i les cues han de ser mínimes en comparació amb el nombre de rutes.
En el següent article començarem a entendre les cues i els enllaços amb més detall.