Google Cloud Pub/Sub com Spring Boot na Prática

Compartilhar:

Google Cloud Pub/Sub é um serviço de mensagens assíncronas e distribuídas fornecido pelo Google Cloud Platform (GCP), projetado para trocar mensagens entre aplicativos.

Integrar o Spring Boot com o Google Cloud Pub/Sub oferece uma maneira eficiente e escalável de trocar mensagens entre diferentes componentes de um sistema distribuído.

Isso permite a comunicação assíncrona entre partes do sistema, o que é fundamental para aplicativos modernos que precisam lidar com grandes volumes de dados ou processamento distribuído.

google cloud pub sub com spring boot

Integração Google Cloud Pub/Sub com Spring Boot

A integração entre o Spring Boot e o Google Cloud Pub/Sub geralmente envolve o uso da biblioteca cliente do Pub/Sub fornecida pelo Google Cloud. Esta biblioteca oferece as ferramentas necessárias para se conectar e interagir com os tópicos (topics) e inscrições (subscriptions) do Pub/Sub.

Alguns passos comuns para integrar o Spring Boot com o Google Cloud Pub/Sub incluem:

Configuração do Projeto no Google Cloud Platform:

  1. Criar um Projeto: Você precisará de um projeto no Google Cloud Platform para usar o serviço Pub/Sub.
  2. Ativar a API do Pub/Sub: Certifique-se de ativar a API do Google Cloud Pub/Sub para o seu projeto.
  3. Configurar Credenciais: Para que o Spring Boot acesse o Google Cloud Pub/Sub, você precisará de credenciais de autenticação, geralmente configuradas como um arquivo JSON.

Configuração no Spring Boot:

Adicionar Dependências: No arquivo pom.xml se estiver usando Maven) ou build.gradle (se estiver usando Gradle), inclua as dependências necessárias para o Google Cloud Pub/Sub e o Spring Boot Starter:

Exemplo (Maven):

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-gcp-starter-pubsub</artifactId>
</dependency>

Configurar Propriedades do GCP: No arquivo application.properties ou application.yml, adicione as configurações do Google Cloud Pub/Sub, como credenciais, ID do projeto etc.

Exemplo (application.properties):

spring.cloud.gcp.project-id= id-projeto
spring.cloud.gcp.credentials.location=file:/caminho/para/seu/arquivo-de-credenciais.json

Uso no Código Spring Boot:

  1. Criar um Publisher: Utilize a biblioteca cliente do Google Cloud Pub/Sub para criar um Publisher e publicar mensagens em um tópico.
  2. Criar um Subscriber: Crie um Subscriber para consumir mensagens de um tópico específico ou inscrição.
  3. Definir Handlers: No Spring Boot, defina handlers (manipuladores) para processar as mensagens recebidas e realizar a lógica.

Vamos criar uma classe Subscriber para consumir mensagens de um tópico específico.

Subscriber para Consumir Mensagens do Google Cloud Pub/Sub

package br.com.virandoprogramador.pubsub

import com.google.cloud.spring.pubsub.core.PubSubTemplate;
import com.google.cloud.spring.pubsub.integration.inbound.PubSubInboundChannelAdapter;
import com.google.cloud.spring.pubsub.support.converter.ConvertedAcknowledgeablePubsubMessage;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;

@Configuration
public class PubSubSubscriberConfig {

    @Value("${pubsub.subscription-name}")
    private String subscriptionName;

    @Bean
    public MessageChannel pubSubInputChannel() {
        return new DirectChannel();
    }

    @Bean
    public PubSubInboundChannelAdapter messageChannelAdapter(
            PubSubTemplate pubSubTemplate, MessageChannel pubSubInputChannel) {
        PubSubInboundChannelAdapter adapter =
                new PubSubInboundChannelAdapter(pubSubTemplate, subscriptionName);
        adapter.setOutputChannel(pubSubInputChannel);
        return adapter;
    }

    @Bean
    @ServiceActivator(inputChannel = "pubSubInputChannel")
    public MessageHandler messageReceiver() {
        return message -> {
            System.out.println("Mensagem recebida: " + message.getPayload());
            ConvertedAcknowledgeablePubsubMessage originalMessage = (ConvertedAcknowledgeablePubsubMessage) message;
            originalMessage.ack();
        };
    }
}

Esta classe de configuração PubSubSubscriberConfig configura um PubSubInboundChannelAdapter que escuta um tópico específico e envia as mensagens para o canal pubSubInputChannel. Em seguida, um ServiceActivator é configurado para processar as mensagens recebidas pelo canal.

Atualizando a Classe Principal

Vamos atualizar a classe principal (PubSubApplication) para iniciar o Subscriber juntamente com o Publisher:

package br.com.virandoprogramador.pubsub

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gcp.core.GcpProjectIdProvider;

@SpringBootApplication
public class PubSubApplication implements CommandLineRunner {

    private final PubSubPublisher pubSubPublisher;
    private final GcpProjectIdProvider projectIdProvider;

    @Autowired
    public PubSubApplication(PubSubPublisher pubSubPublisher, GcpProjectIdProvider projectIdProvider) {
        this.pubSubPublisher = pubSubPublisher;
        this.projectIdProvider = projectIdProvider;
    }

    public static void main(String[] args) {
        SpringApplication.run(PubSubApplication.class, args);
    }

    @Override
    public void run(String... args) {
        String topicName = "topico-virando-programador";
        String message = "msg para o tópico";

        pubSubPublisher.publishMessage(topicName, message);
    }
}

Observações Importantes

  • No arquivo application.properties, certifique-se de adicionar a propriedade pubsub.subscription-name com o nome da inscrição que será ouvida pelo Subscriber.
  • Esta configuração pressupõe que o arquivo de credenciais para o GCP esteja configurado corretamente.
  • Não se esqueça de adicionar as dependências necessárias ao seu arquivo pom.xml ou build.gradle, incluindo a dependência para a integração Spring Cloud GCP Pub/Sub.

Funcionamento do Google Cloud Pub/Sub:

  1. Modelo de Mensagens: O Pub/Sub opera com um modelo de publicação e assinatura. Neste modelo, os aplicativos publicam mensagens em tópicos e recebem mensagens desses tópicos através de inscrições.
  2. Tópicos e Inscrições: Um tópico é um canal de mensagens onde os dados são publicados. As inscrições são pontos de extremidade que os aplicativos usam para receber mensagens de um tópico específico.
  3. Assincronismo e Escalabilidade: O serviço é altamente assíncrono e pode lidar com altos volumes de mensagens distribuídas. Ele oferece escalabilidade automática para lidar com picos de carga sem comprometer o desempenho.
  4. Durabilidade e Confiabilidade: As mensagens são armazenadas de forma durável e mantidas até que sejam confirmadas como entregues. Isso garante a confiabilidade na entrega, mesmo em condições de falha.
  5. Tempo Real e Latência Baixa: O Pub/Sub fornece baixa latência, permitindo a comunicação em tempo real entre aplicativos distribuídos em diferentes localidades geográficas.

Casos de Uso Comuns do Google Cloud Pub/Sub:

  1. Integração de Sistemas: É usado para integrar sistemas e aplicativos distribuídos, permitindo a comunicação assíncrona entre eles. Por exemplo, integrar microsserviços em arquiteturas baseadas em nuvem.
  2. Análise de Big Data em Tempo Real: O Pub/Sub é útil para ingestão e processamento de dados em tempo real para análises de big data, permitindo a coleta contínua e o processamento de grandes volumes de dados.
  3. Streaming de Eventos: É utilizado em aplicativos que lidam com eventos em tempo real, como IoT (Internet das Coisas), streaming de mídia, processamento de transações financeiras, entre outros.
  4. Sistemas Distribuídos e Escaláveis: Ajuda na construção de sistemas distribuídos altamente escaláveis, permitindo que aplicativos distribuídos se comuniquem de maneira confiável e eficiente.
  5. Processamento de Mensagens Assíncronas: Ideal para aplicativos que precisam lidar com processamento de mensagens assíncronas, como fila de tarefas, notificações e processamento de pedidos.

Para finalizar:

O Google Cloud Pub/Sub oferece uma solução poderosa para comunicação assíncrona e distribuída em aplicativos modernos baseados em nuvem.

Sua capacidade de lidar com grandes volumes de mensagens, garantir a entrega confiável e oferecer baixa latência o torna uma escolha popular para arquiteturas de sistemas distribuídos, análises em tempo real e integração de aplicativos na nuvem.

4/5 - (1 vote)
Compartilhar:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *