projects
/
demos
/
kafka
/
chat
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
WIP
[demos/kafka/chat]
/
src
/
test
/
java
/
de
/
juplo
/
kafka
/
chat
/
backend
/
TestListener.java
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
1c993c1
..
3f282ee
100644
(file)
--- 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,57
@@
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 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.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.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
@Slf4j
-public class TestListener
implements Runnable
+public class TestListener
{
static final ParameterizedTypeReference<ServerSentEvent<String>> SSE_TYPE = new ParameterizedTypeReference<>() {};
{
static final ParameterizedTypeReference<ServerSentEvent<String>> SSE_TYPE = new ParameterizedTypeReference<>() {};
- @Override
- public void run()
+ public Mono<Void> run()
{
{
- Flux
+
return
Flux
.fromArray(chatRooms)
.fromArray(chatRooms)
- .flatMap(chatRoom -> receiveMessages(chatRoom)
- .flatMap(sse ->
- {
- try
+ .flatMap(chatRoom ->
+ {
+ List<MessageTo> 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(messag
e);
+ log.info(
+ "Received a message from chat-room {}: {}",
+ chatRoom,
+ message);
+ })
+ .take(30);
+
}
)
.takeUntil(message -> !running)
.takeUntil(message -> !running)
- .then()
- .block();
+ .doOnComplete(() -> log.info("TestListener is done"))
+ .parallel()
+ .runOn(Schedulers.parallel())
+ .then();
}
Flux<ServerSentEvent<String>> receiveMessages(ChatRoomInfoTo chatRoom)
}
Flux<ServerSentEvent<String>> receiveMessages(ChatRoomInfoTo chatRoom)
@@
-71,6
+77,8
@@
public class TestListener implements Runnable
private final ChatRoomInfoTo[] chatRooms;
private final ObjectMapper objectMapper;
private final ChatRoomInfoTo[] chatRooms;
private final ObjectMapper objectMapper;
+ final Map<UUID, List<MessageTo>> receivedMessages = new HashMap<>();
+
volatile boolean running = true;
volatile boolean running = true;