From 105486b68260964576ac2f0fac9b6b5e8ad59e52 Mon Sep 17 00:00:00 2001 From: qyx <565485304@qq.com> Date: Sun, 24 Jul 2022 14:34:10 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD](master):?= =?UTF-8?q?=20springboot-rocketmq=E6=95=B4=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 整合Springboot与RocketMQ相关的代码 --- bigdata/kafka/springboot-kafka/pom.xml | 6 - .../resources/http/rocket-mq-controller.http | 15 -- mq/rocketmq/springboot-rocketmq/pom.xml | 87 ++++++++++++ .../baiye/SpringBootRocketMQApplication.java | 12 ++ .../baiye/controller/RocketMQController.java | 57 ++++++++ .../rocket/RocketMQConsumerMessageExt.java | 36 +++++ .../baiye/rocket/RocketMQConsumerObject.java | 33 +++++ .../baiye/rocket/RocketMQConsumerString.java | 31 +++++ .../rocket/RocketMQConsumerTagString.java | 33 +++++ .../com/baiye/rocket/RocketMQProducer.java | 130 ++++++++++++++++++ .../src/main/java/com/baiye/vo/QMessage.java | 21 +++ .../src/main/resources/application-dev.yml | 50 +++++++ .../src/main/resources/bootstrap.yml | 16 +++ .../resources/http/rocket-mq-controller.http | 15 ++ .../resources/http/transactional-lose.http | 7 + pom.xml | 1 + 16 files changed, 529 insertions(+), 21 deletions(-) delete mode 100755 bigdata/kafka/springboot-kafka/src/main/resources/http/rocket-mq-controller.http create mode 100644 mq/rocketmq/springboot-rocketmq/pom.xml create mode 100644 mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/SpringBootRocketMQApplication.java create mode 100644 mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/controller/RocketMQController.java create mode 100644 mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerMessageExt.java create mode 100644 mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerObject.java create mode 100644 mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerString.java create mode 100644 mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerTagString.java create mode 100644 mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQProducer.java create mode 100644 mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/vo/QMessage.java create mode 100755 mq/rocketmq/springboot-rocketmq/src/main/resources/application-dev.yml create mode 100755 mq/rocketmq/springboot-rocketmq/src/main/resources/bootstrap.yml create mode 100755 mq/rocketmq/springboot-rocketmq/src/main/resources/http/rocket-mq-controller.http create mode 100755 mq/rocketmq/springboot-rocketmq/src/main/resources/http/transactional-lose.http diff --git a/bigdata/kafka/springboot-kafka/pom.xml b/bigdata/kafka/springboot-kafka/pom.xml index 4b249ef..5ef4cc3 100644 --- a/bigdata/kafka/springboot-kafka/pom.xml +++ b/bigdata/kafka/springboot-kafka/pom.xml @@ -50,12 +50,6 @@ spring-kafka 2.5.0.RELEASE - - - org.apache.rocketmq - rocketmq-spring-boot-starter - 2.1.0 - org.apache.commons commons-lang3 diff --git a/bigdata/kafka/springboot-kafka/src/main/resources/http/rocket-mq-controller.http b/bigdata/kafka/springboot-kafka/src/main/resources/http/rocket-mq-controller.http deleted file mode 100755 index 3fd0c0b..0000000 --- a/bigdata/kafka/springboot-kafka/src/main/resources/http/rocket-mq-controller.http +++ /dev/null @@ -1,15 +0,0 @@ -### message-with-value -GET http://127.0.0.1:8001/imooc-study-ecommerce-dev/rocket-mq/message-with-value -Content-Type: application/json - -### message-with-key -GET http://127.0.0.1:8001/imooc-study-ecommerce-dev/rocket-mq/message-with-key -Content-Type: application/json - -### message-with-tag -GET http://127.0.0.1:8001/imooc-study-ecommerce-dev/rocket-mq/message-with-tag -Content-Type: application/json - -### message-with-all -GET http://127.0.0.1:8001/imooc-study-ecommerce-dev/rocket-mq/message-with-all -Content-Type: application/json diff --git a/mq/rocketmq/springboot-rocketmq/pom.xml b/mq/rocketmq/springboot-rocketmq/pom.xml new file mode 100644 index 0000000..e419018 --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/pom.xml @@ -0,0 +1,87 @@ + + + + dev-protocol + org.example + 1.0-SNAPSHOT + ../../../pom.xml + + 4.0.0 + + springboot-rocketmq + + + 8 + 8 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.projectlombok + lombok + true + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.cloud + spring-cloud-context + 2.2.6.RELEASE + + + + org.apache.rocketmq + rocketmq-spring-boot-starter + 2.1.0 + + + org.apache.commons + commons-lang3 + 3.11 + + + + mysql + mysql-connector-java + 8.0.19 + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + + ${artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + + \ No newline at end of file diff --git a/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/SpringBootRocketMQApplication.java b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/SpringBootRocketMQApplication.java new file mode 100644 index 0000000..0533e57 --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/SpringBootRocketMQApplication.java @@ -0,0 +1,12 @@ +package com.baiye; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringBootRocketMQApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringBootRocketMQApplication.class, args); + } +} diff --git a/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/controller/RocketMQController.java b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/controller/RocketMQController.java new file mode 100644 index 0000000..6a4f50c --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/controller/RocketMQController.java @@ -0,0 +1,57 @@ +package com.baiye.controller; + +import com.alibaba.fastjson.JSON; +import com.baiye.rocket.RocketMQProducer; +import com.baiye.vo.QMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * rocketmq-controller + * + * @author q + * @date 2022/07/24 + */ +@Slf4j +@RestController +@RequestMapping("/rocket-mq") +public class RocketMQController { + + + /** + * 构建模拟的消息对象 + */ + public static final QMessage ROCKETMQMESSAGE = new QMessage( + 1, + "Q-Study-Rocket-Springboot-Message" + ); + + public final RocketMQProducer producer; + + public RocketMQController(RocketMQProducer producer) { + this.producer = producer; + } + + @GetMapping("/message-with-value") + public void sendMessageWithValue() { + producer.sendMessageWithValue(JSON.toJSONString(ROCKETMQMESSAGE)); + } + + @GetMapping("/message-with-key") + public void sendMessageWithKey() { + producer.sendMessageWithKey("q", JSON.toJSONString(ROCKETMQMESSAGE)); + } + + @GetMapping("/message-with-tag") + public void sendMessageWithTag() { + producer.sendMessageWithTag("q-tag", JSON.toJSONString(ROCKETMQMESSAGE)); + } + + @GetMapping("/message-with-all") + public void sendMessageWithAll(){ + producer.sendMessageWithAll("qq qa", "q-tag", JSON.toJSONString(ROCKETMQMESSAGE)); + } + +} diff --git a/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerMessageExt.java b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerMessageExt.java new file mode 100644 index 0000000..b321394 --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerMessageExt.java @@ -0,0 +1,36 @@ +package com.baiye.rocket; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.common.message.MessageExt; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.stereotype.Component; + +/** + * 对消息进行扩展的 Consumer + * + * MessageExt 是对 Message 原始信息的扩展, 包含元信息, 所以有 key + * + * @author q + * @date 2022/07/24 + */ +@Slf4j +@Component +@RocketMQMessageListener( + // 与生产端的 topic 保持一致 + topic = "study-springboot-rocketmq", + consumerGroup = "springboot-rocketmq-message-ext-group" +) +public class RocketMQConsumerMessageExt implements RocketMQListener { + + @Override + public void onMessage(MessageExt messageExt) { + String value = new String(messageExt.getBody()); + log.info("consumer message in RocketMQConsumerMessageExt: [{}], [{}]", messageExt.getKeys(), value); + // 打印 messageExt 全部信息进行了解所有元信息 + // todo 获取元信息比较慢一点, 上线的时候没必要开启 + // FIXME: 这里使用的是 fast-json + log.info("MessageExt: [{}]", JSON.toJSONString(messageExt)); + } +} diff --git a/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerObject.java b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerObject.java new file mode 100644 index 0000000..58a1e8e --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerObject.java @@ -0,0 +1,33 @@ +package com.baiye.rocket; + + +import com.alibaba.fastjson.JSON; +import com.baiye.vo.QMessage; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.stereotype.Component; + +/** + * RocketMQ 消费者, 指定消费带有 tag 的消息, 且消费的是 Java Pojo + * + * @author q + * @date 2022/07/24 + */ +@Slf4j +@Component +@RocketMQMessageListener( + // 与生产端的 topic 保持一致 + topic = "study-springboot-rocketmq", + consumerGroup = "springboot-rocketmq-tag-object-group", + // 指定匹配 tag - 匹配到 tag 才会被消费,相当于代替 if-else 的逻辑 + selectorExpression = "q-tag" +) +public class RocketMQConsumerObject implements RocketMQListener { + @Override + public void onMessage(QMessage message) { + log.info("consumer message in RocketMQConsumerObject: [{}]", JSON.toJSONString(message)); + + // todo 做业务逻辑 + } +} diff --git a/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerString.java b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerString.java new file mode 100644 index 0000000..15929da --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerString.java @@ -0,0 +1,31 @@ +package com.baiye.rocket; + +import com.alibaba.fastjson.JSON; +import com.baiye.vo.QMessage; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.stereotype.Component; + +/** + * 消费 string 类型的消息 + * + * @author q + * @date 2022/07/24 + */ +@Slf4j +@Component +@RocketMQMessageListener( + // 与生产端的 topic 保持一致 + topic = "study-springboot-rocketmq", + consumerGroup = "springboot-rocketmq-string-group" +) +public class RocketMQConsumerString implements RocketMQListener { + + @Override + public void onMessage(String message) { + QMessage qMessage = JSON.parseObject(message, QMessage.class); + // FIXME: 这里使用的是 fast-json + log.info("consumer message in RocketMQConsumerString: [{}]", JSON.toJSONString(qMessage)); + } +} diff --git a/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerTagString.java b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerTagString.java new file mode 100644 index 0000000..7f58171 --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQConsumerTagString.java @@ -0,0 +1,33 @@ +package com.baiye.rocket; + +import com.alibaba.fastjson.JSON; +import com.baiye.vo.QMessage; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.stereotype.Component; + +/** + * RocketMQ 消费者, 指定了消费者带有 tag 的消息 + * + * @author q + * @date 2022/07/24 + */ +@Slf4j +@Component +@RocketMQMessageListener( + // 与生产端的 topic 保持一致 + topic = "study-springboot-rocketmq", + consumerGroup = "springboot-rocketmq-tag-group", + // 指定匹配 tag - 匹配到 tag 才会被消费,相当于代替 if-else 的逻辑 + selectorExpression = "q-tag" +) +public class RocketMQConsumerTagString implements RocketMQListener { + + @Override + public void onMessage(String message) { + QMessage qMessage = JSON.parseObject(message, QMessage.class); + // FIXME: 这里使用的是 fast-json + log.info("consumer message in RocketMQConsumerTagString: [{}]", JSON.toJSONString(qMessage)); + } +} diff --git a/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQProducer.java b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQProducer.java new file mode 100644 index 0000000..dcb686e --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/rocket/RocketMQProducer.java @@ -0,0 +1,130 @@ +package com.baiye.rocket; + +import com.alibaba.fastjson.JSON; +import com.baiye.vo.QMessage; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.producer.SendCallback; +import org.apache.rocketmq.client.producer.SendResult; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.apache.rocketmq.spring.support.RocketMQHeaders; +import org.springframework.messaging.Message; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.stereotype.Component; + +/** + * RocketMQ 消息生产者 + * + * 现实场景中: 基本都是采用同步的方式进行发送消息的 + * + * @author q + * @date 2022/07/24 + */ +@Slf4j +@Component +public class RocketMQProducer { + + /** + * 类似 Kafka 中的 topic, 默认的读写队列都是 4 个 + */ + public static final String TOPIC = "study-springboot-rocketmq"; + + /** + * RocketMQ 客户端 + */ + public final RocketMQTemplate rocketMQTemplate; + + public RocketMQProducer(RocketMQTemplate rocketMQTemplate) { + this.rocketMQTemplate = rocketMQTemplate; + } + + /** + * 使用同步的方式发送消息, 不指定 kay 和 tag + * + * @param value 消息体 + */ + public void sendMessageWithValue(String value) { + // 发送方式1: 随机选择一个 Topic 的 Message Queue 发送消息 + SendResult sendResult = rocketMQTemplate.syncSend(TOPIC, value); + // FIXME: 这里使用的是 fast-json + log.info("sendMessageWithValue result : [{}]", JSON.toJSONString(sendResult)); + + // 发送方式2: 指定 sharding-key 分区[hashKey], 保证同一类型的消息顺序的发送和消费, 既保证的高并发的性能, 又保证了业务的连贯性 + SendResult sendResultOrderly = rocketMQTemplate.syncSendOrderly(TOPIC, value, "Q-shard"); + // FIXME: 这里使用的是 fast-json + log.info("sendMessageWithValue orderly result : [{}]", JSON.toJSONString(sendResultOrderly)); + } + + /** + * 使用异步的方式, 指定key, 方便对消息进行提取 + * + * @param key 键 + * @param value 消息体 + */ + public void sendMessageWithKey(String key, String value) { + + // 是基于 Spring Messaging 做的, 注意这里的 Message 对象选择 + Message message = MessageBuilder + .withPayload(value) + // 这里的 key 是索引键的含义 多个是时候用空格进行间隔,例如: "a b" + .setHeader(RocketMQHeaders.KEYS, key) + .build(); + // 异步发送消息, 并设定回调 + rocketMQTemplate.asyncSend(TOPIC, message, new SendCallback() { + @Override + public void onSuccess(SendResult sendResult) { + // FIXME: 这里使用的是 fast-json + log.info("sendMessageWithKey success result: [{}]", JSON.toJSONString(sendResult)); + } + + @Override + public void onException(Throwable e) { + log.error("sendMessageWithKey failure: [{}]", e.getMessage(), e); + } + }); + } + + + /** + * 使用同步的方式发送消息, 带有tag, 且发送的是 Java Pojo - 这个场景不常用 + * @param tag 标识 + * @param value 价值 + */ + public void sendMessageWithTag(String tag, String value) { + // 对象反序列化 + QMessage qMessage = JSON.parseObject(value, QMessage.class); + + // tag 含义: 消费者组订阅同一个topic, 不同的tag可以对消息进行隔离, 但是要保证同一个消费者组要保持定义的tag是一样的 + SendResult sendResult = rocketMQTemplate.syncSend( + String.format("%s:%s", TOPIC, tag), + qMessage + ); + + log.info("sendMessageWithTag result: [{}]", JSON.toJSONString(sendResult)); + } + + + /** + * 使用同步的方式发送消息, 带有 key 和 tag + * + * @param key 键 + * @param tag 标识 + * @param value 消息体 + */ + public void sendMessageWithAll(String key, String tag, String value) { + + // 构建消息对象 + Message message = MessageBuilder + .withPayload(value) + .setHeader(RocketMQHeaders.KEYS, key) + .build(); + + // 同步发送 + SendResult sendResult = rocketMQTemplate.syncSend( + String.format("%s:%s", TOPIC, tag), + message + ); + + log.info("sendMessageWithAll result: [{}]", JSON.toJSONString(sendResult)); + } + +} diff --git a/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/vo/QMessage.java b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/vo/QMessage.java new file mode 100644 index 0000000..1834637 --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/src/main/java/com/baiye/vo/QMessage.java @@ -0,0 +1,21 @@ +package com.baiye.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 通过kafka 传递的消息对象 + * + * @author q + * @date 2022/07/23 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class QMessage { + private Integer id; + + private String productName; + +} diff --git a/mq/rocketmq/springboot-rocketmq/src/main/resources/application-dev.yml b/mq/rocketmq/springboot-rocketmq/src/main/resources/application-dev.yml new file mode 100755 index 0000000..4150788 --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/src/main/resources/application-dev.yml @@ -0,0 +1,50 @@ +server: + port: 8001 + servlet: + context-path: /springboot-rocketmq-dev + +# RocketMQ 的配置, 这是最低配置 +rocketmq: + name-server: 127.0.0.1:9876 + producer: + # 发送同一类消息的设置为同一个 group, 保证唯一 + group: study-ecommerce +#spring: +# # SpringBoot 集成 Kafka 的配置, 最低配置只需要配置 spring.kafka.bootstrap-servers +# kafka: +# bootstrap-servers: 127.0.0.1:9092 +# jpa: +# show-sql: true +# hibernate: +# ddl-auto: none +# properties: +# hibernate.show_sql: true +# hibernate.format_sql: true +# open-in-view: false +# datasource: +# # 数据源 +# url: jdbc:mysql://127.0.0.1:3306/q_springboot_kafka?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false +# username: root +# password: root +# type: com.zaxxer.hikari.HikariDataSource +# driver-class-name: com.mysql.cj.jdbc.Driver +# # 连接池 +# hikari: +# maximum-pool-size: 8 +# minimum-idle: 4 +# idle-timeout: 30000 +# connection-timeout: 30000 +# max-lifetime: 45000 +# auto-commit: true +# pool-name: StudyEcommerce +# consumer: + # 如果 Consumer 没有指定 group-id, 则使用配置文件中配置的; 如果配置文件中也没有定义, 则由框架随机生成 +# group-id: imooc-study-ecommerce +# auto-offset-reset: latest +# key-deserializer: org.apache.kafka.common.serialization.StringDeserializer +# value-deserializer: org.apache.kafka.common.serialization.StringDeserializer +# producer: +# key-serializer: org.apache.kafka.common.serialization.StringSerializer +# value-serializer: org.apache.kafka.common.serialization.StringSerializer + + diff --git a/mq/rocketmq/springboot-rocketmq/src/main/resources/bootstrap.yml b/mq/rocketmq/springboot-rocketmq/src/main/resources/bootstrap.yml new file mode 100755 index 0000000..a424467 --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/src/main/resources/bootstrap.yml @@ -0,0 +1,16 @@ +spring: + profiles: + # prod, dev + active: dev + application: + name: study-ecommerce + +# 暴露端点 +management: + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always diff --git a/mq/rocketmq/springboot-rocketmq/src/main/resources/http/rocket-mq-controller.http b/mq/rocketmq/springboot-rocketmq/src/main/resources/http/rocket-mq-controller.http new file mode 100755 index 0000000..7b1b256 --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/src/main/resources/http/rocket-mq-controller.http @@ -0,0 +1,15 @@ +### message-with-value +GET http://127.0.0.1:8001/springboot-rocketmq-dev/rocket-mq/message-with-value +Content-Type: application/json + +### message-with-key +GET http://127.0.0.1:8001/springboot-rocketmq-dev/rocket-mq/message-with-key +Content-Type: application/json + +### message-with-tag +GET http://127.0.0.1:8001/springboot-rocketmq-dev/rocket-mq/message-with-tag +Content-Type: application/json + +### message-with-all +GET http://127.0.0.1:8001/springboot-rocketmq-dev/rocket-mq/message-with-all +Content-Type: application/json diff --git a/mq/rocketmq/springboot-rocketmq/src/main/resources/http/transactional-lose.http b/mq/rocketmq/springboot-rocketmq/src/main/resources/http/transactional-lose.http new file mode 100755 index 0000000..de7d991 --- /dev/null +++ b/mq/rocketmq/springboot-rocketmq/src/main/resources/http/transactional-lose.http @@ -0,0 +1,7 @@ +### wrong-rollback-for +GET http://127.0.0.1:8001/imooc-study-ecommerce-dev/transactional-lose/wrong-rollback-for +Content-Type: application/json + +### wrong-inner-call +GET http://127.0.0.1:8001/imooc-study-ecommerce-dev/transactional-lose/wrong-inner-call +Content-Type: application/json diff --git a/pom.xml b/pom.xml index 00c45ea..1874cb2 100644 --- a/pom.xml +++ b/pom.xml @@ -35,6 +35,7 @@ database/shardingsphere/dev-protocol-shardingsphere-base mq/rocketmq/rocket-api bigdata/kafka/springboot-kafka + mq/rocketmq/springboot-rocketmq