Skip to main content

📬 Alpura Back Java Lib Queue v1.2

Manual de implementación de la librería de publicación y suscripción a mensajes mediante Google Cloud Pub/Sub (com.alpura:back-java-lib-queues:1.2).


📦 Requisitos​

  • Java JDK: 21 (Temurin LTS)
  • Spring Boot: 3.4.4 o superior
  • Alpura BOM: 1.0.4

⚙️ Instalación​

Opción A: Heredando versión desde Alpura BOM 1.0.4 (RECOMENDADO)​

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alpura</groupId>
<artifactId>bom</artifactId>
<version>1.0.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>com.alpura</groupId>
<artifactId>back-java-lib-queues</artifactId>
</dependency>
</dependencies>

Opción B: Uso directo (Standalone)​

<dependency>
<groupId>com.alpura</groupId>
<artifactId>back-java-lib-queues</artifactId>
<version>1.2</version>
</dependency>

Gradle: implementation 'com.alpura:back-java-lib-queues:1.2'


🛠️ Configuración (YAML)​

En v1.2, la propiedad app.pubsub.subscriptions acepta una lista de suscripciones (soporte multi-suscripción) a las cuales el listener se suscribirá automáticamente al arrancar la aplicación.

app:
pubsub:
subscriptions:
- alpura-notifications-uat-sub
- alpura-orders-uat-sub

spring:
gcp:
projectId: alpura-hub-uat
cloud:
gcp:
credentials:
location: ${GOOGLE_APPLICATION_CREDENTIALS}

🧭 Escaneo de Componentes​

Asegúrate de incluir los paquetes de la librería en @ComponentScan:

@SpringBootApplication
@ComponentScan({
"com.alpura.queue",
"com.alpura.utilities"
})
public class ExApplication {
public static void main(String[] args) {
SpringApplication.run(ExApplication.class, args);
}
}

🔧 Implementación de Publicación de Mensajes (IPushService)​

import com.alpura.queue.common.MessageVO;
import com.alpura.queue.common.UserLoggedInfo;
import com.alpura.queue.service.IPushService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MiNuevoServicio {

private final IPushService pushService;

@Autowired
public MiNuevoServicio(IPushService pushService) {
this.pushService = pushService;
}

public void publicarEvento() {
MessageVO miMensaje = new MessageVO(
new UserLoggedInfo("1", "usuario@alpura.com", null, ""),
"Payload o datos del mensaje"
);
String topico = "alpura-notifications-uat";
pushService.publish(topico, miMensaje);
}
}

🔧 Escuchador de Mensajes Pub/Sub (PubSubMessageEvent)​

La librería emite un evento Spring de tipo PubSubMessageEvent por cada mensaje recibido en cualquiera de las suscripciones configuradas:

import com.alpura.queue.common.MessageVO;
import com.alpura.queue.service.impl.PubSubMessageEvent;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class MyPubSubConsumerService {

@EventListener
public void handlePubSubMessageEvent(PubSubMessageEvent event) {
String rawMessage = event.getRawMessageData();
String subscriptionId = event.getSubscriptionId(); // 📌 ID de la suscripción origen
log.info("Mensaje recibido de suscripción [{}]: {}", subscriptionId, rawMessage);

try {
// Lógica de negocio
// ...

// Confirmar mensaje a Pub/Sub
event.getPubsubMessage().ack();
log.info("Mensaje procesado y confirmado exitosamente.");

} catch (Exception ex) {
log.error("Error al procesar mensaje PubSub.", ex);
// Sin ack(), Pub/Sub reintentará el envío tras el deadline
}
}
}