Partilhar via


Guia do desenvolvedor do Azure Service Bus JMS 2.0

Este guia contém informações detalhadas para ajudá-lo a ter sucesso na comunicação com o Barramento de Serviço do Azure usando a API do Java Message Service (JMS) 2.0.

Como programador Java, se és novo no Azure Service Bus, considera ler os seguintes artigos.

Como Começar Conceitos

Modelo de programação Java Message Service (JMS)

O modelo de programação da API do Java Message Service é conforme mostrado nas seguintes seções:

Observação

A camada Premium do Barramento de Serviço do Azure suporta JMS 1.1 e JMS 2.0.

O Barramento de Serviço do Azure - camada Standard suporta funcionalidade limitada do JMS 1.1. Para obter mais detalhes, consulte esta documentação.

JMS - Blocos de construção

Os blocos de construção abaixo estão disponíveis para comunicação com o aplicativo JMS.

Observação

O guia abaixo foi adaptado do Oracle Java EE 6 Tutorial for Java Message Service (JMS)

Recomenda-se consultar este tutorial para uma melhor compreensão do Java Message Service (JMS).

Fábrica de conexões

O objeto de fábrica de conexão é usado pelo cliente para se conectar com o provedor JMS. A fábrica de conexões encapsula um conjunto de parâmetros de configuração de conexão que são definidos pelo administrador.

Cada fábrica de conexões é uma instância da interface ConnectionFactory, QueueConnectionFactory ou TopicConnectionFactory.

Para simplificar a conexão com o Barramento de Serviço do Azure, essas interfaces são implementadas por meio do ServiceBusJmsConnectionFactory, ServiceBusJmsQueueConnectionFactoryou ServiceBusJmsTopicConnectionFactory respectivamente.

Importante

Os aplicativos Java que utilizam a API JMS 2.0 podem se conectar ao Barramento de Serviço do Azure usando a cadeia de conexão ou usando um TokenCredential para aproveitar a autenticação apoiada pelo Microsoft Entra. Ao usar a autenticação com backup do Microsoft Entra, certifique-se de atribuir funções e permissões à identidade conforme necessário.

Crie uma identidade gerida atribuída pelo sistema no Azure e use essa identidade para criar um TokenCredential.

TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();

A fábrica do Connection pode então ser instanciada com os parâmetros abaixo.

  • Credencial de token - Representa uma credencial capaz de fornecer um token OAuth.
  • Host - o nome de anfitrião do namespace da camada Premium do Barramento de Serviço do Azure.
  • Saco de propriedades ServiceBusJmsConnectionFactorySettings, que contém
    • connectionIdleTimeoutMS - tempo limite de conexão ociosa em milissegundos.
    • traceFrames - sinalizador booleano para coletar quadros de rastreamento AMQP para depuração.
    • Outros parâmetros de configuração

A fábrica pode ser criada como mostrado aqui. A credencial de token e o host são parâmetros necessários, mas as outras propriedades são opcionais.

String host = "<YourNamespaceName>.servicebus.windows.net";
ConnectionFactory factory = new ServiceBusJmsConnectionFactory(tokenCredential, host, null); 

Destino JMS

Um destino é o objeto que um cliente usa para especificar o destino das mensagens que produz e a origem das mensagens que consome.

Destinos mapeados para entidades no Barramento de Serviço do Azure - filas (em cenários ponto a ponto) e tópicos (em cenários pub-sub).

Conexões

Uma conexão encapsula uma ligação virtual com um fornecedor de JMS. Com o Barramento de Serviço do Azure, ele representa uma conexão com monitoração de estado entre o aplicativo e o Barramento de Serviço do Azure sobre AMQP.

Uma conexão é criada a partir da fábrica de conexões, conforme mostrado no exemplo a seguir:

Connection connection = factory.createConnection();

Sessões

Uma sessão é um contexto de thread único para produzir e consumir mensagens. Ele pode ser utilizado para criar mensagens, produtores de mensagens e consumidores, mas também fornece um contexto transacional para permitir o agrupamento de envios e recebimentos em uma unidade atômica de trabalho.

Uma sessão pode ser criada a partir do objeto de conexão, conforme mostrado no exemplo a seguir:

Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);

Observação

A API JMS não suporta o recebimento de mensagens de filas de barramento de serviço ou tópicos com sessões de mensagens habilitadas.

Modos de sessão

Uma sessão pode ser criada com qualquer um dos modos abaixo.

Modos de sessão Comportamento
Session.AUTO_ACKNOWLEDGE A sessão confirma automaticamente a receção de uma mensagem por parte de um cliente quando a sessão retorna com sucesso após uma chamada de receção ou quando o ouvinte de mensagens que a sessão chamou para processar a mensagem retorna com sucesso.
Session.CLIENT_ACKNOWLEDGE O cliente reconhece uma mensagem consumida chamando o método de reconhecimento da mensagem.
Session.DUPS_OK_ACKNOWLEDGE Este modo de confirmação instrui a sessão a reconhecer preguiçosamente a entrega de mensagens.
Session.SESSION_TRANSACTED Esse valor pode ser passado como argumento para o método createSession(int sessionMode) no objeto Connection para especificar que a sessão deve usar uma transação local.

Quando o modo de sessão não é especificado, o Session.AUTO_ACKNOWLEDGE é selecionado por padrão.

JMSContext

Observação

