Mensageria no Spring Boot

Como de costume o Sprint Boot vem facilitando a configuração dos projetos, no contexto de mensageria ficou ainda mais simples configurar o projeto para integrar como um sistema mensageria, onde com poucas configurações na classe de configuração do Spring e alguns parâmetros via properties é possível conectar a aplicação a um servidor de mensagem.

A Seguir, a demonstração da configuração de um projeto com Spring Boot que recebe as mensagens de um ActiveMQ standalone.

Adicionando dependências  no projeto

Adicionar a dependência do activeMQ no projeto.

pom.xml

 
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>1.4.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-activemq</artifactId>
        <version>1.4.0.RELEASE</version>
    </dependency>
</dependencies>

Configurando o acesso ao ActiveMQ

Definir as propriedades broker-url, user e password do ActiveMQ no application.properties.

/src/main/resources/application.properties

spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin

É preciso utilizar o prefixo spring.activemq porque esse padrão já é mapeado na classe ActiveMQProperties do Spring Boot, dessa forma seguindo a nomenclatura definida na classe, o Spring boot interpreta os properties e configura automaticamente as configurações do ActiveMQ.

Na configuração acima, foi utilizada a URL para o ActiveMQ executado fora da aplicação, dessa forma o acesso é tcp://localhost, o que necessita que o servidor do AtiveMQ esteja sendo executado. Caso queria executar o ActiveMQ dentro da mesma instância da VM é só alterar a url para vm://localhost, mais informações podem ser encontradas no documentação de suporte ao Spring no ActiveMQ.

Observação: Caso não configurado nenhuma propriedade do activemq no properties, por padrão, seu comportamento é executar o ActiveMQ na mesma instância que o projeto, como se a URL estivesse configurada com vm://localhost.

Configurando o projeto

Para habilitar o JMS no Spring Boot é apenas preciso anotar a classe de configuração com @EnableJms e para configurar a fila(Queue) a ser utilizada, declarar um Bean que instância ActiveMQQueue, passando o nome da queue existente no ActiveMQ por parâmetro no construtor.

import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.jms.annotation.EnableJms;

@SpringBootApplication
@ComponentScan(basePackageClasses = {Consumer.class})
@EnableJms
public class AppConfig {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(AppConfig.class, args);
    }

    @Bean
    public Queue queue() {
        return new ActiveMQQueue("queue");
    }
}

Como foi utilizado o ActiveMQ fora da aplicação, a Queue foi configurada na própria tela de admin do ActiveMQ: http://localhost:8161/admin/queues.jsp.

Configurando Listener para recebe dados da fila

Para fazer leitura da fila, o JMS na versão 2.0 disponibiliza a anotação de Listener para que a aplicação possa escutar a fila, isso é possível anotando o método com a @JmsListener e passando o nome da fila no parâmetro destination.

 
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

@Component
public class Consumer {

    @JmsListener(destination = "queue")
    public void receive(String msg) {
        System.out.println(msg);
    }

}

Enviando dados para a fila

Para enviar dados da aplicação para a fila, o JMS na versão 2.0 facilitou essa operação com a interface JmsMessagingTemplate, que abstrai toda configuração na classe de utilização e disponibiliza o envio através de um método send, apenas passando a queue e a mensagem desejada.

 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;

import javax.jms.Queue;

@Component
public class ArquivoSender {

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    @Autowired
    private Queue queue;

    public void send(String message) {
        this.jmsMessagingTemplate.convertAndSend(this.queue, message);
    }
}

Obs:Para injetar o JmsMessagingTemplate na classe é preciso que a anotação @EnableJms esteja na classe de configuração do Spring Boot (AppConfig).

Obs:Para injetar a Queue na classe é preciso que a configuração da Queue através de @Bean na classe de configuração do Spring Boot (AppConfig).

O Sprint Boot também tem suporte para outros sistemas de mensageria, além do ActiveMQ utilizado no post, a documentação apresenta suporte a outros como HornetQ, RabbitMQ, entre outros.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s