projects
/
demos
/
kafka
/
chat
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
test: HandoverIT-POC - working fix: using `delayElements()`
[demos/kafka/chat]
/
src
/
test
/
java
/
de
/
juplo
/
kafka
/
chat
/
backend
/
TestWriter.java
diff --git
a/src/test/java/de/juplo/kafka/chat/backend/TestWriter.java
b/src/test/java/de/juplo/kafka/chat/backend/TestWriter.java
index
267519e
..
0d2c41e
100644
(file)
--- a/
src/test/java/de/juplo/kafka/chat/backend/TestWriter.java
+++ b/
src/test/java/de/juplo/kafka/chat/backend/TestWriter.java
@@
-9,21
+9,23
@@
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 org.springframework.web.reactive.function.client.WebClientResponseException;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
+import reactor.core.scheduler.Schedulers;
import reactor.util.retry.Retry;
import java.nio.charset.Charset;
import java.time.Duration;
import java.util.Iterator;
import reactor.util.retry.Retry;
import java.nio.charset.Charset;
import java.time.Duration;
import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
@Slf4j
import java.util.concurrent.ThreadLocalRandom;
@Slf4j
-public class TestWriter
implements Runnable
+public class TestWriter
{
{
- @Override
- public void run()
+ public Mono<Void> run()
{
{
- Flux
+
return
Flux
.fromIterable((Iterable<Integer>) () -> new Iterator<>()
{
private int i = 0;
.fromIterable((Iterable<Integer>) () -> new Iterator<>()
{
private int i = 0;
@@
-40,15
+42,19
@@
public class TestWriter implements Runnable
return i++;
}
})
return i++;
}
})
+ .delayElements(Duration.ofMillis(ThreadLocalRandom.current().nextLong(500, 1500)))
.map(i -> "Message #" + i)
.flatMap(message -> sendMessage(chatRoom, message)
.map(i -> "Message #" + i)
.flatMap(message -> sendMessage(chatRoom, message)
- .delayElement(Duration.ofMillis(ThreadLocalRandom.current().nextLong(500, 1500)))
.retryWhen(Retry.fixedDelay(10, Duration.ofSeconds(1))))
.retryWhen(Retry.fixedDelay(10, Duration.ofSeconds(1))))
- .doOnNext(message -> log.info(
- "{} sent a message to {}: {}",
- user,
- chatRoom,
- message))
+ .doOnNext(message ->
+ {
+ sentMessages.add(message);
+ log.info(
+ "{} sent a message to {}: {}",
+ user,
+ chatRoom,
+ message);
+ })
.doOnError(throwable ->
{
WebClientResponseException e = (WebClientResponseException)throwable.getCause();
.doOnError(throwable ->
{
WebClientResponseException e = (WebClientResponseException)throwable.getCause();
@@
-57,8
+63,12
@@
public class TestWriter implements Runnable
user,
e.getResponseBodyAsString(Charset.defaultCharset()));
})
user,
e.getResponseBodyAsString(Charset.defaultCharset()));
})
- .then()
- .block();
+ .limitRate(1)
+ .takeUntil(message -> !running)
+ .doOnComplete(() -> log.info("TestWriter {} is done", user))
+ .parallel(1)
+ .runOn(Schedulers.parallel())
+ .then();
}
private Mono<MessageTo> sendMessage(
}
private Mono<MessageTo> sendMessage(
@@
-91,7
+101,9
@@
public class TestWriter implements Runnable
private final WebClient webClient;
private final ChatRoomInfoTo chatRoom;
private final WebClient webClient;
private final ChatRoomInfoTo chatRoom;
- private final User user;
+
+ final User user;
+ final List<MessageTo> sentMessages = new LinkedList<>();
volatile boolean running = true;
volatile boolean running = true;