JMSContext é definido como parte da especificação JMS 2.0.

JMSContext combina a funcionalidade fornecida pelo objeto de conexão e sessão. Pode ser criado a partir do objeto fábrica de conexões.

JMSContext context = connectionFactory.createContext();

Modos JMSContext

Assim como o objeto Session , o JMSContext pode ser criado com os mesmos modos de reconhecimento mencionados nos modos Session.

JMSContext context = connectionFactory.createContext(JMSContext.AUTO_ACKNOWLEDGE);

Quando o modo não é especificado, o JMSContext.AUTO_ACKNOWLEDGE é escolhido por padrão.

Produtores de mensagens JMS

Um produtor de mensagens é um objeto que é criado usando um JMSContext ou uma sessão e usado para enviar mensagens para um destino.

Ele pode ser criado como um objeto autônomo, conforme mostrado no exemplo a seguir:

JMSProducer producer = context.createProducer();

Ou criado em tempo de execução quando uma mensagem precisa ser enviada.

context.createProducer().send(destination, message);

Consumidores de mensagens JMS

Um consumidor de mensagem é um objeto criado por um JMSContext ou uma Sessão e usado para receber mensagens enviadas para um destino. Ele pode ser criado como mostrado neste exemplo:

JMSConsumer consumer = context.createConsumer(dest);

Recebimento síncrono via método receive()

O consumidor de mensagens fornece uma maneira síncrona de receber mensagens do destino por meio do receive() método.

Se nenhum argumento/tempo limite for especificado ou um tempo limite de '0' for especificado, o consumidor bloqueará indefinidamente, a menos que a mensagem chegue ou a conexão seja interrompida (o que ocorrer primeiro).

Message m = consumer.receive();
Message m = consumer.receive(0);

Quando um argumento positivo diferente de zero é fornecido, o consumidor bloqueia até que o temporizador expire.

Message m = consumer.receive(1000); // time out after one second.

Receções assíncronas com ouvintes de mensagens JMS

Um ouvinte de mensagens é um objeto usado para manipulação assíncrona de mensagens em um destino. Implementa a interface MessageListener, que contém o método onMessage onde a lógica de negócios específica deve estar implementada.

Um objeto de ouvinte de mensagens deve ser instanciado e registrado em relação a um consumidor de mensagem específico, usando o método setMessageListener.

Listener myListener = new Listener();
consumer.setMessageListener(myListener);

Consumir a partir de tópicos

Os Consumidores de Mensagens JMS são criados em relação a um destino, que pode ser uma fila ou um tópico.

Os consumidores nas filas são simplesmente objetos do lado do cliente que vivem no contexto da Sessão (e Conexão) entre a aplicação cliente e o Azure Service Bus.

Os consumidores em relação a temas, no entanto, estão divididos em 2 partes -

  • Um objeto do lado do cliente que opera dentro do contexto da sessão (ou JMSContext) e,
  • Uma assinatura que é uma entidade no Azure Service Bus.

As subscrições estão documentadas aqui e podem ser uma das seguintes:

  • Subscrições duradouras partilhadas
  • Subscrições partilhadas não duráveis
  • Subscrições duradouras não partilhadas
  • Subscrições não partilhadas não duradouras

Navegadores de fila JMS

A API JMS fornece um QueueBrowser objeto que permite que o aplicativo procure as mensagens na fila e exiba os valores de cabeçalho para cada mensagem.

Um navegador de fila pode ser criado usando o JMSContext como no exemplo a seguir:

QueueBrowser browser = context.createBrowser(queue);

Observação

A API JMS não fornece uma API para navegar em um tópico.

Isso ocorre porque o tópico em si não armazena as mensagens. Assim que a mensagem é enviada para o tópico, ela é encaminhada para as assinaturas apropriadas.

Seletores de mensagens JMS

Os seletores de mensagens podem ser usados por aplicações recetoras para filtrar as mensagens que são recebidas. Com seletores de mensagens, o aplicativo de recebimento descarrega o trabalho de filtragem de mensagens para o provedor JMS (neste caso, o Barramento de Serviço do Azure) em vez de assumir essa responsabilidade ele próprio.

Os seletores podem ser utilizados ao criar qualquer um dos consumidores abaixo -

  • Subscrição duradoura partilhada
  • Subscrição duradoura não partilhada
  • Subscrição partilhada não durável
  • Subscrição não partilhada não duradoura
  • Consumidor da fila
  • Navegador de filas

Observação

Os seletores do Service Bus não suportam palavras-chave SQL "LIKE" e "BETWEEN".

Disposição AMQP e mapeamento da operação do Service Bus

Veja como uma disposição AMQP se traduz em uma operação do Service Bus:

ACCEPTED = 1; -> Complete()
REJECTED = 2; -> DeadLetter()
RELEASED = 3; (just unlock the message in service bus, will then get redelivered)
MODIFIED_FAILED = 4; -> Abandon() which increases delivery count
MODIFIED_FAILED_UNDELIVERABLE = 5; -> Defer()

Resumo

Este guia do desenvolvedor mostrou como os aplicativos cliente Java que usam o Java Message Service (JMS) podem se conectar ao Barramento de Serviço do Azure.

Próximos passos

Para obter mais informações sobre o Barramento de Serviço do Azure e detalhes sobre entidades Java Message Service (JMS), consulte os seguintes artigos: