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 discute como modificar um aplicativo Java Message Service (JMS) 2.0 existente que interage com um agente JMS para que passe a interagir com o Barramento de Serviço do Azure em vez disso. Em particular, o artigo aborda a migração do Apache ActiveMQ ou do Amazon MQ.
O Azure Service Bus suporta cargas de trabalho do Java 2 Platform, Enterprise Edition e Spring que utilizam a API JMS 2.0 sobre o Protocolo Avançado de Enfileiramento de Mensagens (AMQP).
Antes de começar
Diferenças entre o Azure Service Bus e o Apache ActiveMQ
Azure Service Bus e Apache ActiveMQ são corretores de mensagens, atuando como provedores JMS para aplicativos cliente enviarem e receberem mensagens. Ambos habilitam a semântica ponto a ponto com filas e semântica de publicação/assinatura com tópicos e assinaturas.
Mesmo assim, há algumas diferenças entre os dois, como mostra a tabela a seguir:
| Categoria | ActiveMQ | Barramento de Serviço do Azure |
|---|---|---|
| Camada de aplicativo | Monólito clusterizado | Duas camadas (gateway + back-end) |
| Suporte a protocolo |
|
AMQP |
| Modo de provisionamento |
|
PaaS (plataforma gerenciada como serviço) |
| Tamanho da mensagem | Configurável pelo cliente | 100 MB (camada Premium) |
| Alta disponibilidade | Gerenciado pelo cliente | Gerenciada pela plataforma |
| Recuperação de desastre | Gerenciado pelo cliente | Gerenciada pela plataforma |
Recursos atuais com e sem 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 recursos sem suporte.
| Característica | API (Interface de Programação de Aplicativos) | Situação |
|---|---|---|
| Filas |
|
Suportado |
| Tópicos |
|
Suportado |
| Filas temporárias |
|
Suportado |
| Tópicos temporários |
|
Suportado |
| Produtor de mensagem/ JMSProducer |
|
Suportado |
| Navegadores de fila |
|
Suportado |
| Consumidor de mensagens/ JMSConsumer |
No momento, não há suporte para o noLocal |
Suportado |
| Assinaturas duráveis compartilhadas |
|
Suportado |
| Assinaturas duráveis não compartilhadas |
noLocal não tem suporte no momento e deve ser definido como false |
Suportado |
| 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 |
|
Suportado |
| Transações entre entidades |
|
Suportado |
| Transações distribuídas | Sem suporte |
Considerações
A natureza em duas camadas do Azure Service Bus garante diversas capacidades de continuidade de negócios, incluindo alta disponibilidade e recuperação de desastres. No entanto, há algumas considerações ao usar recursos do JMS.
Atualizações de serviço
No caso de atualizações e reinicializações do barramento de serviço, as filas ou os tópicos temporários são excluídos. Se o aplicativo for sensível à perda de dados em filas ou tópicos temporários, não use filas ou tópicos temporários. Em vez disso, use filas, tópicos e assinaturas duráveis.
Migração de dados
Como parte da migração e modificação de seus aplicativos cliente para interagir com o Barramento de Serviço do Azure, os dados mantidos no ActiveMQ não são migrados para o Barramento de Serviço. Talvez seja necessário um aplicativo personalizado para esvaziar as filas, os tópicos e as assinaturas do ActiveMQ e, em seguida, reproduzir as mensagens para as filas, os tópicos e as assinaturas do Barramento de Serviço.
Autenticação e autorização
O controle de acesso baseado em função (RBAC) do Azure, com suporte do Microsoft Entra ID, é o mecanismo de autenticação preferencial para o Barramento de Serviço. Para habilitar o controle de acesso baseado em funções, siga as etapas no guia do desenvolvedor do Barramento de Serviço do Azure JMS 2.0.
Pré-migração
Verificação de versão
Você usa os seguintes componentes e versões enquanto escreve os aplicativos JMS:
| Componente | Versão |
|---|---|
| API do Java Message Service (JMS) | 1.1 ou superior |
| Protocolo AMQP | 1,0 |
Verifique se as portas AMQP estão abertas
O Barramento de Serviço dá suporte à comunicação por meio do protocolo AMQP. Para essa finalidade, habilite a comunicação pelas portas 5671 (AMQP) e 443 (TCP). Dependendo de onde os aplicativos cliente estejam hospedados, talvez seja necessário um tíquete de suporte para permitir a comunicação por essas portas.
Importante
Service Bus oferece suporte somente ao protocolo AMQP 1.0.
Configurar configurações corporativas
O Barramento de Serviço habilita vários recursos de segurança e alta disponibilidade corporativos. Para obter mais informações, consulte:
- Pontos de extremidade de serviço de rede virtual
- Firewall
- Criptografia do lado do serviço com BYOK (chave gerenciada pelo cliente)
- Pontos de extremidade privados
- Autenticação e autorização
Monitoramento, alertas e rastreamento
Para cada namespace do Service Bus, você envia métricas no Azure Monitor. Você pode usar essas métricas para alertas e dimensionamento dinâmico de recursos alocados para o namespace.
Para obter mais informações sobre as diferentes métricas e como configurar alertas em relação a elas, consulte as métricas do Barramento de Serviço no Azure Monitor. Você também pode saber mais sobre o rastreamento do lado do cliente para operações de dados e o log operacional/de diagnóstico para operações de gerenciamento.
Métricas – Nova Relíquia
Você pode correlacionar métricas do mapa do ActiveMQ com métricas no Barramento de Serviço do Azure. Confira o seguinte no site do New Relic:
Observação
Atualmente, o New Relic não tem uma integração direta e perfeita com o ActiveMQ, mas eles têm métricas disponíveis para o Amazon MQ. Como o Amazon MQ é derivado do ActiveMQ, a tabela a seguir mapeia as métricas do New Relic do Amazon MQ para o Barramento de Serviço do Azure.
| Agrupamento de métricas | Métrica do Amazon MQ/ActiveMQ | Métrica do Azure Service Bus |
|---|---|---|
| Corretor | CpuUtilization |
CPUXNS |
| Corretor | MemoryUsage |
WSXNS |
| Corretor | CurrentConnectionsCount |
activeConnections |
| Corretor | EstablishedConnectionsCount |
activeConnections + connectionsClosed |
| Corretor | InactiveDurableTopicSubscribersCount |
Usar métricas de assinatura |
| Corretor | TotalMessageCount |
Usar nível de fila/tópico/assinatura activeMessages |
| Fila/tópico | EnqueueCount |
incomingMessages |
| Fila/tópico | DequeueCount |
outgoingMessages |
| Fila | QueueSize |
sizeBytes |
Migração
Para migrar seu aplicativo JMS 2.0 existente para interagir com o Service Bus, siga as etapas nas seções a seguir.
Exportar a topologia do ActiveMQ e criar as entidades no Barramento de Serviço (opcional)
Para garantir que os aplicativos cliente possam se conectar perfeitamente ao Barramento de Serviço, migre a topologia (incluindo filas, tópicos e assinaturas) do Apache ActiveMQ para o Barramento de Serviço.
Observação
Para aplicativos JMS, você cria filas, tópicos e assinaturas como uma operação de runtime. A maioria dos provedores de JMS (agentes de mensagens) oferece a capacidade de criá-los em runtime. É por isso que essa etapa de exportação é considerada opcional. Para garantir que seu aplicativo tenha as permissões para criar a topologia em runtime, use a cadeia de conexão com permissões SAS Manage .
Para fazer isso:
- Use as ferramentas de linha de comando do ActiveMQ para exportar a topologia.
- Crie novamente a mesma topologia usando um modelo do Azure Resource Manager.
- Execute o modelo do Azure Resource Manager.
Importar a dependência do Maven para implementação JMS do Barramento de Serviço
Para garantir a conectividade perfeita e contínua com o Service Bus, adicione o azure-servicebus-jms como pacote de dependência ao arquivo Maven pom.xml, da seguinte maneira:
<dependencies>
...
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-servicebus-jms</artifactId>
</dependency>
...
</dependencies>
Alterações na configuração do servidor de aplicativos
Essa parte é personalizada para o servidor de aplicativos que está hospedando seus aplicativos cliente que se conectam ao ActiveMQ.
Aplicativos Spring
Atualizar o application.properties arquivo
Se você estiver usando um aplicativo Spring boot para se conectar ao ActiveMQ, você deseja remover as propriedades específicas do ActiveMQ do application.properties arquivo.
spring.activemq.broker-url=<ACTIVEMQ BROKER URL>
spring.activemq.user=<ACTIVEMQ USERNAME>
spring.activemq.password=<ACTIVEMQ PASSWORD>
Em seguida, adicione as propriedades específicas do Barramento de Serviço ao arquivo application.properties.
azure.servicebus.connection-string=Endpoint=myEndpoint;SharedAccessKeyName=mySharedAccessKeyName;SharedAccessKey=mySharedAccessKey
Substitua ActiveMQConnectionFactory por ServiceBusJmsConnectionFactory
A próxima etapa é substituir a instância de ActiveMQConnectionFactory por ServiceBusJmsConnectionFactory.
Observação
As alterações de código reais são específicas para o aplicativo e como as dependências são gerenciadas, mas o exemplo a seguir fornece as diretrizes sobre o que deve ser alterado.
Anteriormente, você poderia ter instanciado um objeto de ActiveMQConnectionFactory, da seguinte maneira:
String BROKER_URL = "<URL of the hosted ActiveMQ broker>";
ConnectionFactory factory = new ActiveMQConnectionFactory(BROKER_URL);
Connection connection = factory.createConnection();
connection.start();
Agora, você está alterando isso para instanciar um objeto de ServiceBusJmsConnectionFactory, da seguinte maneira:
ServiceBusJmsConnectionFactorySettings settings = new ServiceBusJmsConnectionFactorySettings();
String SERVICE_BUS_CONNECTION_STRING = "<Service Bus Connection string>";
ConnectionFactory factory = new ServiceBusJmsConnectionFactory(SERVICE_BUS_CONNECTION_STRING, settings);
Connection connection = factory.createConnection();
connection.start();
Pós-migração
Agora que você modificou o aplicativo para começar a enviar e receber mensagens do Bus de Serviços, você deve verificar se ele funciona conforme o esperado. Quando isso for concluído, você poderá continuar a refinar e modernizar ainda mais o stack de aplicações.
Próximas etapas
Use o Iniciador do Spring Boot para o JMS do Barramento de Serviço do Azure para obter integração contínua com o Barramento de Serviço.
Para saber mais sobre o JMS e as mensagens do Barramento de Serviço, veja: