Migrar aplicativos Java Message Service (JMS) 2.0 existentes do Apache ActiveMQ para o Barramento de Serviço do Azure
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 Barramento de Serviço do Azure dá suporte a cargas de trabalho de Java 2 Platform, Enterprise Edition e Spring que usam a API do JMS 2.0 no Advanced Message Queueing Protocol (AMQP).
Antes de começar
Diferenças entre o Barramento de Serviço do Azure e o Apache ActiveMQ
O Barramento de Serviço do Azure e o Apache ActiveMQ são agentes de mensagens, que funcionam como provedores JMS para que os aplicativos cliente enviem e recebam 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:
Category | ActiveMQ | Barramento de Serviço do Azure |
---|---|---|
Camada de aplicativo | Monolítico clusterizado | Duas camadas (gateway + back-end) |
Suporte a protocolo |
|
AMQP |
Modo de provisionamento |
|
Plataforma como serviço gerenciada (PaaS) |
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.
Recurso | API | Status |
---|---|---|
Filas |
|
Com suporte |
Tópicos |
|
Com suporte |
Filas temporárias |
|
Com suporte |
Tópicos temporários |
|
Com suporte |
Produtor de mensagem/ JMSProducer |
|
Com suporte |
Navegadores de fila |
|
Com suporte |
Consumidor de mensagens/ JMSConsumer |
No momento, não há suporte para o noLocal |
Com suporte |
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 |
|
Com suporte |
Assinaturas não duráveis não compartilhadas |
noLocal não tem suporte no momento e deve ser definido como false |
Com suporte |
Seletores de mensagens | depende do consumidor criado | Com suporte |
Atraso de entrega (mensagens agendadas) |
|
Com suporte |
Mensagem criada |
|
Com suporte |
Transações entre entidades |
|
Com suporte |
Transações distribuídas | Sem suporte |
Considerações
A natureza de duas camadas do Barramento de Serviço do Azure proporciona vários recursos de continuidade de negócios (alta disponibilidade e recuperação de desastre). No entanto, há algumas considerações quando você está usando recursos 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 nem 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 dos 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ção, 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
Os seguintes componentes e versões são usados ao gravar os aplicativos JMS:
Componente | Versão |
---|---|
API do Java Message Service (JMS) | 1.1 ou mais recente |
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
O Barramento de Serviço dá suporte apenas ao protocolo AMQP 1.0.
Definir as 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 chaves gerenciadas pelo cliente (BYOK)
- Pontos de extremidade privados
- Autenticação e autorização
Monitoramento, alertas e rastreamento
Para cada namespace do Barramento de Serviço, são publicadas 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 nelas, veja 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 – New Relic
Você pode correlacionar métricas do mapa do ActiveMQ com métricas no Barramento de Serviço do Azure. Veja o seguinte no site do New Relic:
Observação
Atualmente, o New Relic não tem integração direta e contínua com o ActiveMQ, mas tem 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 Barramento de Serviço do Azure |
---|---|---|
Agente | CpuUtilization |
CPUXNS |
Agente | MemoryUsage |
WSXNS |
Agente | CurrentConnectionsCount |
activeConnections |
Agente | EstablishedConnectionsCount |
activeConnections + connectionsClosed |
Agente | InactiveDurableTopicSubscribersCount |
Usar métricas de assinatura |
Agente | 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 o aplicativo JMS 2.0 existente para interagir com o Barramento de Serviço, siga as etapas nas várias 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 continuamente com o 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, são criados tópicos, filas e assinaturas como uma operação de tempo de execução. A maioria dos provedores JMS (agentes de mensagem) oferece a capacidade de criá-los no tempo de execução. É por isso que essa etapa de exportação é considerada opcional. Para garantir que o aplicativo tenha as permissões para criar a topologia no tempo de execução, use a cadeia de conexão com permissões Manage
de SAS.
Para fazer isso:
- Use as ferramentas de linha de comando do ActiveMQ para exportar a topologia.
- Recrie a mesma topologia usando ummodelo 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 contínua com o Barramento de Serviço, adicione o pacote azure-servicebus-jms
como uma dependência ao arquivo pom.xml
do Maven, da seguinte maneira:
<dependencies>
...
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-servicebus-jms</artifactId>
</dependency>
...
</dependencies>
Alterações da configuração do servidor de aplicativos
Esta parte é personalizada para o servidor de aplicativos que está hospedando os aplicativos cliente que se conectam ao ActiveMQ.
Aplicativos Spring
Atualize o arquivo application.properties
Se você estiver usando um aplicativo de inicialização Spring para se conectar ao ActiveMQ, será aconselhável remover as propriedades específicas do ActiveMQ do arquivo application.properties
.
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 ao aplicativo e a como as dependências são gerenciadas, mas o exemplo a seguir fornece a orientação sobre o que deve ser alterado.
Anteriormente, você pode ter criado uma instância de 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 criar uma instância de 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 Barramento de Serviço, você deve verificar se ele funciona conforme o esperado. Quando isso tiver sido feito, você poderá continuar refinando e modernizando a pilha de aplicativos.
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: