Desenvolvimento de aplicativo MQ JMS no Spring Boot



Os desenvolvedores Java, ao usar a interface JMS, geralmente preferem trabalhar com o Spring Framework. O Spring pode simplificar a codificação de novos aplicativos fornecendo modelos para padrões comuns e foi usado com sucesso por muitos anos com as classes MQ JMS. A classe Spring JmsTemplate é uma interface principal, mas ainda depende das configurações e dependências no código.

O Spring Framework inclui vários módulos para diversas necessidades. Um desses componentes é o Spring Boot. Os iniciantes do Spring Boot puxam convenientemente todas as dependências e bibliotecas de configuração automática necessárias para usar uma tecnologia específica. Isso facilita muito o início de um novo aplicativo e tecnologia, mais rápido do que trabalhar diretamente com classes como JmsTemplate. Então, como podemos tirar proveito desse acesso fácil para aplicativos MQ?

Traduzido por @middle_java

Mark e taylor
Publicado em 04/03/2018 / Atualizado em 06/06/2018
11 comentários

Neste artigo, descrevi como baixar diretamente as classes MQ do Maven Central Repository Java. E agora vamos usar isso para criar o Spring Boot Starter for MQ . Você pode baixar o código fonte completo do módulo no GitHub .

Introdução ao MQ Spring Boot


Primeiro de tudo, precisamos de um gerenciador de filas em execução. Em seguida, criaremos um aplicativo que acessa esse gerenciador de filas.

Iniciando um Gerenciador de Filas em um Contêiner


Para começar rapidamente, você pode usar o contêiner IBM MQ para desenvolvedores , que executa processos do servidor. Quando esse contêiner é iniciado, vários objetos são criados por padrão e suas definições são conhecidas no módulo de configuração automática. Os valores padrão correspondem aos valores requeridos pelo gerenciador de filas do contêiner.

Isso significa que você pode iniciar o gerenciador de filas usando o ambiente do Docker e conectar-se a ele sem configurações adicionais. Você pode iniciar o contêiner no Linux usando o seguinte comando:

docker run --env LICENSE=accept --env MQ_QMGR_NAME=QM1 \ --publish 1414:1414 \ --publish 9443:9443 \ --detach \ ibmcom/mq 

Exemplo de aplicação


Ele usa uma abordagem consistente com o modelo de aplicativo JMS no Guia de introdução do Spring JMS . Eu segui o caminho de importação deste projeto para o espaço de trabalho do Eclipse e usei o processo de construção de gradle , mas o processo baseado em maven também funciona. Como exercício, usei a configuração do maven na linha de comando, em vez do IDE do Eclipse.
O mesmo código do exemplo funciona com o MQ com modificação mínima:

  • Modifique o provedor de sistema de mensagens de origem na lista de dependências para apontar para o pacote IBM MQ.
  • Altere o nome da fila em Application.java (o exemplo usa "caixa de correio") para "DEV.QUEUE.1" - essa é a fila predefinida pela configuração do desenvolvedor no contêiner do Docker. Se você não usar os parâmetros de configuração padrão do desenvolvedor, será necessário definir o nome da fila como o mesmo da fila existente ou definir a nova fila correspondente.

O arquivo build.gradle modificado que controla a compilação agora possui:

  dependencies { compile("com.ibm.mq:mq-jms-spring-boot-starter:+") compile("com.fasterxml.jackson.core:jackson-databind") } 

Se você preferir usar o Maven, a seção correspondente no pom.xml é a seguinte:

 <dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.ibm.mq</groupId> <artifactId>mq-jms-spring-boot-starter</artifactId> <version>0.0.3</version> </dependency> </dependencies> 

A única diferença real é que uma versão específica do módulo MQ Spring Boot é especificada na configuração do Maven.

Configuração padrão


Os nomes dos atributos de configuração do MQ Boot Starter começam com o prefixo ibm.mq. Atributos por padrão

  ibm.mq.queueManager=QM1 ibm.mq.channel=DEV.ADMIN.SVRCONN ibm.mq.connName=localhost(1414) ibm.mq.user=admin ibm.mq.password=passw0rd 

Eles correspondem aos valores padrão do contêiner do Docker.

Opções de configuração avançada


