Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo explica como usar a popular API do Java Message Service (JMS) 2.0 para interagir com o Barramento de Serviço do Azure por meio do protocolo AMQP (Advanced Message Queueing Protocol) 1.0.
Observações importantes
- O suporte à API JMS 2.0 requer o nível Azure Service Bus Premium e a biblioteca azure-servicebus-jms . Usar outras bibliotecas JMS (por exemplo, qpid-jms-client diretamente) contra um namespace premium resulta no comportamento do JMS 1.1, e algumas funcionalidades do JMS 2.0 podem não funcionar como esperado.
- A biblioteca é open source e construída sobre qpid-jms-client — todas as APIs qpid-jms-client funcionam com ela, por isso não há bloqueio de fornecedores. Também fornece predefinidos para políticas de pré-leitura, políticas de religação, Microsoft Entra ID, suporte a Identidade Gerida e Eliminação Automática em Idle.
- A biblioteca está disponível em duas variantes para Jakarta EE e Java EE. Consulte a documentação de suporte do Jakarta EE e javax para mais detalhes sobre qual artefacto utilizar.
Suporte para Jakarta EE e javax
A azure-servicebus-jms biblioteca está disponível em duas variantes para suportar tanto o antigo Java EE (javax.jms) como o mais recente espaço de nomes da API Jakarta EE (jakarta.jms).
| Espaço de nomes da API | Artefacto Maven | Versões | Especificação JMS |
|---|---|---|---|
jakarta.jms (Jacarta EE 9+) |
com.azure:azure-servicebus-jms | 2.0.0+ | Mensagens de Jacarta (JMS 2.0) |
javax.jms (Java EE) |
com.microsoft.azure:azure-servicebus-jms | 1.0.x | JMS 2.0 |
Que artefacto devo usar?
Se o teu projeto usar Jakarta EE 9 ou posterior (por exemplo, Spring Boot 3.x, Quarkus 3.x, ou qualquer framework que importe
jakarta.jms.*), usa o artefactocom.azure:<dependency> <groupId>com.azure</groupId> <artifactId>azure-servicebus-jms</artifactId> <version>2.1.0</version> </dependency>Se o teu projeto ainda usa Java EE (importações
javax.jms.*), continua a usar ocom.microsoft.azureartefacto:<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-servicebus-jms</artifactId> <version>1.0.2</version> </dependency>
Importante
Não misture os dois artefactos. Usar com.azure:azure-servicebus-jms num projeto que importa javax.jms.* resulta em erros de compilação, e vice-versa.
Migração de javax para Jacarta
Se estás a atualizar a tua aplicação de Java EE para Jakarta EE:
- Substitui o ID do teu grupo de dependência Maven de
com.microsoft.azureparacom.azuree atualiza a versão para2.0.0ou uma versão mais recente. - Atualize todas as
javax.jms.*importações no seu código parajakarta.jms.*. - A
ServiceBusJmsConnectionFactoryAPI e a configuração mantêm-se as mesmas em ambas as variantes, pelo que não são necessárias alterações de código para além das atualizações de importação e dependência.
Pré-requisitos
Introdução ao Service Bus
Este guia pressupõe que você já tenha um namespace do Service Bus. Caso contrário, crie um namespace e uma fila usando o portal Azure. Para obter mais informações sobre como criar namespaces e filas do Barramento de Serviço, consulte Introdução às filas do Barramento de Serviço por meio do portal do Azure.
Configurar um ambiente de desenvolvimento Java
Para desenvolver aplicações Java, você precisa configurar o ambiente de desenvolvimento apropriado -
- O JDK (Java Development Kit) ou o JRE (Java Runtime Environment) estão instalados.
- O JDK ou JRE é adicionado ao caminho de compilação e às variáveis de sistema apropriadas.
- Um IDE Java é instalado para utilizar o JDK ou JRE. Por exemplo, Eclipse ou IntelliJ.
Para saber mais sobre como preparar seu ambiente de desenvolvedor para Java no Azure, utilize este guia.
Quais recursos JMS são suportados?
A tabela a seguir lista os recursos do Java Message Service (JMS) que o Azure Service Bus suporta atualmente. O sistema também mostra recursos que não são suportados.
| Caraterística | API | Situação |
|---|---|---|
| Filas |
|
Suportado |
| Tópicos |
|
Suportado |
| Filas temporárias |
|
Suportado |
| Tópicos temporários |
|
Suportado |
| Produtor de Mensagens / JMSProducer |
|
Suportado |
| Navegadores de filas |
|
Suportado |
| Mensagem Consumidor/ JMSConsumer |
noLocal não é suportado no momento |
Suportado |
| Subscrições duradouras partilhadas |
|
Suportado |
| Subscrições duradouras não partilhadas |
noLocal não é suportado atualmente e deve ser definido como false |
Suportado |
| Subscrições partilhadas não duráveis |
|
Suportado |
| Subscrições não partilhadas não duradouras |
noLocal não é suportado atualmente e deve ser definido como false |
Suportado |
| Seletores de mensagens | Depende do consumidor que foi criado. Os seletores do Service Bus não suportam palavras-chave SQL "LIKE" e "BETWEEN". | Suportado |
| Atraso na entrega (mensagens agendadas) |
|
Suportado |
| Mensagem criada |
|
Suportado |
| Transações entre entidades |
|
Suportado |
| Transações distribuídas | Não suportado |
Download da biblioteca de cliente Java Message Service (JMS)
Para utilizar todas as funcionalidades disponíveis no nível premium, adicione a biblioteca azure-servicebus-jms ao percurso de construção do seu projeto. Este pacote fornece os valores de predefinição necessários, como valores de políticas de pré-busca, políticas de reconexão, Microsoft Entra ID e suporte para Identidade Gerida de forma integrada. Escolha o artefato que corresponda ao espaço de nomes da API do seu projeto (veja Suporte Jakarta EE e javax para detalhes):
Jacarta EE (jacarta.jms):
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-servicebus-jms</artifactId>
<version>2.1.0</version>
</dependency>
Java EE (javax.jms):
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-servicebus-jms</artifactId>
<version>1.0.2</version>
</dependency>
Nota
Para adicionar a biblioteca ao caminho de build, use a ferramenta de gestão de dependências preferida para o seu projeto, como o Maven ou o Gradle.
Codificação de aplicações Java
Depois que as dependências são importadas, os aplicativos Java podem ser escritos de maneira agnóstica do provedor JMS.
Conectando-se ao Barramento de Serviço do Azure usando JMS
Para se conectar ao Barramento de Serviço do Azure usando clientes JMS, precisa-se da cadeia de conexão disponível nas "Políticas de Acesso Compartilhado" no portal do Azure em Cadeia de Conexão Primária.
Instanciar o
ServiceBusJmsConnectionFactorySettingsServiceBusJmsConnectionFactorySettings connFactorySettings = new ServiceBusJmsConnectionFactorySettings(); connFactorySettings.setConnectionIdleTimeoutMS(20000);Instancie o
ServiceBusJmsConnectionFactorycom o apropriadoServiceBusConnectionString.String ServiceBusConnectionString = "<SERVICE_BUS_CONNECTION_STRING_WITH_MANAGE_PERMISSIONS>"; ConnectionFactory factory = new ServiceBusJmsConnectionFactory(ServiceBusConnectionString, connFactorySettings);Use o
ConnectionFactorypara criar umConnectione, em seguida, umSessionConnection connection = factory.createConnection(); Session session = connection.createSession();ou a
JMSContext(para clientes JMS 2.0)JMSContext jmsContext = factory.createContext();Importante
Embora com nomes semelhantes, uma 'Sessão' JMS e uma 'Sessão' do Service Bus são completamente independentes uma da outra.
No JMS 1.1, a sessão é um bloco de construção essencial da API que permite a criação de
MessageProducer,MessageConsumere do próprioMessage. Para obter mais detalhes, consulte o modelo de programação da API JMSNo Service Bus, as sessões são estruturas no lado do serviço e do cliente para habilitar o processamento FIFO em filas e assinaturas.
Escrever o aplicativo JMS
Depois que o Session ou JMSContext é instanciado, seu aplicativo pode usar as APIs JMS familiares para executar operações de gerenciamento e de dados. Consulte a lista de recursos JMS suportados para ver quais APIs são suportadas. Aqui estão alguns trechos de código de exemplo para começar a usar o JMS -
Enviar mensagens para uma fila e um tópico
// Create the queue and topic
Queue queue = jmsContext.createQueue("basicQueue");
Topic topic = jmsContext.createTopic("basicTopic");
// Create the message
Message msg = jmsContext.createMessage();
// Create the JMS message producer
JMSProducer producer = jmsContext.createProducer();
// send the message to the queue
producer.send(queue, msg);
// send the message to the topic
producer.send(topic, msg);
Receber mensagens de uma fila
// Create the queue
Queue queue = jmsContext.createQueue("basicQueue");
// Create the message consumer
JMSConsumer consumer = jmsContext.createConsumer(queue);
// Receive the message
Message msg = (Message) consumer.receive();
Receber mensagens de uma subscrição duradoura partilhada sobre um tópico
// Create the topic
Topic topic = jmsContext.createTopic("basicTopic");
// Create a shared durable subscriber on the topic
JMSConsumer sharedDurableConsumer = jmsContext.createSharedDurableConsumer(topic, "sharedDurableConsumer");
// Receive the message
Message msg = (Message) sharedDurableConsumer.receive();
Resumo
Este guia mostrou como os aplicativos cliente Java que usam o Java Message Service (JMS) sobre AMQP 1.0 podem interagir com o Barramento de Serviço do Azure.
Você também pode usar o Service Bus AMQP 1.0 de outras linguagens, incluindo .NET, C, Python e PHP. Os componentes criados usando esses idiomas diferentes podem trocar mensagens de forma confiável e com total fidelidade usando o suporte AMQP 1.0 no Service Bus.