Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Editando
Advanced Message Queuing Protocol
(sección)
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
== El modelo AMQP == [[Archivo:The-amqp-model-for-wikipedia.svg|thumb|300px|Entidades en el modelo AMQP usadas para la transferencia de un mensaje]] AMQP define una serie de entidades. Desde la perspectiva de la interconexión las más relevantes son: * El '''corredor de mensajes''': un servidor al que los clientes AMQP se conectan usando el protocolo AMQP. Los corredores de mensajes pueden ejecutarse en un entorno distribuido, pero esta capacidad es específica de la implementación y no está cubierta por la especificación. * '''Usuario''': un usuario es una entidad que, mediante la presentación de credenciales tales como una contraseña, puede ser autorizado (o puede no serlo) a conectarse a un corredor. * '''Conexión''': una conexión física usando por ejemplo [[TCP/IP]] o [[SCTP]]. Una conexión está ligada a un usuario. * '''Canal''': una conexión lógica que está unida a una conexión. Así pues, la comunicación a través de un canal posee un estado. Aquellos clientes que realicen operaciones concurrentes mediante una misma conexión deben mantener un canal distinto para cada una de ellas. Aquellos clientes que usen un modelo basado en [[Hilo (informática)|hilos]] para la concurrencia pueden, por ejemplo, encapsular la declaración del canal en una variable local de cada hilo. Las entidades utilizadas para el envío y recepción de mensajes en concreto son todas declaradas dentro de un canal. Una declaración garantiza al cliente que la realiza que la entidad existe (o fue previamente declarada por otro cliente). Cualquier intento de declarar una entidad nombrada con propiedades diferentes de las que poseía cuando fue declarada resulta en un error. Para poder cambiar las propiedades de una entidad nombrada, debe ser primero borrada con anterioridad a su nueva creación. Algunas de estas entidades están nombradas. Su denominación debe ser única dentro del alcance de la entidad y de su corredor. Dado que los clientes habitualmente no tienen los medios para obtener una lista de todas las entidades nombradas disponibles (al menos no hay una operación tal definida dentro de la especificación AMQP), es el conocimiento del nombre de una entidad lo que permite al cliente realizar operaciones sobre ésta. Los nombres usan la codificación [[UTF-8]], deben tener una longitud de entre 1 y 255 caracteres y deben empezar por un dígito, una letra o un guion bajo. === Intercambiadores === Los intercambiadores son las entidades a las que se envía los mensajes. Tienen un nombre así como un tipo y unas propiedades tales como: * pasivo: el intercambiador no será declarado pero ocurrirá un error si no existe. * perdurable: el intercambiador sobrevivirá a un reinicio del intercambiador. * autoborrado: el intercambiador será borrado tan pronto como ya no queden colas vinculadas a él. Aquellos intercambiadores que nunca hayan tenido colas vinculadas nunca serán autoborrados. Nótese que está prevista la supresión de los intercambiadores en AMQP/1.0. === Colas === Las colas son las entidades que reciben mensajes. Tienen un nombre y propiedades pero no tienen tipo. Los clientes pueden subscribirse a las colas, con el efecto de que el corredor de mensajes les entregará (mediante un mecanismo de [[Tecnología Push|push]], es decir, de forma activa por parte del corredor) a los clientes los contenidos de la cola. Alternativamente los clientes pueden hacer saltar activamente mensajes de la cola como crean conveniente (mecanismo de [[Tecnología Pull|pull]]). La cola garantiza que los mensajes son entregados en el mismo orden en que llegaron a la cola; esta ordenación se conoce habitualmente como [[FIFO]]. En algunos casos de reenrutamiento (por ejemplo debido a un fallo que implique un reinicio del corredor) este orden no se garantiza. Las propiedades de las colas incluyen: * intercambiador alternativo: cuando un mensaje es rechazado por un subscriptor o queda huérfano debido a la destrucción de una cola, son reenrutados a un intercambiador alternativo y borrados de esta cola. * pasiva: la cola no será declarado pero ocurrirá un error si no existe. * perdurable: la cola sobrevivirá a un reinicio del corredor. * exclusiva: solo puede haber un cliente para esta cola específica. * autoborrado: la cola será borrada tan pronto como no queden suscripciones activas para ella. Esta propiedad comparte la misma limitación que la propiedad de autoborrado para los intercambiadores: si ninguna suscripción ha estado jamás activa para esta cola, no será autoborrada. Una cola exclusiva, sin embargo, siempre será autoborrada cuando el cliente cierre la sesión. Nótese que está previsto que las colas reemplacen a los intercambiadores en AMQP/1.0. === Mensajes === Los mensajes no tienen nombre y son publicados en un intercambiador. Consisten en un encabezamiento y un cuerpo de contenido. Mientras que el cuerpo contiene datos opacos, el encabezamiento contiene una serie de propiedades opcionales: * clave de enrutamiento (''routing-key''): este campo se usa de diferentes formas dependiendo del tipo de intercambiador. * inmediato: el mensaje será tratado como imposible de enrutar si al menos una de las colas que deberían recibir el mensaje no tiene ninguna suscripción. * modo de entrega: indica que un mensaje puede necesitar perdurabilidad. Solo para este tipo de mensajes puede el corredor hacer un intento ([[best-effort]]) para impedir la pérdida del mensaje antes de que sea consumido. Si hay alguna incertidumbre del lado del corredor sobre la recepción correcta del mensaje (por ejemplo en caso de errores), puede opcionalmente entregar un mismo mensaje más de una vez. Los modos de entrega no persistentes no muestran este tipo de comportamiento. * prioridad: un indicador (en el rango entre 0 y 9) de que un mensaje tiene precedencia sobre otros. * vencimiento (''expiration''): la duración en milisegundos antes de que el corredor pueda tratar el mensaje como imposible de enrutar. === Vinculaciones === Una vinculación (''binding'') es una relación entre una cola y un intercambiador que especifica cómo fluyen los mensajes desde el intercambiador a la cola. Las propiedades de la vinculación concuerdan con el algoritmo de enrutamiento que se usa en los intercambiadores. Las vinculaciones (y los algoritmos de los intercambiadores) pueden ser ordenados en una escala de menor a mayor complejidad: * Incondicional: la vinculación no tiene propiedades y reclama ''todos'' los mensajes del intercambiador. * Condicional con una cadena fija: la vinculación tiene una propiedad, la '''clave de enrutamiento''' y reclama todos los mensajes que tengan una clave de enrutamiento idéntica. * Condicional con un patrón de reconocimiento: la vinculación tiene una propiedad, la '''clave de enrutamiento''' y reclama todos los mensajes que sean detectados por un algoritmo de [[reconocimiento de patrones]]. Se puede usar cualquier sintaxis arbitraria de patrones. AMQP implementa el reconocimiento de temas. * Condicional con múltiples cadenas fijas: la vinculación tiene una tabla de propiedades, los '''argumentos''', y reclama todos los mensajes cuyos encabezamientos se correspondan con estos argumentos, usando operaciones lógicas AND o OR para combinar las diferentes correspondencias. * Condicional con una comparación algorítmica: la vinculación tiene una expresión algorítmica (como una cláusula WHERE en una sentencia SELECT en [[SQL]]) y reclama todos los mensajes cuyos encabezamientos se correspondan con esta expresión. * Condicional con inspección del contenido: la vinculación especifica criterios arbitrarios que solo pueden ser resueltos mediante la inspección del contenido concreto del mensaje. No todas estas vinculaciones son implementadas de manera estándar, o por todas las implementaciones. === Tipos de intercambiadores y el efecto de las vinculaciones === Estas cuatro entidades forman el modelo básico de AMQP. La clave para entender cómo un mensaje es pasado a una cola reside en la relación entre el tipo de intercambiador y la interpretación resultante de la clave de enrutamiento. Un intercambiador entregará como máximo una copia de un mensaje dado a una cola si la clave de enrutamiento en el mensaje se corresponde a una vinculación (otras vinculaciones posteriores semánticamente idénticas '''no''' pueden resultar en copias duplicadas del mismo mensaje). Lo que constituye una correspondencia, en cambio, es exclusivamente dependiente del tipo de intercambiador: * un intercambiador '''directo''' considera que hay correspondencia cuando la clave de enrutamiento y la clave de la vinculación son idénticas. * un intercambiador de abanico (''fanout'') siempre considera que hay correspondencia, incluso con vinculaciones sin clave. * un intercambiador con un tema definido (''topic exchange'') considera que hay correspondencia si la propiedad de clave de enrutamiento de un mensaje coincide con las palabras claves de una vinculación. Estas palabras son cadenas de caracteres separadas por puntos. Dos caracteres adicionales son también válidos: el asterisco "*", que crea una correspondencia con 1 palabra, y la almohadilla "#", que crea una correspondencia con 0 a N palabras. Por ejemplo, ''*.stock.#'' tendrá una correspondencia con las claves ''usd.stock'' y ''eur.stock.db'', pero no con ''stock.nasdaq''. * un intercambiador de encabezamientos considera que hay correspondencia en presencia tanto de claves como de pares clave-valor que pueden ser concatenadas con conexiones lógicas AND y OR en el encabezamiento de un mensaje. En este caso, la clave enrutamiento no es un criterio de correspondencia que sea considerado por el intercambiador. Ni tampoco contiene la vinculación una única clave de enrutamiento, sino un formato especial que contiene claves de encabezamiento y/o pares clave-valor que crean una correspondencia al estar presente la clave del encabezamiento o al estar presente la clave del encabezamiento y el valor ser el mismo, respectivamente. Otros tipos de intercambiadores, por ejemplo específicos del suministrador, son permitidos explícitamente por la especificación. El concepto de vincular colas denominadas con intercambiadores denominados tiene propiedades poderosas (mientras que la vinculación mantiene ambas entidades independientes entre sí). Es posible, por ejemplo, vincular una única cola mediante vinculaciones múltiples a un único intercambiador, o a varios. O múltiples consumidores pueden compartir el nombre de una cola y vincularse a ella con los mismos parámetros, obteniendo por tanto solo los mensajes que los otros consumidores no hayan consumido. O múltiples consumidores pueden declarar colas independientes pero compartir las mismas vinculaciones y obtener por tanto todos ellos el mensaje que otro consumidor hubiera obtenido en el intercambiador vinculado con estas vinculaciones.
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Editando
Advanced Message Queuing Protocol
(sección)
Añadir idiomas
Añadir tema