X-Git-Url: http://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2FTestListener.java;h=e413c52d267a1ff0033260fbc7c4c14a3ab9ab11;hb=53ecbc5e02e077692232d45ea62d236e1ec3abfb;hp=1c993c17059cd6bcbfd0aa90ad37c24a3504656a;hpb=09995381a4d5667cebd9d5dfdb915dcd48f169b5;p=demos%2Fkafka%2Fchat diff --git a/src/test/java/de/juplo/kafka/chat/backend/TestListener.java b/src/test/java/de/juplo/kafka/chat/backend/TestListener.java index 1c993c17..e413c52d 100644 --- a/src/test/java/de/juplo/kafka/chat/backend/TestListener.java +++ b/src/test/java/de/juplo/kafka/chat/backend/TestListener.java @@ -7,51 +7,59 @@ import de.juplo.kafka.chat.backend.api.ChatRoomInfoTo; import de.juplo.kafka.chat.backend.api.MessageTo; import lombok.extern.slf4j.Slf4j; import org.springframework.core.ParameterizedTypeReference; -import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.codec.ServerSentEvent; import org.springframework.web.reactive.function.client.WebClient; -import org.springframework.web.reactive.function.client.WebClientResponseException; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; -import reactor.util.retry.Retry; +import reactor.core.scheduler.Schedulers; -import java.nio.charset.Charset; -import java.time.Duration; -import java.util.concurrent.ThreadLocalRandom; +import java.util.*; @Slf4j -public class TestListener implements Runnable +public class TestListener { static final ParameterizedTypeReference> SSE_TYPE = new ParameterizedTypeReference<>() {}; - @Override - public void run() + public Mono run() { - Flux + return Flux .fromArray(chatRooms) - .flatMap(chatRoom -> receiveMessages(chatRoom) - .flatMap(sse -> - { - try + .flatMap(chatRoom -> + { + log.info("Requesting messages from chat-room {}", chatRoom); + List list = new LinkedList<>(); + receivedMessages.put(chatRoom.getId(), list); + return receiveMessages(chatRoom) + .flatMap(sse -> { - return Mono.just(objectMapper.readValue(sse.data(), MessageTo.class)); - } - catch (Exception e) + try + { + return Mono.just(objectMapper.readValue(sse.data(), MessageTo.class)); + } + catch (Exception e) + { + return Mono.error(e); + } + }) + .doOnNext(message -> { - return Mono.error(e); - } - }) - .doOnNext(message -> log.info( - "Received a message from chat-room {}: {}", - chatRoom, - message)) - .take(30)) + list.add(message); + log.info( + "Received a message from chat-room {}: {}", + chatRoom.getName(), + message); + }) + .take(10); + }) + .take(100) .takeUntil(message -> !running) - .then() - .block(); + .doOnComplete(() -> log.info("TestListener is done")) + .parallel(chatRooms.length) + .runOn(Schedulers.parallel()) + .then(); } Flux> receiveMessages(ChatRoomInfoTo chatRoom) @@ -71,6 +79,8 @@ public class TestListener implements Runnable private final ChatRoomInfoTo[] chatRooms; private final ObjectMapper objectMapper; + final Map> receivedMessages = new HashMap<>(); + volatile boolean running = true;