Entidades de Java Message Service (JMS) 2.0

Las aplicaciones cliente que se conectan a Azure Service Bus Premium y usan la biblioteca JMS de Azure Service Bus pueden utilizar las siguientes entidades.

Colas

Las colas de JMS se pueden comparar semánticamente con las colas de Service Bus tradicionales.

Para crear una cola, use los métodos siguientes de la clase JMSContext:

Queue createQueue(String queueName)

Temas

Los temas de JMS se pueden comparar semánticamente con los temas de Service Bus tradicionales.

Para crear un tema, use los métodos siguientes de la clase JMSContext:

Topic createTopic(String topicName)

Colas temporales

Si una aplicación cliente requiere una entidad temporal que existe durante la vigencia de la aplicación, puede usar colas temporales. Estas entidades se utilizan con el patrón de solicitud-respuesta.

Para crear una cola temporal, use los métodos siguientes de la clase JMSContext:

TemporaryQueue createTemporaryQueue()

Temas temporales

Al igual que las colas temporales, los temas temporales existen para habilitar la publicación o suscripción a través de una entidad temporal que existe durante la vigencia de la aplicación.

Para crear un tema temporal, use los métodos siguientes de la clase JMSContext:

TemporaryTopic createTemporaryTopic()

Suscripciones de Java Message Service (JMS)

Aunque estas son semánticamente similares a las suscripciones (es decir, existen en un tema y habilitan la semántica de publicación o suscripción), la especificación de Java Message Service presenta los conceptos de los atributos Compartido, No compartido, **Duradero y No duradero para una suscripción determinada.

Nota

Las suscripciones siguientes están disponibles en el nivel Premium de Azure Service Bus para las aplicaciones cliente que se conectan a Azure Service Bus mediante la biblioteca JMS de Azure Service Bus.

Solo se pueden crear suscripciones duraderas mediante Azure Portal.

Suscripciones duraderas compartidas

Una suscripción duradera compartida se usa cuando una aplicación va a recibir y procesar todos los mensajes publicados en un tema, independientemente de si la aplicación se utiliza de forma activa en la suscripción en todo momento.

Cualquier aplicación autenticada para recibir de Service Bus puede recibir de la suscripción duradera compartida.

Para crear una suscripción duradera compartida, use los métodos siguientes de la clase JMSContext:

JMSConsumer createSharedDurableConsumer(Topic topic, String name)

JMSConsumer createSharedDurableConsumer(Topic topic, String name, String messageSelector)

La suscripción duradera compartida seguirá existiendo a menos que se elimine mediante el método unsubscribe de la clase JMSContext.

void unsubscribe(String name)

Suscripciones duraderas no compartidas

Al igual que una suscripción duradera compartida, una suscripción duradera no compartida se usa cuando una aplicación va a recibir y procesar todos los mensajes publicados en un tema, independientemente de si la aplicación se utiliza de forma activa en la suscripción.

Sin embargo, puesto que se trata de una suscripción no compartida, solo la aplicación que creó la suscripción puede recibir de ella.

Para crear una suscripción duradera no compartida, use los métodos siguientes de la clase JMSContext:

JMSConsumer createDurableConsumer(Topic topic, String name)

JMSConsumer createDurableConsumer(Topic topic, String name, String messageSelector, boolean noLocal)

Nota

La característica noLocal no se admite actualmente y se omite.

La suscripción duradera no compartida seguirá existiendo a menos que se elimine mediante el método unsubscribe de la clase JMSContext.

void unsubscribe(String name)

Suscripciones no duraderas compartidas

Una suscripción no duradera compartida se usa cuando es necesario que varias aplicaciones cliente reciban y procesen mensajes de una suscripción única, solo hasta que se utilicen de forma activa en ella o reciban de ella.

Dado que la suscripción no es duradera, no se conserva. Esta suscripción no recibe los mensajes cuando no hay consumidores activos en la misma.

Para crear una suscripción no duradera compartida, cree JmsConsumer como se muestra en los siguientes métodos de la clase JMSContext:

JMSConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName)

JMSConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName, String messageSelector)

La suscripción no duradera compartida seguirá existiendo hasta que haya consumidores activos que reciban de la misma.

Suscripciones no duraderas no compartidas

