
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_javaMark e taylorPublicado em 04/03/2018 / Atualizado em 06/06/2018
11 comentáriosNeste 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 primaveraautor
Mark E Taylor11 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 .