diff --git a/spring-websockets/pom.xml b/spring-websockets/pom.xml
index 8f24962185..d2a32a8eb6 100644
--- a/spring-websockets/pom.xml
+++ b/spring-websockets/pom.xml
@@ -18,6 +18,10 @@
org.springframework.boot
spring-boot-starter-websocket
+
+ io.projectreactor
+ reactor-core
+
com.github.javafaker
javafaker
diff --git a/spring-websockets/src/main/java/com/baeldung/websockets/ReactiveScheduledPushMessages.java b/spring-websockets/src/main/java/com/baeldung/websockets/ReactiveScheduledPushMessages.java
new file mode 100644
index 0000000000..cfaf981d96
--- /dev/null
+++ b/spring-websockets/src/main/java/com/baeldung/websockets/ReactiveScheduledPushMessages.java
@@ -0,0 +1,32 @@
+package com.baeldung.websockets;
+
+import com.github.javafaker.Faker;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.messaging.simp.SimpMessagingTemplate;
+import org.springframework.stereotype.Service;
+import reactor.core.publisher.Flux;
+
+import java.text.SimpleDateFormat;
+import java.time.Duration;
+import java.util.Date;
+
+@Service
+public class ReactiveScheduledPushMessages implements InitializingBean {
+
+ private final SimpMessagingTemplate simpMessagingTemplate;
+
+ private final Faker faker;
+
+ public ReactiveScheduledPushMessages(SimpMessagingTemplate simpMessagingTemplate) {
+ this.simpMessagingTemplate = simpMessagingTemplate;
+ this.faker = new Faker();
+ }
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ Flux.interval(Duration.ofSeconds(4L))
+ .map((n) -> new OutputMessage(faker.backToTheFuture().character(), faker.backToTheFuture().quote(),
+ new SimpleDateFormat("HH:mm").format(new Date())))
+ .subscribe(message -> simpMessagingTemplate.convertAndSend("/topic/messages", message));
+ }
+}