Se você já possui um gerenciador de filas do MQ em execução que deseja usar, poderá alterar facilmente a configuração padrão especificando valores substituídos. Um gerenciador de filas pode ser um serviço local ou mesmo um serviço hospedado no IBM Cloud . O arquivo application.properties em um projeto Java é uma maneira de colocar esses atributos fora do projeto. A configuração entra em vigor sem nenhuma alteração no código.

Especifique o nome do atributo do gerenciador de filas:

 ibm.mq.queueManager=QM1 

Para conexões do cliente com o gerenciador de filas, você também deve configurar

 ibm.mq.channel ibm.mq.connName 

Se nem channel nem connName forem especificados, será assumido que o gerenciador de filas local é usado. O componente de configuração também suporta alguns atributos relacionados ao TLS. Eles são descritos em mais detalhes no arquivo README, mas seus valores padrão são nulos. Você também pode precisar instalar

 ibm.mq.user ibm.mq.password=passw0rd 

para substituir os valores padrão. Esses atributos podem ser deixados em branco para usar o ID do usuário local do sistema operacional sem autenticação, se permitido pelo gerenciador de filas.

Exemplo de conteúdo do arquivo application.properties :

  ibm.mq.queueManager=QM1 ibm.mq.channel=SYSTEM.DEF.SVRCONN ibm.mq.connName=server.example.com(1414) ibm.mq.user=user1 ibm.mq.password=passw0rd 

Depois disso, o Spring Boot criará um ConnectionFactory que pode ser usado para interagir com o gerenciador de filas.

Testando o programa de amostra


Você pode executar o programa de amostra usando o gradle bootRun . Ou, usando o maven, execute o mvn package e, em seguida, java -jar ./target/gs-messaging-jms.jar para executar o programa. Você deve ver o seguinte:



Aqui você pode ver como o aplicativo colocou a mensagem ("enviando uma mensagem de email") e depois a recuperou.

Conclusões


O uso do Spring Boot Starter com MQ permite que você inicie muito rapidamente. Depois de iniciar seu primeiro aplicativo, você pode expandi-lo para usar outros recursos do MQ. Depois de experimentar, você pode dar um feedback aqui ou na página de problemas do GitHub .

Atualização - junho de 2018


No início deste ano, foi lançada uma grande atualização do Spring Boot Framework, conhecida como Boot 2. O MQ Boot Starter foi atualizado para funcionar com esta nova versão da plataforma. Obviamente, todas as versões divulgadas publicamente desse código estão disponíveis no Repositório Central do Maven . Para compatibilidade com o Spring Boot 1, você deve continuar usando a versão 0.0.4 deste artefato; A versão 2.0.0 é compatível com a inicialização 2 e será usada como base para futuras atualizações.

Tags jms , mq , mqseries , primavera , bota primavera

autor Mark E Taylor

11 comentários sobre o artigo "Desenvolvendo aplicativos MQ JMS no Spring Boot"


(Apenas comentários úteis e comentários com respostas traduzidas)

3)
Horacio 16 maio 2019
Mark, ótimo trabalho.
Posso lidar com mais de uma fila?
Vejo que o prefixo está codificado em @ConfigurationProperties (prefix = "bm.mq")

o Mark E Taylor 17 de maio de 2019
Eu realmente não entendo a pergunta. Um "prefixo" refere-se aos atributos de configuração que mostram basicamente como se conectar ao gerenciador de filas. Isso não tem nada a ver com as filas que o aplicativo usa após a conexão. Se você realmente quis perguntar sobre a conexão com vários gerenciadores de filas, consulte github.com/ibm-messaging/mq-jms-spring/issues/7 para ver quais abordagens as pessoas usam.

7)
Peter 17 maio 2018
"Hello.Application" está ausente, os arquivos estão localizados no github?

o Mark E Taylor 12 de junho de 2018
Para extrair e importar um aplicativo de amostra, usei a página Introdução ao Spring (consulte spring.io/guides/gs/messaging-jms ) e, em seguida, fiz pequenas alterações. Por várias razões, eu intencionalmente não queria ter uma cópia separada desse código aqui.

Traduzido por @middle_java .

Source: https://habr.com/ru/post/pt479232/


All Articles