package io.muoncore.example.event.guide;
import io.muoncore.Muon;
import io.muoncore.MuonBuilder;
import io.muoncore.config.AutoConfiguration;
import io.muoncore.config.MuonConfigBuilder;
import io.muoncore.protocol.event.Event;
import io.muoncore.protocol.event.client.DefaultEventClient;
import io.muoncore.protocol.event.client.EventClient;
import io.muoncore.protocol.event.client.EventReplayMode;
import reactor.rx.broadcast.Broadcaster;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class UserAggregationService {
public static void main(String[] args) {
AutoConfiguration config = MuonConfigBuilder.withServiceIdentifier("user-service").build();
Muon muon = MuonBuilder.withConfig(config).build();
muon.getDiscovery().blockUntilReady();
EventClient evclient = new DefaultEventClient(muon);
Set<String> usernames = new HashSet<>();
Broadcaster<Event> sub = Broadcaster.create();
sub.consume(msg -> {
try {
if (msg.getEventType().equals("UserRegistered")) {
usernames.add((String) msg.getPayload(Map.class).get("username"));
} else {
usernames.remove(msg.getPayload(Map.class).get("username"));
}
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("Processed event, user list is now : " + usernames);
});
evclient.replay("users", EventReplayMode.REPLAY_THEN_LIVE, sub);
}
}