Una suscripción no duradera no compartida se usa cuando es necesario que la aplicación cliente reciba y procese un mensaje de una suscripción, solo hasta que se utilice de forma activa en ella. Solo puede existir un consumidor en esta suscripción, es decir, el cliente que creó la suscripción.

Dado que la suscripción no es duradera, no se conserva. Esta suscripción no recibe los mensajes cuando no hay ningún consumidor activo en la misma.

Para crear una suscripción no duradera no compartida, cree JMSConsumer como se muestra en los siguientes métodos de la clase JMSContext:

JMSConsumer createConsumer(Destination destination)

JMSConsumer createConsumer(Destination destination, String messageSelector)

JMSConsumer createConsumer(Destination destination, String messageSelector, boolean noLocal)

Nota

La característica noLocal no se admite actualmente y se omite.

La suscripción no duradera no compartida seguirá existiendo hasta que haya un consumidor activo que reciba de la misma.

Selectores de mensajes

Al igual que existen filtros y acciones para las suscripciones normales a Service Bus, existen selectores de mensajes para las suscripciones de JMS.

Los selectores de mensajes se pueden configurar en cada una de las suscripciones de JMS y existen como una condición de filtro en las propiedades del encabezado del mensaje. Solo se entregarán aquellos mensajes cuyas propiedades de encabezado coincidan con la expresión de selector de mensajes. Un valor de null o una cadena vacía indica que no hay ningún selector de mensajes para el consumidor o la suscripción de JMS.

Conceptos adicionales para las suscripciones de Java Message Service 2.0

Ámbito del cliente

Las suscripciones, tal y como se especifican en la API de Java Message Service 2.0, pueden tener o no un ámbito limitado a aplicaciones cliente específicas (identificadas con el identificador clientId adecuado).

Una vez que se limita el ámbito de una suscripción, solo se puede acceder a ella desde las aplicaciones cliente que tengan el mismo identificador de cliente.

Cualquier intento de acceder a una suscripción cuyo ámbito esté limitado a un identificador de cliente específico (por ejemplo, clientId1) desde una aplicación con otro identificador de cliente (por ejemplo, clientId2) dará lugar a la creación de otra suscripción cuyo ámbito sea el otro identificador de cliente (clientId2).

Nota

El identificador de cliente puede ser null o estar vacío, pero debe coincidir con el identificador de cliente establecido en la aplicación cliente de JMS. Desde la perspectiva de Azure Service Bus, un identificador de cliente NULL y un identificador de cliente vacío tienen el mismo comportamiento.

Si el identificador de cliente es null o está vacío, solo es accesible para las aplicaciones cliente cuyo identificador de cliente también sea null o esté vacío.

Capacidad de uso compartido

Las suscripciones compartidas permiten que varios clientes o consumidores (es decir, objetos JMSConsumer) reciban mensajes de ellos.

Nota

Varios clientes o consumidores podrán seguir accediendo a las suscripciones compartidas con un ámbito limitado a un identificador de cliente específico (es decir, objetos JMSConsumer), pero cada una de las aplicaciones cliente debe tener el mismo identificador de cliente.

Las suscripciones no compartidas solo permiten que un único cliente o consumidor (es decir, un objeto JMSConsumer) reciba mensajes de ellas. Si se crea un objeto JMSConsumer en una suscripción no compartida al tiempo que ya tiene una escucha de JMSConsumer activa para los mensajes de ella, se producirá una excepción JMSException.

Durabilidad.

Las suscripciones duraderas se conservan y continúan recopilando mensajes del tema, independientemente de si una aplicación (JMSConsumer) está consumiendo los mensajes de este.

No se conservarán las suscripciones no duraderas y los mensajes del tema se recopilarán siempre y cuando una aplicación (JMSConsumer) consuma los mensajes de este.

Representación de suscripciones de clientes con ámbito

Dado que las suscripciones de cliente (JMS) con ámbito deben coexistir con las suscripciones existentes, la manera en que se representan las suscripciones de clientes (JMS) con ámbito tiene el siguiente formato.

  • <SUBSCRIPTION-NAME>$<CLIENT-ID>$D (para suscripciones duraderas)
  • <SUBSCRIPTION-NAME>$<CLIENT-ID>$ND (para suscripciones no duraderas)

Aquí, $ es el delimitador.

Pasos siguientes

Para más información y ejemplos de cómo usar la mensajería de Service Bus, consulte estos temas avanzados: