diff --git a/README.md b/README.md
index 795a0a23..b019ca30 100644
--- a/README.md
+++ b/README.md
@@ -187,7 +187,7 @@
* [《芋道 Spring Cloud Alibaba 配置中心 Nacos 入门》](http://www.iocoder.cn/Spring-Cloud-Alibaba/Nacos-Config/?github) 对应 [labx-05](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-05)
* [《芋道 Spring Cloud 配置中心 Apollo 入门》](http://www.iocoder.cn/Spring-Cloud/Apollo/?github) 对应 [labx-09](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-09)
-* [《芋道 Spring Cloud 配置中心 Spring Cloud Config 入门》](http://www.iocoder.cn/Spring-Cloud/Config/?github) 对应 [labx-12](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-12)
+* [《芋道 Spring Cloud 配置中心 Spring Cloud Config 入门》](http://www.iocoder.cn/Spring-Cloud/Spring-Cloud-Config/?github) 对应 [labx-12](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-12)
## 消息队列
diff --git a/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/pom.xml b/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/pom.xml
new file mode 100644
index 00000000..bd3a1ebb
--- /dev/null
+++ b/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/pom.xml
@@ -0,0 +1,64 @@
+
+
+
+ labx-18
+ cn.iocoder.springboot.labs
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ labx-18-sc-bus-rabbitmq-demo-listener-actuator
+
+
+ 1.8
+ 1.8
+ 2.2.4.RELEASE
+ Hoxton.SR1
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ ${spring.boot.version}
+ pom
+ import
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring.cloud.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bus-amqp
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
diff --git a/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/src/main/java/cn/iocoder/springcloud/labx18/listenerdemo/ListenerDemoApplication.java b/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/src/main/java/cn/iocoder/springcloud/labx18/listenerdemo/ListenerDemoApplication.java
new file mode 100644
index 00000000..c50fa864
--- /dev/null
+++ b/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/src/main/java/cn/iocoder/springcloud/labx18/listenerdemo/ListenerDemoApplication.java
@@ -0,0 +1,15 @@
+package cn.iocoder.springcloud.labx18.listenerdemo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.bus.jackson.RemoteApplicationEventScan;
+
+@SpringBootApplication
+@RemoteApplicationEventScan
+public class ListenerDemoApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ListenerDemoApplication.class, args);
+ }
+
+}
diff --git a/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/src/main/java/cn/iocoder/springcloud/labx18/listenerdemo/event/UserRegisterEvent.java b/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/src/main/java/cn/iocoder/springcloud/labx18/listenerdemo/event/UserRegisterEvent.java
new file mode 100644
index 00000000..7e12e67d
--- /dev/null
+++ b/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/src/main/java/cn/iocoder/springcloud/labx18/listenerdemo/event/UserRegisterEvent.java
@@ -0,0 +1,27 @@
+package cn.iocoder.springcloud.labx18.listenerdemo.event;
+
+import org.springframework.cloud.bus.event.RemoteApplicationEvent;
+
+/**
+ * 用户注册事件
+ */
+public class UserRegisterEvent extends RemoteApplicationEvent {
+
+ /**
+ * 用户名
+ */
+ private String username;
+
+ public UserRegisterEvent() { // 序列化
+ }
+
+ public UserRegisterEvent(Object source, String originService, String destinationService, String username) {
+ super(source, originService);
+ this.username = username;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+}
diff --git a/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/src/main/java/cn/iocoder/springcloud/labx18/listenerdemo/listener/UserRegisterListener.java b/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/src/main/java/cn/iocoder/springcloud/labx18/listenerdemo/listener/UserRegisterListener.java
new file mode 100644
index 00000000..a16a5e41
--- /dev/null
+++ b/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/src/main/java/cn/iocoder/springcloud/labx18/listenerdemo/listener/UserRegisterListener.java
@@ -0,0 +1,22 @@
+package cn.iocoder.springcloud.labx18.listenerdemo.listener;
+
+import cn.iocoder.springcloud.labx18.listenerdemo.event.UserRegisterEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+
+/**
+ * 用户注册事件的监听器
+ */
+@Component
+public class UserRegisterListener implements ApplicationListener {
+
+ private Logger logger = LoggerFactory.getLogger(getClass());
+
+ @Override
+ public void onApplicationEvent(UserRegisterEvent event) {
+ logger.info("[onApplicationEvent][监听到用户({}) 注册]", event.getUsername());
+ }
+
+}
diff --git a/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/src/main/resources/application.yml b/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/src/main/resources/application.yml
new file mode 100644
index 00000000..05743d70
--- /dev/null
+++ b/labx-18/labx-18-sc-bus-rabbitmq-demo-listener-actuator/src/main/resources/application.yml
@@ -0,0 +1,20 @@
+spring:
+ application:
+ name: listener-demo
+
+ # RabbitMQ 相关配置项
+ rabbitmq:
+ host: localhost
+ port: 5672
+ username: guest
+ password: guest
+
+server:
+ port: 18080 # 随机端口,方便启动多个消费者
+
+management:
+ endpoints:
+ # Actuator HTTP 配置项,对应 WebEndpointProperties 配置类
+ web:
+ exposure:
+ include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
diff --git a/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/pom.xml b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/pom.xml
new file mode 100644
index 00000000..fc302b7a
--- /dev/null
+++ b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/pom.xml
@@ -0,0 +1,64 @@
+
+
+
+ labx-18
+ cn.iocoder.springboot.labs
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ labx-18-sc-bus-rabbitmq-demo-publisher-actuator
+
+
+ 1.8
+ 1.8
+ 2.2.4.RELEASE
+ Hoxton.SR1
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ ${spring.boot.version}
+ pom
+ import
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring.cloud.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bus-amqp
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
diff --git a/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/PublisherDemoApplication.java b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/PublisherDemoApplication.java
new file mode 100644
index 00000000..91e100cb
--- /dev/null
+++ b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/PublisherDemoApplication.java
@@ -0,0 +1,14 @@
+package cn.iocoder.springcloud.labx18.publisherdemo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+//@RemoteApplicationEventScan
+public class PublisherDemoApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(PublisherDemoApplication.class, args);
+ }
+
+}
diff --git a/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/controller/DemoController.java b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/controller/DemoController.java
new file mode 100644
index 00000000..aae2b09a
--- /dev/null
+++ b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/controller/DemoController.java
@@ -0,0 +1,37 @@
+package cn.iocoder.springcloud.labx18.publisherdemo.controller;
+
+import cn.iocoder.springcloud.labx18.publisherdemo.event.UserRegisterEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.bus.ServiceMatcher;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/demo")
+public class DemoController {
+
+ private Logger logger = LoggerFactory.getLogger(getClass());
+
+ @Autowired
+ private ApplicationEventPublisher applicationEventPublisher;
+
+ @Autowired
+ private ServiceMatcher busServiceMatcher;
+
+ @GetMapping("/register")
+ public String register(String username) {
+ // ... 执行注册逻辑
+ logger.info("[register][执行用户({}) 的注册逻辑]", username);
+
+ // ... 发布
+ applicationEventPublisher.publishEvent(new UserRegisterEvent(this, busServiceMatcher.getServiceId(),
+ null, username));
+ return "success";
+ }
+
+
+}
diff --git a/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/event/UserRegisterEvent.java b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/event/UserRegisterEvent.java
new file mode 100644
index 00000000..0e17f282
--- /dev/null
+++ b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/event/UserRegisterEvent.java
@@ -0,0 +1,27 @@
+package cn.iocoder.springcloud.labx18.publisherdemo.event;
+
+import org.springframework.cloud.bus.event.RemoteApplicationEvent;
+
+/**
+ * 用户注册事件
+ */
+public class UserRegisterEvent extends RemoteApplicationEvent {
+
+ /**
+ * 用户名
+ */
+ private String username;
+
+ public UserRegisterEvent() { // 序列化
+ }
+
+ public UserRegisterEvent(Object source, String originService, String destinationService, String username) {
+ super(source, originService);
+ this.username = username;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+}
diff --git a/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/src/main/resources/application.yml b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/src/main/resources/application.yml
new file mode 100644
index 00000000..1ea2852d
--- /dev/null
+++ b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher-actuator/src/main/resources/application.yml
@@ -0,0 +1,17 @@
+spring:
+ application:
+ name: publisher-demo
+
+ # RabbitMQ 相关配置项
+ rabbitmq:
+ host: localhost
+ port: 5672
+ username: guest
+ password: guest
+
+management:
+ endpoints:
+ # Actuator HTTP 配置项,对应 WebEndpointProperties 配置类
+ web:
+ exposure:
+ include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
diff --git a/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/controller/DemoController.java b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/controller/DemoController.java
index 72e4aa29..aae2b09a 100644
--- a/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/controller/DemoController.java
+++ b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher/src/main/java/cn/iocoder/springcloud/labx18/publisherdemo/controller/DemoController.java
@@ -6,27 +6,22 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.bus.ServiceMatcher;
import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/demo")
-public class DemoController implements ApplicationEventPublisherAware {
+public class DemoController {
private Logger logger = LoggerFactory.getLogger(getClass());
+ @Autowired
private ApplicationEventPublisher applicationEventPublisher;
@Autowired
private ServiceMatcher busServiceMatcher;
- @Override
- public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
- this.applicationEventPublisher = applicationEventPublisher;
- }
-
@GetMapping("/register")
public String register(String username) {
// ... 执行注册逻辑
@@ -34,7 +29,7 @@ public class DemoController implements ApplicationEventPublisherAware {
// ... 发布
applicationEventPublisher.publishEvent(new UserRegisterEvent(this, busServiceMatcher.getServiceId(),
- "**", username));
+ null, username));
return "success";
}
diff --git a/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher/src/main/resources/application.yml b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher/src/main/resources/application.yml
index 2e229157..40308580 100644
--- a/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher/src/main/resources/application.yml
+++ b/labx-18/labx-18-sc-bus-rabbitmq-demo-publisher/src/main/resources/application.yml
@@ -8,3 +8,9 @@ spring:
port: 5672
username: guest
password: guest
+
+ # Bus 相关配置项,对应 BusProperties
+ cloud:
+ bus:
+ enabled: true # 是否开启,默认为 true
+ destination: springCloudBus # 目标消息队列,默认为 springCloudBus
diff --git a/labx-18/pom.xml b/labx-18/pom.xml
index ab539d01..836d2b28 100644
--- a/labx-18/pom.xml
+++ b/labx-18/pom.xml
@@ -14,6 +14,9 @@
labx-18-sc-bus-rabbitmq-demo-publisher
labx-18-sc-bus-rabbitmq-demo-listener
+
+ labx-18-sc-bus-rabbitmq-demo-listener-actuator
+ labx-18-sc-bus-rabbitmq-demo-publisher-actuator