Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo explica como usar a API do popular Serviço de Mensagens Java (JMS) 2.0 para interagir com o Barramento de Serviço do Azure por meio do protocolo AMQP 1.0 (Advanced Message Queueing Protocol).
Notas importantes
- O suporte à API do JMS 2.0 requer o Barramento de Serviço do Azure na camada Premium e a biblioteca azure-servicebus-jms. Usar outras bibliotecas JMS (por exemplo, qpid-jms-client diretamente) em um namespace premium resulta no comportamento do JMS 1.1 e alguns recursos do JMS 2.0 podem não funcionar conforme o esperado.
- A biblioteca é de software livre e foi criada sobre qpid-jms-client — todas as APIs qpid-jms-client funcionam com ela, portanto, não há nenhum bloqueio de fornecedor. Ele também fornece padrões para políticas de pré-busca, políticas de reconexão, Microsoft Entra ID, suporte à Identidade Gerenciada e Exclusão Automática no Ocioso.
- A biblioteca está disponível em duas variantes para Jakarta EE e Java EE. Consulte o suporte do Jakarta EE e javax para obter detalhes sobre qual artefato usar.
Suporte a Jakarta EE e javax
A azure-servicebus-jms biblioteca está disponível em duas variantes para dar suporte ao Java EE herdado (javax.jms) e aos namespaces de API Jakarta EE (jakarta.jms) mais recentes.
| Espaço de nomes da API | Artefato Maven | Versões | Especificação do JMS |
|---|---|---|---|
jakarta.jms (Jakarta 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 |
Qual artefato devo usar?
Se o projeto usar Jakarta EE 9 ou posterior (por exemplo, Spring Boot 3.x, Quarkus 3.x ou qualquer estrutura que importe
jakarta.jms.*), use ocom.azureartefato:<dependency> <groupId>com.azure</groupId> <artifactId>azure-servicebus-jms</artifactId> <version>2.1.0</version> </dependency>Se o seu projeto ainda estiver usando Java EE (importações
javax.jms.*), continue usando o artefatocom.microsoft.azure:<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-servicebus-jms</artifactId> <version>1.0.2</version> </dependency>
Importante
Não misture os dois artefatos. Usar com.azure:azure-servicebus-jms em um projeto que importa javax.jms.* resulta em erros de compilação e vice-versa.
Migrando do javax para Jacarta
Se você estiver atualizando seu aplicativo do Java EE para o Jakarta EE:
- Substitua o ID do grupo da dependência do Maven de
com.microsoft.azureparacom.azuree atualize a versão para2.0.0ou posterior. - Atualize todas as
javax.jms.*importações em seu código parajakarta.jms.*. - A
ServiceBusJmsConnectionFactoryAPI e a configuração permanecem as mesmas em ambas as variantes, portanto, nenhuma alteração de código é necessária além das atualizações de importação e dependência.
Pré-requisitos
Introdução ao Barramento de Serviço
Este guia pressupõe que você já tenha um namespace do barramento de serviço. Caso contrário, crie um namespace e uma fila usando o Portal do 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 no portal do Azure.
Configurar um ambiente de desenvolvimento Java
Para desenvolver aplicativos Java, você precisa configurar o ambiente de desenvolvimento apropriado -
- O JDK (Java Development Kit) ou o JRE (Java Runtime Environment) têm de estar instalados.
- O JDK ou o JRE são adicionados ao caminho de compilação e às variáveis de sistema apropriadas.
- Um Java IDE é instalado para utilizar o JDK ou o JRE. Por exemplo, Eclipse ou IntelliJ.
Para saber mais sobre como preparar o seu ambiente de desenvolvedor para Java no Azure, utilize este guia.
Quais recursos do Serviço de Mensagens do Java têm suporte?
A tabela a seguir lista os recursos do JMS (Java Message Service) que o Barramento de Serviço do Azure suporta atualmente. Ele também mostra funcionalidades não suportadas.
| Recurso | API | Situação |
|---|---|---|
| Filas |
|
Com suporte |
| Tópicos |
|
Suportado |
| Filas temporárias |
|
Com suporte |
| Tópicos temporários |
|
Com suporte |
| Produtor de mensagem/ JMSProducer |
|
Suportado |
| Navegadores de filas |
|
Suportado |
| Consumidor de mensagens/ JMSConsumer |
No momento, não há suporte para o noLocal |
Suportado |
| Assinaturas duráveis compartilhadas |
|
Com suporte |
| Assinaturas duráveis não compartilhadas |
noLocal não tem suporte no momento e deve ser definido como false |
Com suporte |
| Assinaturas não duráveis compartilhadas |
|
Suportado |
| Assinaturas não duráveis não compartilhadas |
noLocal não tem suporte no momento e deve ser definido como false |
Suportado |
| Seletores de mensagens | Depende do consumidor criado. Os seletores do Barramento de Serviço não dão suporte a palavras-chave SQL "LIKE" e "BETWEEN". | Suportado |
| Atraso de entrega (mensagens agendadas) |
|
Suportado |
| Mensagem criada |
|
Com suporte |
| Transações entre entidades |
|
Com suporte |
| Transações distribuídas | Sem suporte |
Baixando a biblioteca de cliente do Serviço de Mensagens do Java (JMS)
Para utilizar todos os recursos disponíveis na camada premium, adicione a biblioteca azure-servicebus-jms ao caminho de build do seu projeto. Esse pacote fornece os padrões necessários, como valores de política de pré-busca, políticas de reconexão, Microsoft Entra ID e suporte à Identidade Gerenciada prontos para uso. Escolha o artefato que corresponde ao namespace da API do projeto (consulte Jakarta EE e o suporte a javax para obter detalhes):
Jakarta EE (jakarta.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>
Observação
Para adicionar a biblioteca ao caminho de build, use a ferramenta de gerenciamento de dependência preferencial para seu projeto, como Maven ou Gradle.
Codificando os aplicativos Java
Depois que as dependências são importadas, os aplicativos Java podem ser gravados de maneira independente do provedor JMS.
Conectando-se ao barramento de serviço do Azure usando o JMS
Para se conectar ao barramento de serviço do Azure usando clientes do JMS, você precisa da cadeia de conexão que está 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 oServiceBusConnectionStringapropriado.String ServiceBusConnectionString = "<SERVICE_BUS_CONNECTION_STRING_WITH_MANAGE_PERMISSIONS>"; ConnectionFactory factory = new ServiceBusJmsConnectionFactory(ServiceBusConnectionString, connFactorySettings);Use o
ConnectionFactorypara criar umConnectione, em seguida, umSession,Connection connection = factory.createConnection(); Session session = connection.createSession();ou então um
JMSContext(para clientes do JMS 2.0)JMSContext jmsContext = factory.createContext();Importante
Embora tenham nomes parecidos, a ‘Sessão’ do JMS e a ‘Sessão’ do Barramento de Serviço são completamente independentes uma da outra.
No JMS 1.1, Session é um bloco de construção fundamental da API que permite a criação do
MessageProducer, doMessageConsumere do próprioMessage. Para obter mais detalhes, examine o modelo de programação da API do JMSNo Barramento de Serviço, as sessões são constructos no lado do cliente e do serviço para habilitar o processamento de PEPS em filas e assinaturas.
Escrever o aplicativo JMS
Depois que o Session ou JMSContext for instanciado, seu aplicativo poderá usar as APIs JMS familiares para executar operações de gerenciamento e de dados. Consulte a lista de recursos de JMS com suporte e veja quais APIs têm suporte. Confira aqui alguns trechos de código de exemplo para começar a usar o JMS –
Enviando 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);
Recebendo 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();
Como receber mensagens de uma assinatura durável compartilhada em 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 demonstrou como os aplicativos de cliente Java que usam o Serviço de Mensagens do Java (JMS) por meio do protocolo AMQP 1.0 podem se conectar ao Barramento de Serviço do Azure.
Você também pode usar o AMQP 1.0 do Service Bus de outras linguagens, incluindo .NET, C, Python e PHP. Os componentes criados com essas diferentes linguagens podem trocar mensagens de forma confiável e com total fidelidade usando o suporte do AMQP 1.0 no Service Bus.