diff --git a/.gitignore b/.gitignore
index 485dee6..090a1f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
.idea
+.DS_Store
diff --git a/README.md b/README.md
index b8e1867..9de639d 100644
--- a/README.md
+++ b/README.md
@@ -5,11 +5,16 @@ Not intended for production usage, but to reproduce issues or to try out things.
## Discovery
-### Kubernetes
- [kubernetes](kubernetes)
-### Nacos
- [nacos](nacos)
+- [eureka](eureka)
+
## Proxy
+
- [nginx](nginx)
+
+## Cloud
+
+- [Spring Cloud Bus](spring-cloud-bus)
diff --git a/eureka/README.md b/eureka/README.md
index 7fc3076..a20218e 100644
--- a/eureka/README.md
+++ b/eureka/README.md
@@ -22,5 +22,5 @@ Admin UI: http://localhost:8080/
## Stop Everything
```bash
-docker-compose down -v
+docker compose down -v
```
diff --git a/eureka/buildAndRunAll.sh b/eureka/buildAndRunAll.sh
index bb8efa6..d100cec 100755
--- a/eureka/buildAndRunAll.sh
+++ b/eureka/buildAndRunAll.sh
@@ -12,4 +12,4 @@ cd apps/hello-world
./build.sh
cd ../..
-docker-compose up -d
+docker compose up -d
diff --git a/nacos/README.md b/nacos/README.md
index b8ca632..d580ed3 100644
--- a/nacos/README.md
+++ b/nacos/README.md
@@ -21,7 +21,7 @@ http://localhost:8080/
## Stop Everything
```bash
-docker-compose down -v
+docker compose down -v
```
## Step-by-step Guide
diff --git a/nacos/buildAndRunAll.sh b/nacos/buildAndRunAll.sh
index 11fb59e..41960b1 100755
--- a/nacos/buildAndRunAll.sh
+++ b/nacos/buildAndRunAll.sh
@@ -12,4 +12,4 @@ cd apps/health-simulator
./build.sh
cd ../..
-docker-compose up -d
+docker compose up -d
diff --git a/nginx/README.md b/nginx/README.md
index 18c02f5..495b72a 100644
--- a/nginx/README.md
+++ b/nginx/README.md
@@ -23,5 +23,5 @@ chmod u+x buildAndRunAll.sh
## Stop Everything
```bash
-docker-compose down -v
+docker compose down -v
```
\ No newline at end of file
diff --git a/nginx/buildAndRunAll.sh b/nginx/buildAndRunAll.sh
index 3588ffb..df59a3e 100755
--- a/nginx/buildAndRunAll.sh
+++ b/nginx/buildAndRunAll.sh
@@ -8,4 +8,4 @@ cd apps/hello-world
./build.sh
cd ../..
-docker-compose up -d
+docker compose up -d
diff --git a/spring-cloud-bus/README.md b/spring-cloud-bus/README.md
new file mode 100644
index 0000000..820a4ba
--- /dev/null
+++ b/spring-cloud-bus/README.md
@@ -0,0 +1,30 @@
+Sample for [Spring Cloud Bus](https://docs.spring.io/spring-cloud-bus/docs/current/reference/html/)
+
+Starts
+- RabbitMQ (http://localhost:15672, credentials: guest/guest)
+- a Spring Boot Admin Server (http://localhost:8080)
+- a Hello World app (http://localhost:8081)
+
+If a bus-refresh is triggered on one of the spring boot apps, spring cloud sends a message to all other apps to
+refresh their configuration (visible in the logs, currently there is nothing to refresh).
+
+Bus-refresh is now also available in the Spring Boot Admin UI on the environment page.
+Bus-env and bus-shutdown are not yet supported.
+
+## Prerequisites
+
+- Java
+- Maven
+- Docker and Docker Compose
+
+## Run Everything
+You can run the whole build and start all apps in docker containers with the following script
+```bash
+chmod u+x buildAndRunAll.sh
+./buildAndRunAll.sh
+```
+
+## Stop Everything
+```bash
+docker compose down -v
+```
\ No newline at end of file
diff --git a/spring-cloud-bus/apps/hello-world/.gitignore b/spring-cloud-bus/apps/hello-world/.gitignore
new file mode 100644
index 0000000..b18abdf
--- /dev/null
+++ b/spring-cloud-bus/apps/hello-world/.gitignore
@@ -0,0 +1,5 @@
+target
+.idea
+*.iml
+*.log
+*.gz
diff --git a/spring-cloud-bus/apps/hello-world/Dockerfile b/spring-cloud-bus/apps/hello-world/Dockerfile
new file mode 100644
index 0000000..0f5052e
--- /dev/null
+++ b/spring-cloud-bus/apps/hello-world/Dockerfile
@@ -0,0 +1,8 @@
+# https://hub.docker.com/_/eclipse-temurin/
+FROM eclipse-temurin:17
+
+VOLUME /tmp
+
+COPY target/app.jar /opt/app/app.jar
+
+CMD ["bash", "-c", "java $JAVA_OPTS -jar /opt/app/app.jar"]
diff --git a/spring-cloud-bus/apps/hello-world/build.sh b/spring-cloud-bus/apps/hello-world/build.sh
new file mode 100755
index 0000000..c2c7b18
--- /dev/null
+++ b/spring-cloud-bus/apps/hello-world/build.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# Build App
+mvn package
+# Build Docker Image
+docker build --tag hello-world-cloudbus .
diff --git a/spring-cloud-bus/apps/hello-world/pom.xml b/spring-cloud-bus/apps/hello-world/pom.xml
new file mode 100644
index 0000000..c89f55b
--- /dev/null
+++ b/spring-cloud-bus/apps/hello-world/pom.xml
@@ -0,0 +1,86 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.4.1
+
+
+ de.codecentric
+ hello-world-cloud-bus
+ 1.0.0-SNAPSHOT
+ hello-world-cloud-bus
+ hello world with spring cloud-bus
+
+
+ 17
+ 3.4.2-SNAPSHOT
+ 2024.0.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bus-amqp
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ de.codecentric
+ spring-boot-admin-starter-client
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+ de.codecentric
+ spring-boot-admin-dependencies
+ ${spring-boot-admin.version}
+ pom
+ import
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+ app
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ repackage
+
+ repackage
+
+ build-info
+
+
+
+
+
+
+
+
diff --git a/spring-cloud-bus/apps/hello-world/src/main/java/de/codecentric/helloworld/cloudbus/HelloWorld.java b/spring-cloud-bus/apps/hello-world/src/main/java/de/codecentric/helloworld/cloudbus/HelloWorld.java
new file mode 100644
index 0000000..39cb02d
--- /dev/null
+++ b/spring-cloud-bus/apps/hello-world/src/main/java/de/codecentric/helloworld/cloudbus/HelloWorld.java
@@ -0,0 +1,14 @@
+package de.codecentric.helloworld.cloudbus;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class HelloWorld {
+
+ @GetMapping("/")
+ public String hello() {
+ return "Hello World!";
+ }
+
+}
diff --git a/spring-cloud-bus/apps/hello-world/src/main/java/de/codecentric/helloworld/cloudbus/HelloWorldCloudBusApplication.java b/spring-cloud-bus/apps/hello-world/src/main/java/de/codecentric/helloworld/cloudbus/HelloWorldCloudBusApplication.java
new file mode 100644
index 0000000..dbb3d1d
--- /dev/null
+++ b/spring-cloud-bus/apps/hello-world/src/main/java/de/codecentric/helloworld/cloudbus/HelloWorldCloudBusApplication.java
@@ -0,0 +1,13 @@
+package de.codecentric.helloworld.cloudbus;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class HelloWorldCloudBusApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(HelloWorldCloudBusApplication.class, args);
+ }
+
+}
diff --git a/spring-cloud-bus/apps/hello-world/src/main/resources/application.yml b/spring-cloud-bus/apps/hello-world/src/main/resources/application.yml
new file mode 100644
index 0000000..0697ba5
--- /dev/null
+++ b/spring-cloud-bus/apps/hello-world/src/main/resources/application.yml
@@ -0,0 +1,45 @@
+server:
+ port: 8081
+spring:
+ application: # Application-Info for the Info-Actuator
+ name: "@pom.artifactId@"
+ boot:
+ admin:
+ client:
+ url: "http://localhost:8080"
+ rabbitmq:
+ host: localhost
+ port: 5672
+ username: guest
+ password: guest
+management: # Actuator Configuration
+ endpoints:
+ web:
+ exposure:
+ include: "*"
+ endpoint: # Health-Actuator
+ health:
+ show-details: always
+ env:
+ post:
+ enabled: true
+ info: # Info-Actuator
+ java:
+ enabled: true
+ os:
+ enabled: true
+ build:
+ enabled: true
+ env:
+ enabled: true
+info: # Application-Info for the Info-Actuator
+ group: "@pom.groupId@"
+ artifact: "@pom.artifactId@"
+ description: "@pom.description@"
+ version: "@pom.version@"
+ spring-boot: "@pom.parent.version@"
+ # Tags for the Spring Boot Admin UI
+ tags:
+ spring-boot: "@pom.parent.version@"
+ level:
+ de.codecentric.boot.admin: DEBUG
diff --git a/spring-cloud-bus/apps/hello-world/src/test/java/de/codecentric/helloworld/cloudbus/HelloWorldCloudBusApplicationTests.java b/spring-cloud-bus/apps/hello-world/src/test/java/de/codecentric/helloworld/cloudbus/HelloWorldCloudBusApplicationTests.java
new file mode 100644
index 0000000..9352dc7
--- /dev/null
+++ b/spring-cloud-bus/apps/hello-world/src/test/java/de/codecentric/helloworld/cloudbus/HelloWorldCloudBusApplicationTests.java
@@ -0,0 +1,13 @@
+package de.codecentric.helloworld.cloudbus;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class HelloWorldCloudBusApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}
diff --git a/spring-cloud-bus/apps/spring-boot-admin/.gitignore b/spring-cloud-bus/apps/spring-boot-admin/.gitignore
new file mode 100644
index 0000000..b18abdf
--- /dev/null
+++ b/spring-cloud-bus/apps/spring-boot-admin/.gitignore
@@ -0,0 +1,5 @@
+target
+.idea
+*.iml
+*.log
+*.gz
diff --git a/spring-cloud-bus/apps/spring-boot-admin/Dockerfile b/spring-cloud-bus/apps/spring-boot-admin/Dockerfile
new file mode 100644
index 0000000..0f5052e
--- /dev/null
+++ b/spring-cloud-bus/apps/spring-boot-admin/Dockerfile
@@ -0,0 +1,8 @@
+# https://hub.docker.com/_/eclipse-temurin/
+FROM eclipse-temurin:17
+
+VOLUME /tmp
+
+COPY target/app.jar /opt/app/app.jar
+
+CMD ["bash", "-c", "java $JAVA_OPTS -jar /opt/app/app.jar"]
diff --git a/spring-cloud-bus/apps/spring-boot-admin/build.sh b/spring-cloud-bus/apps/spring-boot-admin/build.sh
new file mode 100755
index 0000000..d59ce56
--- /dev/null
+++ b/spring-cloud-bus/apps/spring-boot-admin/build.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# Build App
+mvn package
+# Build Docker Image
+docker build --tag spring-boot-admin-cloudbus .
diff --git a/spring-cloud-bus/apps/spring-boot-admin/pom.xml b/spring-cloud-bus/apps/spring-boot-admin/pom.xml
new file mode 100644
index 0000000..6143c7b
--- /dev/null
+++ b/spring-cloud-bus/apps/spring-boot-admin/pom.xml
@@ -0,0 +1,90 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.4.1
+
+
+ de.codecentric
+ spring-boot-admin-cloud-bus
+ 1.0.0-SNAPSHOT
+ spring-boot-admin-cloud-bus
+ spring-boot-admin with cloud-bus
+
+
+ 17
+ 3.4.2-SNAPSHOT
+ 2024.0.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bus-amqp
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ de.codecentric
+ spring-boot-admin-starter-server
+
+
+ de.codecentric
+ spring-boot-admin-starter-client
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+ de.codecentric
+ spring-boot-admin-dependencies
+ ${spring-boot-admin.version}
+ pom
+ import
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+ app
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ repackage
+
+ repackage
+
+ build-info
+
+
+
+
+
+
+
+
diff --git a/spring-cloud-bus/apps/spring-boot-admin/src/main/java/de/codecentric/springbootadmin/cloudbus/SpringBootAdminCloudBusApplication.java b/spring-cloud-bus/apps/spring-boot-admin/src/main/java/de/codecentric/springbootadmin/cloudbus/SpringBootAdminCloudBusApplication.java
new file mode 100644
index 0000000..9f0b0d8
--- /dev/null
+++ b/spring-cloud-bus/apps/spring-boot-admin/src/main/java/de/codecentric/springbootadmin/cloudbus/SpringBootAdminCloudBusApplication.java
@@ -0,0 +1,15 @@
+package de.codecentric.springbootadmin.cloudbus;
+
+import de.codecentric.boot.admin.server.config.EnableAdminServer;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@EnableAdminServer
+public class SpringBootAdminCloudBusApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringBootAdminCloudBusApplication.class, args);
+ }
+
+}
diff --git a/spring-cloud-bus/apps/spring-boot-admin/src/main/resources/application.yml b/spring-cloud-bus/apps/spring-boot-admin/src/main/resources/application.yml
new file mode 100644
index 0000000..eed4a91
--- /dev/null
+++ b/spring-cloud-bus/apps/spring-boot-admin/src/main/resources/application.yml
@@ -0,0 +1,44 @@
+spring:
+ application:
+ name: spring-boot-admin-cloud-bus
+ boot:
+ admin:
+ client:
+ url: http://localhost:8080
+ rabbitmq:
+ host: localhost
+ port: 5672
+ username: guest
+ password: guest
+
+management: # Actuator Configuration
+ endpoints:
+ web:
+ exposure:
+ include: "*"
+ endpoint: # Health-Actuator
+ health:
+ show-details: always
+ env:
+ post:
+ enabled: true
+ info: # Info-Actuator
+ java:
+ enabled: true
+ os:
+ enabled: true
+ build:
+ enabled: true
+ env:
+ enabled: true
+info: # Application-Info for the Info-Actuator
+ group: "@pom.groupId@"
+ artifact: "@pom.artifactId@"
+ description: "@pom.description@"
+ version: "@pom.version@"
+ spring-boot: "@pom.parent.version@"
+ # Tags for the Spring Boot Admin UI
+ tags:
+ spring-boot: "@pom.parent.version@"
+ level:
+ de.codecentric.boot.admin: DEBUG
diff --git a/spring-cloud-bus/apps/spring-boot-admin/src/test/java/de/codecentric/springbootadmin/cloudbus/SpringBootAdminCloudBusApplicationTests.java b/spring-cloud-bus/apps/spring-boot-admin/src/test/java/de/codecentric/springbootadmin/cloudbus/SpringBootAdminCloudBusApplicationTests.java
new file mode 100644
index 0000000..4010095
--- /dev/null
+++ b/spring-cloud-bus/apps/spring-boot-admin/src/test/java/de/codecentric/springbootadmin/cloudbus/SpringBootAdminCloudBusApplicationTests.java
@@ -0,0 +1,13 @@
+package de.codecentric.springbootadmin.cloudbus;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class SpringBootAdminCloudBusApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}
diff --git a/spring-cloud-bus/buildAndRunAll.sh b/spring-cloud-bus/buildAndRunAll.sh
new file mode 100755
index 0000000..df59a3e
--- /dev/null
+++ b/spring-cloud-bus/buildAndRunAll.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+cd apps/spring-boot-admin
+./build.sh
+cd ../..
+
+cd apps/hello-world
+./build.sh
+cd ../..
+
+docker compose up -d
diff --git a/spring-cloud-bus/cloud-bus.http b/spring-cloud-bus/cloud-bus.http
new file mode 100644
index 0000000..7c5a1ab
--- /dev/null
+++ b/spring-cloud-bus/cloud-bus.http
@@ -0,0 +1,4 @@
+### trigger busrefresh
+POST http://localhost:8080/actuator/busrefresh
+
+###
diff --git a/spring-cloud-bus/docker-compose.yml b/spring-cloud-bus/docker-compose.yml
new file mode 100644
index 0000000..32c38d5
--- /dev/null
+++ b/spring-cloud-bus/docker-compose.yml
@@ -0,0 +1,25 @@
+services:
+ rabbitmq:
+ image: rabbitmq:management
+ ports:
+ - "15672:15672"
+ - "5672:5672"
+ restart: always
+
+ hello-world:
+ container_name: hello-world-cloudbus
+ image: hello-world-cloudbus
+ ports:
+ - "8081:8081"
+ environment:
+ - SPRING_BOOT_ADMIN_CLIENT_URL=http://spring-boot-admin:8080
+ - SPRING_RABBITMQ_HOST=rabbitmq
+
+ spring-boot-admin:
+ container_name: spring-boot-admin-cloudbus
+ image: spring-boot-admin-cloudbus
+ ports:
+ - "8080:8080"
+ environment:
+ - SPRING_BOOT_ADMIN_CLIENT_URL=http://spring-boot-admin:8080
+ - SPRING_RABBITMQ_HOST=rabbitmq
\ No newline at end of file