Exchange — intercambiador ou punto de intercambio. Envíanlle mensaxes. Exchangedistribúe a mensaxe nunha ou varias filas. El encamiña as mensaxes a unha cola en función das conexións creadas (bindings) entre el e a cola.
Exchange non é Proceso de Erlang. Por razóns de escalabilidade exchange - esta é unha liña (enlace a un módulo con código onde se atopa a lóxica de enrutamento) na base de datos integrada mnesia. 1 intercambiadores consumirán só 1 MB de memoria.
CoelloMQ. Parte 4. Comprender o que son as mensaxes e os marcos
CoelloMQ. Parte 5: Publicación de mensaxes e rendemento do consumo
CoelloMQ. Parte 6. Revisión dos módulos Federación e Pala
CoelloMQ. Parte 7. Detalles sobre Connection e Chanel
CoelloMQ. Parte 8. RabbitMQ en .NET
CoelloMQ. Parte 9. Seguimento
Intercambio Directo
Direct exchange - úsase cando sexa necesario entregar a mensaxe a colas específicas. A mensaxe publícase ao intercambiador cun específico clave de enrutamento e métese en todas as filas que están conectadas a este intercambiador cunha clave de enrutamento similar. A clave de enrutamento é unha cadea. A correspondencia atópase usando comprobando a equivalencia das cadeas.
Representación gráfica do fluxo de mensaxes:
В rabbitmq hai un concepto intercambiador predeterminado. É direct exchange sen nome. Se se usa o intercambiador predeterminado, a mensaxe encamiñarase a unha cola cun nome igual a clave de enrutamento de mensaxes.
Intercambio de temas
Topic exchange – semellante direct exchange permite o enrutamento selectivo comparando a clave de enrutamento. Pero, neste caso, a clave está dada segundo o modelo. Ao crear un modelo, use 0 ou máis palabras (letras AZ и az e números 0-9), separados por un punto, así como símbolos * и #.
* - pode ser substituído por exactamente 1 a palabra
# - pode ser substituído por 0 ou máis palabras
Representación gráfica do fluxo de mensaxes:
Desde a versión RabbitMQ 2.4.0 algoritmo de enrutamento para topic exchange comezou a traballar ata 145 veces máis rápido. Conseguírono introducindo un enfoque probar a implementación, que implica representar patróns como unha estrutura en árbore. Por exemplo modelos a.b.c, a.*.b.c, a.#.c и b.b.c estará representada pola seguinte estrutura:
A busca de coincidencia dun patrón realízase partindo da raíz e procedendo de arriba a abaixo.
Características:
o uso deste intercambiador pode converterse unha boa opción para o posible desenvolvemento futuro da aplicación, porque os modelos sempre se poden personalizar para que a mensaxe se publique do mesmo xeito direct exchange ou fanout exchange
modelos que usan *moito máis rápidoque os modelos que usan #.
topic exchange máis lento direct exchange
Intercambio de fanout
Fanout exchange - todas as mensaxes son entregadas a todas as filas aínda que se especifique unha clave de enrutamento na mensaxe.
Características:
RabbitMQnon funciona con chaves de enrutamento e modelos que ten un efecto positivo na produtividade. Este é o máis rápido exchange;
todos os consumidores deben poder procesar todas as mensaxes;
Representación gráfica do fluxo de mensaxes:
Intercambio de cabeceiras
Headers exchange - encamiña as mensaxes ás filas asociadas en función da comparación de pares de propiedades (clave, valor). headers ligazóns e propiedades de mensaxes similares. headers é un Dictionary<ключ, значение>.
Se engades unha clave especial ao dicionario x-match con valor any, entón a mensaxe envíase se hai unha coincidencia parcial de pares (clave, valor). Este comportamento é semellante ao do operador or.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");
Chave predeterminada x-match contén o valor all. Isto significa que a mensaxe envíase se os pares (chave, valor) coinciden exactamente. Este comportamento é semellante ao do operador and.
Representación gráfica do fluxo de mensaxes:
Características:
flexibilidade adicional
sobrecarga computacional adicional. Todos os pares (clave, valor) dun atributo headers debe ordenarse polo nome da chave antes de calcular os valores de enrutamento de mensaxes. Máis lento que outros tipos de intercambio.
Intercambio de hashing consistente
Este intercambiador é enchufar и non incorporado в RabbitMQ.
Consistent-hashing exchange (intercambio con hash consistente): úsase cando hai varias filas que son posibles destinatarios dunha mensaxe e cando precisa equilibrar a carga entre elas. A conexión dunha mensaxe coa cola prodúcese por peso (valor de cadea condicional de 0 - n).
Peso equivalente das filas: indica que recibirá cada fila aproximadamente a mesma cantidade mensaxes (cada mensaxe colocarase só nunha cola). Non existe unha garantía total de distribución uniforme das mensaxes.
Representación gráfica do fluxo de mensaxes:
Hash calculado en función da clave ou propiedade de enrutamento headers mensaxes. Se todas as mensaxes publicadas tivesen claves de enrutamento diferentes ou headers, entón a distribución producirase por peso. En caso contrario, utilizarase a clave de enrutamento ou headers.
Debería axudar cando o rendemento dos consumidores necesita crecer máis que unha solución con varios consumidores usando unha única cola.
Intercambiadores combinados (E2E)
O comportamento de todos os intercambiadores pódese combinar mediante a comunicación Intercambio a Intercambio (Os intercambiadores combinados non están incluídos na especificación AMQP. Esta é unha extensión do protocolo desde o lado RabbitMQ).
Representación gráfica do fluxo de mensaxes:
A costa de E2E podemos atopar a configuración escalable adecuada para satisfacer os requisitos actuais e crecentes.
Crear intercambio
A creación dun intercambiador prodúcese mediante o sincrónico RPC solicitude ao servidor. A solicitude realízase mediante o método Exchange.Declarechamado con parámetros:
exchange — o nome do intercambiador que queremos crear. O nome debe ser único
type - Tipo de intercambiador
durable - se está instalado true, Entón exchange será permanente. Almacenarase no disco e pode sobrevivir a un reinicio do servidor/corretor. Se o valor false, Entón exchange é temporal e eliminarase cando se reinicie o servidor/corredor
autoDelete - eliminación automática. Exchange eliminarase cando se eliminen todas as filas asociadas a el
arguments - argumentos opcionais. Na maioría das veces, especifican mediante argumentos alternative exchange (intercambiador alternativo). Se unha mensaxe non pode viaxar pola ruta orixinal, pódese enviar a un intercambiador alternativo para ser encamiñada por un camiño diferente.
Se creación exchangequizais, entón o servidor enviará ao cliente un sincrónico RPC responder Exchange.DeclareOk. Se creación é imposible (a solicitude foi denegada Exchange.Declare), entón a canle pecharase servidor mediante un comando asíncrono Channel.Close e o cliente recibirá unha excepción OperationInterruptedException, que conterá o código de erro e a súa descrición.
Debe crearse un intercambiador antes de publicar mensaxes. Se publicas unha mensaxe a algún intercambiador inexistente - RabbitMQ eliminarao silenciosamente.
Creando Exchange mediante GUI
Vaia ao panel de administración RabbitMQ baixo usuario guest (nome de usuario: guest e contrasinal: guest). Teña en conta que o usuario guest só se pode conectar desde localhost. Agora imos á pestana Exchanges e fai clic en Add a new exchange. Completa as propiedades:
A maioría das propiedades foron descritas anteriormente. Aquí observamos que se establecemos Internal, entón o intercambio só se pode usar para E2E. Producer non poderá enviar mensaxes a tal intercambio.
Conclusión
Ao desenvolver un sistema, é conveniente describir a topoloxía enrutamento utilizando unha gráfica. Pero antes de comezar a construír un gráfico, paga a pena destacar os camiños con moito tráfico, porque son eles os que demandan maior rendemento (actuación). A continuación, pode clasificar o tráfico. E só entón comezar a construír.
Se na gráfica construída hai conxunto finito claves de enrutamento, entón paga a pena mirar para varias fanout exchange, que son 1:1 relacionados coa clave de enrutamento. Lembrámolo fanout exchange o máis rápido.
Se o número de rutas tende ao infinito, entón debes prestarlle atención topic exchange ou, se o modelo non é necesario, pode seleccionar direct exchnge, porque el é máis rápido topic exchange.
Combinacións de diferentes exchange debería axudarche a atopar o correcto configuración escalable, que cumpre os requisitos do sistema actuais e os crecentes.
Número exchange e as colas deben ser mínimas en comparación co número de rutas.
No seguinte artigo comezaremos a comprender as colas e os enlaces con máis detalle.