From 89bb3d1f0230b347dbcb5c93679b47c23e4c650e Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Tue, 18 Feb 2020 21:50:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20spring=20cloud=20alibaba?= =?UTF-8?q?=20rocketmq=20=E6=B6=88=E6=81=AF=E9=98=9F=E5=88=97=E7=9A=84?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++- .../pom.xml | 66 +++++++++++++++++++ .../consumerdemo/ConsumerApplication.java | 16 +++++ .../consumerdemo/listener/Demo01Consumer.java | 20 ++++++ .../consumerdemo/listener/MySink.java | 13 ++++ .../consumerdemo/message/Demo01Message.java | 29 ++++++++ .../src/main/resources/application.yml | 26 ++++++++ .../pom.xml | 66 +++++++++++++++++++ .../producerdemo/ProducerApplication.java | 16 +++++ .../controller/Demo01Controller.java | 33 ++++++++++ .../producerdemo/message/Demo01Message.java | 29 ++++++++ .../producerdemo/message/MySource.java | 11 ++++ .../src/main/resources/application.yml | 25 +++++++ labx-06/pom.xml | 20 ++++++ pom.xml | 1 + 15 files changed, 378 insertions(+), 1 deletion(-) create mode 100644 labx-06/labx-06-sca-stream-rocketmq-consumer-demo/pom.xml create mode 100644 labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/ConsumerApplication.java create mode 100644 labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/listener/Demo01Consumer.java create mode 100644 labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/listener/MySink.java create mode 100644 labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/message/Demo01Message.java create mode 100644 labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/resources/application.yml create mode 100644 labx-06/labx-06-sca-stream-rocketmq-producer-demo/pom.xml create mode 100644 labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/ProducerApplication.java create mode 100644 labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/controller/Demo01Controller.java create mode 100644 labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/message/Demo01Message.java create mode 100644 labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/message/MySource.java create mode 100644 labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/resources/application.yml create mode 100644 labx-06/pom.xml diff --git a/README.md b/README.md index 3811208c..a181bc28 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ * [《芋道 Spring Cloud Alibaba 注册中心 Nacos 入门》](http://www.iocoder.cn/Spring-Cloud-Alibaba/Nacos-Discovery/?github) 对应 [labx-01](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-01) * 《芋道 Spring Cloud Alibaba 服务调用 Dubbo 入门》 * [《芋道 Spring Cloud Alibaba 服务容错 Sentinel 入门》](http://www.iocoder.cn/Spring-Cloud-Alibaba/Sentinel/?github) 对应 [labx-04](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-04) -* 《芋道 Spring Cloud Alibaba 消息队列 RocketMQ 入门》 +* [《芋道 Spring Cloud Alibaba 消息队列 RocketMQ 入门》](http://www.iocoder.cn/Spring-Cloud-Alibaba/RocketMQ/?github) 对应 [labx-06](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-06) * [《芋道 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 Alibaba 分布式事务 Seata 入门》 @@ -168,6 +168,12 @@ * [《芋道 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 入门》 +## 消息队列 + +* [《芋道 Spring Cloud Alibaba 消息队列 RocketMQ 入门》](http://www.iocoder.cn/Spring-Cloud-Alibaba/RocketMQ/?github) 对应 [labx-06](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-06) +* 《芋道 Spring Cloud Alibaba 消息队列 RabbitMQ 入门》 +* 《芋道 Spring Cloud Alibaba 消息队列 Kafka 入门》 + ## 链路追踪 * 《芋道 Spring Cloud 链路追踪 Sleuth 入门》 diff --git a/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/pom.xml b/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/pom.xml new file mode 100644 index 00000000..18356762 --- /dev/null +++ b/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/pom.xml @@ -0,0 +1,66 @@ + + + + labx-06 + cn.iocoder.springboot.labs + 1.0-SNAPSHOT + + 4.0.0 + + labx-06-sca-stream-rocketmq-consumer-demo + + + 1.8 + 1.8 + 2.2.4.RELEASE + Hoxton.SR1 + 2.2.0.RELEASE + + + + + + + org.springframework.boot + spring-boot-starter-parent + ${spring.boot.version} + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + ${spring.cloud.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring.cloud.alibaba.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + com.alibaba.cloud + spring-cloud-starter-stream-rocketmq + + + + diff --git a/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/ConsumerApplication.java b/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/ConsumerApplication.java new file mode 100644 index 00000000..347c2a79 --- /dev/null +++ b/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/ConsumerApplication.java @@ -0,0 +1,16 @@ +package cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.consumerdemo; + +import cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.consumerdemo.listener.MySink; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.stream.annotation.EnableBinding; + +@SpringBootApplication +@EnableBinding(MySink.class) +public class ConsumerApplication { + + public static void main(String[] args) { + SpringApplication.run(ConsumerApplication.class, args); + } + +} diff --git a/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/listener/Demo01Consumer.java b/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/listener/Demo01Consumer.java new file mode 100644 index 00000000..f70019e9 --- /dev/null +++ b/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/listener/Demo01Consumer.java @@ -0,0 +1,20 @@ +package cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.consumerdemo.listener; + +import cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.consumerdemo.message.Demo01Message; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.stream.annotation.StreamListener; +import org.springframework.messaging.handler.annotation.Payload; +import org.springframework.stereotype.Component; + +@Component +public class Demo01Consumer { + + private Logger logger = LoggerFactory.getLogger(getClass()); + + @StreamListener(MySink.DEMO01_INPUT) + public void onMessage(@Payload Demo01Message message) { + logger.info("[onMessage][线程编号:{} 消息内容:{}]", Thread.currentThread().getId(), message); + } + +} diff --git a/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/listener/MySink.java b/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/listener/MySink.java new file mode 100644 index 00000000..27fb0977 --- /dev/null +++ b/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/listener/MySink.java @@ -0,0 +1,13 @@ +package cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.consumerdemo.listener; + +import org.springframework.cloud.stream.annotation.Input; +import org.springframework.messaging.SubscribableChannel; + +public interface MySink { + + String DEMO01_INPUT = "demo01-input"; + + @Input(DEMO01_INPUT) + SubscribableChannel demo01Input(); + +} diff --git a/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/message/Demo01Message.java b/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/message/Demo01Message.java new file mode 100644 index 00000000..7ac46283 --- /dev/null +++ b/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/consumerdemo/message/Demo01Message.java @@ -0,0 +1,29 @@ +package cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.consumerdemo.message; + +/** + * 示例 01 的 Message 消息 + */ +public class Demo01Message { + + /** + * 编号 + */ + private Integer id; + + public Demo01Message setId(Integer id) { + this.id = id; + return this; + } + + public Integer getId() { + return id; + } + + @Override + public String toString() { + return "Demo01Message{" + + "id=" + id + + '}'; + } + +} diff --git a/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/resources/application.yml b/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/resources/application.yml new file mode 100644 index 00000000..e5b164f4 --- /dev/null +++ b/labx-06/labx-06-sca-stream-rocketmq-consumer-demo/src/main/resources/application.yml @@ -0,0 +1,26 @@ +spring: + application: + name: demo-consumer-application + cloud: + # Spring Cloud Stream 配置项,对应 BindingServiceProperties 类 + stream: + # Binding 配置项,对应 BindingProperties Map + bindings: + demo01-input: + destination: DEMO-TOPIC-01 # 目的地。这里使用 RocketMQ Topic + content-type: application/json # 内容格式。这里使用 JSON + group: demo01-consumer-group-DEMO-TOPIC-01 # 消费者分组 + # Spring Cloud Stream RocketMQ 配置项 + rocketmq: + # RocketMQ Binder 配置项,对应 RocketMQBinderConfigurationProperties 类 + binder: + name-server: 127.0.0.1:9876 # RocketMQ Namesrv 地址 + # RocketMQ 自定义 binding 配置项,对应 RocketMQBindingProperties Map + bindings: + demo01-input: + # RocketMQ Consumer 配置项,对应 RocketMQConsumerProperties 类 + consumer: + enabled: true # 是否开启消费,默认为 true + +server: + port: 28080 diff --git a/labx-06/labx-06-sca-stream-rocketmq-producer-demo/pom.xml b/labx-06/labx-06-sca-stream-rocketmq-producer-demo/pom.xml new file mode 100644 index 00000000..8e06d684 --- /dev/null +++ b/labx-06/labx-06-sca-stream-rocketmq-producer-demo/pom.xml @@ -0,0 +1,66 @@ + + + + labx-06 + cn.iocoder.springboot.labs + 1.0-SNAPSHOT + + 4.0.0 + + labx-06-sca-stream-rocketmq-producer-demo + + + 1.8 + 1.8 + 2.2.4.RELEASE + Hoxton.SR1 + 2.2.0.RELEASE + + + + + + + org.springframework.boot + spring-boot-starter-parent + ${spring.boot.version} + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + ${spring.cloud.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring.cloud.alibaba.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + com.alibaba.cloud + spring-cloud-starter-stream-rocketmq + + + + diff --git a/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/ProducerApplication.java b/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/ProducerApplication.java new file mode 100644 index 00000000..a811da6a --- /dev/null +++ b/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/ProducerApplication.java @@ -0,0 +1,16 @@ +package cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.producerdemo; + +import cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.producerdemo.message.MySource; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.stream.annotation.EnableBinding; + +@SpringBootApplication +@EnableBinding(MySource.class) +public class ProducerApplication { + + public static void main(String[] args) { + SpringApplication.run(ProducerApplication.class, args); + } + +} diff --git a/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/controller/Demo01Controller.java b/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/controller/Demo01Controller.java new file mode 100644 index 00000000..5b8c47f6 --- /dev/null +++ b/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/controller/Demo01Controller.java @@ -0,0 +1,33 @@ +package cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.producerdemo.controller; + +import cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.producerdemo.message.Demo01Message; +import cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.producerdemo.message.MySource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.Message; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Random; + +@RestController +@RequestMapping("/demo01") +public class Demo01Controller { + + @Autowired + private MySource mySource; + + @GetMapping("/send") + public boolean send() { + // 创建 Message + Demo01Message message = new Demo01Message() + .setId(new Random().nextInt()); + // 创建 + Message springMessage = MessageBuilder.withPayload(message) + .build(); + // 发送消息 + return mySource.demo01Output().send(springMessage); + } + +} diff --git a/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/message/Demo01Message.java b/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/message/Demo01Message.java new file mode 100644 index 00000000..c7d1e4cd --- /dev/null +++ b/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/message/Demo01Message.java @@ -0,0 +1,29 @@ +package cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.producerdemo.message; + +/** + * 示例 01 的 Message 消息 + */ +public class Demo01Message { + + /** + * 编号 + */ + private Integer id; + + public Demo01Message setId(Integer id) { + this.id = id; + return this; + } + + public Integer getId() { + return id; + } + + @Override + public String toString() { + return "Demo01Message{" + + "id=" + id + + '}'; + } + +} diff --git a/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/message/MySource.java b/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/message/MySource.java new file mode 100644 index 00000000..33079a2a --- /dev/null +++ b/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/java/cn/iocoder/springcloudalibaba/labx6/rocketmqdemo/producerdemo/message/MySource.java @@ -0,0 +1,11 @@ +package cn.iocoder.springcloudalibaba.labx6.rocketmqdemo.producerdemo.message; + +import org.springframework.cloud.stream.annotation.Output; +import org.springframework.messaging.MessageChannel; + +public interface MySource { + + @Output("demo01-output") + MessageChannel demo01Output(); + +} diff --git a/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/resources/application.yml b/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/resources/application.yml new file mode 100644 index 00000000..a2afb48c --- /dev/null +++ b/labx-06/labx-06-sca-stream-rocketmq-producer-demo/src/main/resources/application.yml @@ -0,0 +1,25 @@ +spring: + application: + name: demo-producer-application + cloud: + # Spring Cloud Stream 配置项,对应 BindingServiceProperties 类 + stream: + # Binding 配置项,对应 BindingProperties Map + bindings: + demo01-output: + destination: DEMO-TOPIC-01 # 目的地。这里使用 RocketMQ Topic + content-type: application/json # 内容格式。这里使用 JSON + # Spring Cloud Stream RocketMQ 配置项 + rocketmq: + # RocketMQ Binder 配置项,对应 RocketMQBinderConfigurationProperties 类 + binder: + name-server: 127.0.0.1:9876 # RocketMQ Namesrv 地址 + # RocketMQ 自定义 binding 配置项,对应 RocketMQBindingProperties Map + bindings: + demo01-output: + # # RocketMQ Producer 配置项,对应 RocketMQProducerProperties 类 + producer: + group: test # 生产者分组 + +server: + port: 18080 diff --git a/labx-06/pom.xml b/labx-06/pom.xml new file mode 100644 index 00000000..cc1e2d9e --- /dev/null +++ b/labx-06/pom.xml @@ -0,0 +1,20 @@ + + + + labs-parent + cn.iocoder.springboot.labs + 1.0-SNAPSHOT + + 4.0.0 + + labx-06 + pom + + labx-06-sca-stream-rocketmq-consumer-demo + labx-06-sca-stream-rocketmq-producer-demo + + + + diff --git a/pom.xml b/pom.xml index b13ecf0d..15819b92 100644 --- a/pom.xml +++ b/pom.xml @@ -63,6 +63,7 @@ labx-03 labx-04 labx-05 + labx-06