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