Exchange — intercambiador o punto de cambio. Se le envían mensajes. Exchangedistribuye mensaje en una o más colas. Él enruta mensajes a una cola basado en las conexiones creadas (bindings) entre él y la cola.
Exchange no es proceso erlang. Por razones de escalabilidad exchange - esta es una línea (enlace a un módulo con código donde se encuentra la lógica de enrutamiento) en la base de datos incorporada memoria. Mil intercambiadores consumirán sólo 1 MB de memoria.
ConejoMQ. Parte 3. Comprender las colas y los enlaces
ConejoMQ. Parte 4. Tratando con lo que son mensajes y marcos
ConejoMQ. Parte 5: Publicación y consumo de rendimiento de mensajes
ConejoMQ. Parte 6. Descripción general de los módulos Federation y Shovel
ConejoMQ. Parte 7. Detalles sobre Connection y Chanel
ConejoMQ. Parte 8. RabbitMQ en .NET
ConejoMQ. Parte 9. Monitoreo
Intercambio directo
Direct exchange - usado cuando sea necesario entregar mensajes a colas específicas. El mensaje se publica en el intercambiador con un mensaje específico. clave de enrutamiento y ingresa a todas las colas que están conectadas a este intercambiador con una clave de enrutamiento similar. La clave de enrutamiento es una cadena.. La coincidencia se encuentra usando comprobar la equivalencia de las cadenas.
Representación gráfica del flujo de mensajes:
В rabbitmq hay un concepto intercambiador predeterminado. Lo direct exchange sin nombre. Si se utiliza el intercambiador predeterminado, el mensaje se enrutará a una cola con un nombre igual a clave de enrutamiento de mensajes.
Intercambio de temas
Topic exchange - similar direct exchange permite el enrutamiento selectivo comparando la clave de enrutamiento. Pero, en este caso, la clave está dada por patrón. Al crear una plantilla, utilice 0 o más palabras (letras AZ и az y numeros 0-9), separados por un punto, así como símbolos * и #.
* - puede ser reemplazado por exactamente 1 palabra
# - puede ser reemplazado por 0 o más palabras
Representación gráfica del flujo de mensajes:
Desde la versión RabbitMQ 2.4.0 algoritmo de enrutamiento para topic exchange comenzó a trabajar hasta 145 veces más rápido. Lo lograron introduciendo un enfoque implementación de prueba, que implica representar patrones como una estructura de árbol. Por ejemplo plantillas a.b.c, a.*.b.c, a.#.c и b.b.c estará representado por la siguiente estructura:
La búsqueda de un patrón coincidente se realiza empezando desde la raíz y avanzando de arriba a abajo.
Características:
el uso de este intercambiador puede convertirse una buena opción para un posible desarrollo futuro de la aplicación, porque Las plantillas siempre se pueden personalizar para que el mensaje se publique de la misma manera. direct exchange o fanout exchange
plantillas que utilizan *mucho mas rápidoque las plantillas que utilizan #.
topic exchange mas lento direct exchange
Intercambio de distribución
Fanout exchange – todos los mensajes se entregan a todas las colas incluso si se especifica una clave de enrutamiento en el mensaje.
Características:
RabbitMQno funciona con claves y plantillas de enrutamiento lo que tiene un efecto positivo en la productividad. este es el mas rapido exchange;
todos los consumidores deben poder procesar todos los mensajes;
Representación gráfica del flujo de mensajes:
Intercambio de encabezados
Headers exchange - enruta mensajes a colas asociadas basándose en la comparación de pares de propiedades (clave, valor) headers enlaces y propiedades de mensajes similares. headers representa Dictionary<ключ, значение>.
Si agrega una clave especial al diccionario x-match con valor any, entonces el mensaje se enruta si hay una coincidencia parcial de pares (clave, valor). Este comportamiento es similar al del operador. or.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");
Clave predeterminada x-match contiene el valor all. Esto significa que el mensaje se enruta si los pares (clave, valor) coinciden exactamente. Este comportamiento es similar al del operador. and.
Representación gráfica del flujo de mensajes:
Características:
flexibilidad adicional
sobrecarga computacional adicional. Todos los pares (clave, valor) de un atributo headers debe ordenarse por nombre de clave antes de calcular los valores de enrutamiento de mensajes. Más lento que otros tipos de intercambio.
Intercambio de hash consistente
Este intercambiador es enchufar и no incorporado в RabbitMQ.
Consistent-hashing exchange (intercambio con hash consistente): se usa cuando hay varias colas que son destinatarios potenciales de un mensaje y cuando es necesario equilibrar la carga entre ellas. La conexión de un mensaje con la cola se produce por peso (valor de cadena condicional de 0 - n).
Peso equivalente de colas: indica que cada cola recibirá aproximadamente la misma cantidad mensajes (cada mensaje se colocará en una sola cola). No existe una garantía completa de distribución uniforme de mensajes..
Representación gráfica del flujo de mensajes:
Hash calculado en función de la clave de enrutamiento o la propiedad headers mensajes. Si todos los mensajes publicados tuvieran diferentes claves de enrutamiento o headers, entonces la distribución se realizará en peso. De lo contrario, se utilizará la clave de enrutamiento o headers.
Debería ayudar cuando el rendimiento del consumidor necesita crecer más que una solución con varios consumidores utilizando una sola cola.
Combinando intercambiadores (E2E)
El comportamiento de todos los intercambiadores se puede combinar mediante la comunicación. Intercambio a Intercambio (La combinación de intercambiadores no está incluida en la especificación AMQP. Esta es una extensión del protocolo desde el lado. RabbitMQ).
Representación gráfica del flujo de mensajes:
Por E2E podemos encontrar la configuración escalable adecuada para satisfacer los requisitos actuales y crecientes.
Crear intercambio
La creación de un intercambiador se produce mediante sincronización. RPC solicitud al servidor. La solicitud se realiza mediante el método Exchange.Declare, llamado con parámetros:
exchange — el nombre del intercambiador que queremos crear. El nombre debe ser único
type — tipo de intercambiador
durable - si está instalado trueentonces exchange será permanente. Se almacenará en el disco y puede sobrevivir a un reinicio del servidor/broker. si el valor falseentonces exchange es temporal y se eliminará cuando se reinicie el servidor/broker
autoDelete - eliminación automática. Exchange se eliminará cuando se eliminen todas las colas asociadas con él
arguments - argumentos opcionales. La mayoría de las veces, especifican mediante argumentos. alternative exchange (intercambiador alternativo). Si un mensaje no puede viajar por la ruta original, se puede enviar a un intercambiador alternativo para que lo enrute por una ruta diferente.
si la creación exchangetal vez, entonces el servidor enviará al cliente un síncrono RPC responder Exchange.DeclareOk. si la creación imposible (hubo una negativa a la solicitud Exchange.Declare) entonces el canal se cerrara servidor usando un comando asíncrono Channel.Close y el cliente obtendrá una excepción OperationInterruptedExceptionOperationInterruptedException, que contendrá el código de error y su descripción.
Se debe crear un intercambiador antes de publicar mensajes. Si publica un mensaje en algún intercambiador inexistente, RabbitMQ lo eliminará silenciosamente.
Creando Exchange a través de GUI
Ir al panel de administración RabbitMQ bajo usuario guest (nombre de usuario: guest y contraseña: guest). Tenga en cuenta que el usuario guest solo se puede conectar desde localhost. Ahora vamos a la pestaña Exchanges y haga clic en Add a new exchange. Rellena las propiedades:
La mayoría de las propiedades se han descrito anteriormente. Aquí observamos que si configuramos Internal, entonces el intercambio sólo se puede utilizar para E2E. Producer no podrá enviar mensajes a dicho intercambio.
Conclusión
Al desarrollar un sistema, es conveniente describir la topología. enrutamiento utilizando una gráfica. Pero antes de comenzar a construir un gráfico, vale la pena resaltar las rutas con mucho tráfico, porque ellos son los que exigen mayor rendimiento (actuación). A continuación, puedes clasificar el tráfico. Y sólo entonces empezar a construir.
Si en el gráfico construido hay conjunto finito claves de enrutamiento, entonces vale la pena buscar varias fanout exchange, que están relacionados 1:1 con la clave de enrutamiento. recordamos que fanout exchange el más rápido.
Si el número de rutas tiende al infinito, vale la pena prestar atención topic exchange o, si la plantilla no es necesaria, puede seleccionar direct exchnge, porque el es mas rapido topic exchange.
Combinaciones de diferentes exchange debería ayudarte a encontrar el correcto configuración escalable, que cumple con los requisitos del sistema actuales y crecientes.
número exchange y las colas deben ser mínimas en comparación con el número de rutas.
En el próximo artículo comenzaremos a comprender las colas y los enlaces con más detalle.