Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.
- Identidade gerenciada atribuída pelo sistema
- Identidade Gerida Atribuída pelo Utilizador
- Entidade de Serviço
- Autenticação de cadeia de conexão
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:
- Barramento de Serviço - Filas, tópicos e assinaturas
- Service Bus - Entidades do Java Message Service
- Suporte a AMQP 1.0 no Azure Service Bus
- Guia do desenvolvedor do Service Bus AMQP 1.0
- Começar com as filas do Service Bus
- API do Java Message Service (doc Oracle externo)
- Saiba como migrar do ActiveMQ para o Service Bus