SpringEventBus.java
package es.um.atica.shared.adapters.events;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.function.Supplier;
import es.um.atica.shared.domain.events.Event;
import es.um.atica.shared.domain.events.EventBus;
@Component
@org.springframework.context.annotation.Primary
public class SpringEventBus implements EventBus,Supplier<Event> {
// Queue temporal
private Queue<Event> queue = new ConcurrentLinkedQueue<>();
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
@Override
public void publish(Event event) {
// Publish locally
applicationEventPublisher.publishEvent(event);
// Store into queue
queue.add(event);
}
@Override
public Event get() {
// Send to message broker
return queue.poll();
}
}