From ab5c1dc6d66439de6fad0b06e95cf484089d6a8c Mon Sep 17 00:00:00 2001 From: zhangdaiscott <zhangdaiscott@163.com> Date: Sat, 26 Feb 2022 17:41:30 +0800 Subject: [PATCH] 拆分独立微服务测试模块jeecg-cloud-test,提供更多测试示例: 分布式事务、分库分表、mq、xxljob等 --- jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/pom.xml | 25 ++++++++++++++++++------- jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/JeecgSystemCloudApplication.java | 2 +- jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/constant/CloudConstant.java | 30 ------------------------------ jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/ebus/DemoBusEvent.java | 27 --------------------------- jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/controller/JeecgTestFeignController.java | 56 -------------------------------------------------------- jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/JeecgTestClient.java | 20 -------------------- jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/JeecgTestClientDyn.java | 14 -------------- jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/fallback/JeecgTestClientFallback.java | 17 ----------------- jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/lock/DemoLockTest.java | 58 ---------------------------------------------------------- jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver1.java | 36 ------------------------------------ jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver2.java | 36 ------------------------------------ jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver3.java | 35 ----------------------------------- jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloTimeReceiver.java | 32 -------------------------------- jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/xxljob/DemoJobHandler.java | 235 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/pom.xml | 44 ++++++++++++++++++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/constant/CloudConstant.java | 29 +++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClient.java | 22 ++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClientDyn.java | 14 ++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/controller/JeecgTestFeignController.java | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/factory/JeecgTestClientFactory.java | 23 +++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/fallback/JeecgTestFallback.java | 22 ++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/lock/DemoLockTest.java | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/DemoJobHandler.java | 234 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/XxclJobTest.java | 40 ++++++++++++++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/pom.xml | 22 ++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/constant/CloudConstant.java | 26 ++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/controller/JeecgMqTestController.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/event/DemoBusEvent.java | 28 ++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver1.java | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver2.java | 36 ++++++++++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver3.java | 34 ++++++++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloTimeReceiver.java | 34 ++++++++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/controller/JeecgShardingDemoController.java | 25 +++++++++++++++++++++---- jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding.yml | 8 +++++--- jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding2.yml | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/pom.xml | 2 ++ 36 files changed, 962 insertions(+), 611 deletions(-) delete mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/constant/CloudConstant.java delete mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/ebus/DemoBusEvent.java delete mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/controller/JeecgTestFeignController.java delete mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/JeecgTestClient.java delete mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/JeecgTestClientDyn.java delete mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/fallback/JeecgTestClientFallback.java delete mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/lock/DemoLockTest.java delete mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver1.java delete mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver2.java delete mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver3.java delete mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloTimeReceiver.java delete mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/xxljob/DemoJobHandler.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/pom.xml create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/constant/CloudConstant.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClient.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClientDyn.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/controller/JeecgTestFeignController.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/factory/JeecgTestClientFactory.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/fallback/JeecgTestFallback.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/lock/DemoLockTest.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/DemoJobHandler.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/XxclJobTest.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/pom.xml create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/constant/CloudConstant.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/controller/JeecgMqTestController.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/event/DemoBusEvent.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver1.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver2.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver3.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloTimeReceiver.java create mode 100644 jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding2.yml diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/pom.xml b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/pom.xml index dbe426b..f23cd82 100644 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/pom.xml +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/pom.xml @@ -30,21 +30,32 @@ <artifactId>jeecg-boot-module-system</artifactId> </dependency> + <!-- 测试模块依赖 --> <!--rabbitmq消息队列 <dependency> <groupId>org.jeecgframework.boot</groupId> - <artifactId>jeecg-boot-starter-rabbitmq</artifactId> + <artifactId>jeecg-cloud-test-rabbitmq</artifactId> + <version>3.1.0</version> </dependency>--> - <!--xxl-job定时任务--> + <!--XxlJob、分布式锁 <dependency> <groupId>org.jeecgframework.boot</groupId> - <artifactId>jeecg-boot-starter-job</artifactId> - </dependency> - <!-- 分布式锁依赖 --> + <artifactId>jeecg-cloud-test-more</artifactId> + <version>3.1.0</version> + </dependency>--> + <!-- 分布式事务 <dependency> <groupId>org.jeecgframework.boot</groupId> - <artifactId>jeecg-boot-starter-lock</artifactId> - </dependency> + <artifactId>jeecg-cloud-test-seata</artifactId> + <version>3.1.0</version> + </dependency>--> + <!-- 分库分表 + <dependency> + <groupId>org.jeecgframework.boot</groupId> + <artifactId>jeecg-cloud-test-shardingsphere</artifactId> + <version>3.1.0</version> + </dependency> --> + <!-- 测试模块依赖 --> </dependencies> diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/JeecgSystemCloudApplication.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/JeecgSystemCloudApplication.java index 9aab6bb..2c9ef96 100644 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/JeecgSystemCloudApplication.java +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/JeecgSystemCloudApplication.java @@ -22,7 +22,7 @@ import java.net.UnknownHostException; @SpringBootApplication @EnableFeignClients(basePackages = {"org.jeecg"}) @EnableScheduling -public class JeecgSystemCloudApplication extends SpringBootServletInitializer { +public class JeecgSystemCloudApplication extends SpringBootServletInitializer{ @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/constant/CloudConstant.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/constant/CloudConstant.java deleted file mode 100644 index cfdd282..0000000 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/constant/CloudConstant.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.jeecg.modules.cloud.constant; - -/** - * 微服务单元测试常量定义 - */ -public interface CloudConstant { - - /** - * 微服务名【对应模块jeecg-boot-module-demo】 - */ - public final static String SERVER_NAME_JEECGDEMO = "jeecg-demo"; - - /** - * MQ测试队列名字 - */ - public final static String MQ_JEECG_PLACE_ORDER = "jeecg_place_order"; - public final static String MQ_JEECG_PLACE_ORDER_TIME = "jeecg_place_order_time"; - - /** - * MQ测试消息总线 - */ - public final static String MQ_DEMO_BUS_EVENT = "demoBusEvent"; - - /** - * 分布式锁lock key - */ - public final static String REDISSON_DEMO_LOCK_KEY1 = "demoLockKey1"; - public final static String REDISSON_DEMO_LOCK_KEY2 = "demoLockKey2"; - -} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/ebus/DemoBusEvent.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/ebus/DemoBusEvent.java deleted file mode 100644 index ece0f42..0000000 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/ebus/DemoBusEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -//package org.jeecg.modules.cloud.ebus; -// -//import cn.hutool.core.util.ObjectUtil; -//import lombok.extern.slf4j.Slf4j; -//import org.jeecg.boot.starter.rabbitmq.event.EventObj; -//import org.jeecg.boot.starter.rabbitmq.event.JeecgBusEventHandler; -//import org.jeecg.common.base.BaseMap; -//import org.jeecg.modules.cloud.constant.CloudConstant; -//import org.springframework.stereotype.Component; -// -///** -// * 消息处理器【发布订阅】 -// */ -//@Slf4j -//@Component(CloudConstant.MQ_DEMO_BUS_EVENT) -//public class DemoBusEvent implements JeecgBusEventHandler { -// -// -// @Override -// public void onMessage(EventObj obj) { -// if (ObjectUtil.isNotEmpty(obj)) { -// BaseMap baseMap = obj.getBaseMap(); -// String orderId = baseMap.get("orderId"); -// log.info("业务处理----订单ID:" + orderId); -// } -// } -//} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/controller/JeecgTestFeignController.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/controller/JeecgTestFeignController.java deleted file mode 100644 index 8713efb..0000000 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/controller/JeecgTestFeignController.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.jeecg.modules.cloud.feign.controller; - - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.jeecg.common.api.vo.Result; -import org.jeecg.modules.cloud.constant.CloudConstant; -import org.jeecg.modules.cloud.feign.feign.JeecgTestClient; -import org.jeecg.modules.cloud.feign.feign.JeecgTestClientDyn; -import org.jeecg.starter.cloud.feign.impl.JeecgFeignService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/sys/test") -@Api(tags = "【微服务】单元测试") -public class JeecgTestFeignController { - - @Autowired - private JeecgFeignService jeecgFeignService; - @Autowired - private JeecgTestClient jeecgTestClient; -// @Autowired -// private RabbitMqClient rabbitMqClient; - - @GetMapping("getMessage") - @ApiOperation(value = "测试feign", notes = "测试feign") - public Result<String> getMessage() { - return jeecgTestClient.getMessage("jeecg-boot"); - } - - @GetMapping("getMessage2") - @ApiOperation(value = "测试动态feign", notes = "测试动态feign") - public Result<String> getMessage2() { - JeecgTestClientDyn myClientDyn = jeecgFeignService.newInstance(JeecgTestClientDyn.class, CloudConstant.SERVER_NAME_JEECGDEMO); - return myClientDyn.getMessage("动态fegin——jeecg-boot2"); - } - -// @GetMapping(value = "/rabbitmq") -// @ApiOperation(value = "测试rabbitmq", notes = "测试rabbitmq") -// public Result<?> rabbitMqClientTest(HttpServletRequest req) { -// //rabbitmq消息队列测试 -// BaseMap map = new BaseMap(); -// map.put("orderId", RandomUtil.randomNumbers(10)); -// rabbitMqClient.sendMessage(CloudConstant.MQ_JEECG_PLACE_ORDER, map); -// rabbitMqClient.sendMessage(CloudConstant.MQ_JEECG_PLACE_ORDER_TIME, map,10); -// -// //rabbitmq消息总线测试 -// BaseMap params = new BaseMap(); -// params.put("orderId", "123456"); -// rabbitMqClient.publishEvent(CloudConstant.MQ_DEMO_BUS_EVENT, params); -// return Result.OK("MQ发送消息成功"); -// } -} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/JeecgTestClient.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/JeecgTestClient.java deleted file mode 100644 index 85d995c..0000000 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/JeecgTestClient.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.jeecg.modules.cloud.feign.feign; - -import org.jeecg.common.api.vo.Result; -import org.jeecg.modules.cloud.constant.CloudConstant; -import org.jeecg.modules.cloud.feign.feign.fallback.JeecgTestClientFallback; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.stereotype.Component; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; - -/** - * 常规feign接口定义 - */ -@FeignClient(value = CloudConstant.SERVER_NAME_JEECGDEMO, fallbackFactory = JeecgTestClientFallback.class) -@Component -public interface JeecgTestClient { - - @GetMapping(value = "/test/getMessage") - Result<String> getMessage(@RequestParam("name") String name); -} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/JeecgTestClientDyn.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/JeecgTestClientDyn.java deleted file mode 100644 index c4f646f..0000000 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/JeecgTestClientDyn.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.jeecg.modules.cloud.feign.feign; - -import org.jeecg.common.api.vo.Result; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; - -/** - * 动态feign接口定义 - */ -public interface JeecgTestClientDyn { - - @GetMapping(value = "/test/getMessage") - Result<String> getMessage(@RequestParam("name") String name); -} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/fallback/JeecgTestClientFallback.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/fallback/JeecgTestClientFallback.java deleted file mode 100644 index cc22023..0000000 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/fallback/JeecgTestClientFallback.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.jeecg.modules.cloud.feign.feign.fallback; - -import feign.hystrix.FallbackFactory; -import org.jeecg.modules.cloud.feign.feign.JeecgTestClient; -import org.springframework.stereotype.Component; - -/** - * @author qinfeng - */ -@Component -public class JeecgTestClientFallback implements FallbackFactory<JeecgTestClient> { - - @Override - public JeecgTestClient create(Throwable throwable) { - return null; - } -} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/lock/DemoLockTest.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/lock/DemoLockTest.java deleted file mode 100644 index 032d6ba..0000000 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/lock/DemoLockTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.jeecg.modules.cloud.lock; - -import lombok.extern.slf4j.Slf4j; -import org.jeecg.boot.starter.lock.client.RedissonLockClient; -import org.jeecg.modules.cloud.constant.CloudConstant; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * 分布式锁测试demo - */ -@Slf4j -@Component -public class DemoLockTest { - @Autowired - RedissonLockClient redissonLock; -// @Autowired -// RabbitMqClient rabbitMqClient; - -// /** -// * 测试分布式锁【注解方式】 -// */ -// @Scheduled(cron = "0/5 * * * * ?") -// @JLock(lockKey = CloudConstant.REDISSON_DEMO_LOCK_KEY1) -// public void execute() throws InterruptedException { -// log.info("执行execute任务开始,休眠三秒"); -// Thread.sleep(3000); -// System.out.println("=======================业务逻辑1============================="); -// Map map = new BaseMap(); -// map.put("orderId", "BJ0001"); -// rabbitMqClient.sendMessage(CloudConstant.MQ_JEECG_PLACE_ORDER, map); -// //延迟10秒发送 -// map.put("orderId", "NJ0002"); -// rabbitMqClient.sendMessage(CloudConstant.MQ_JEECG_PLACE_ORDER, map, 10000); -// log.info("execute任务结束,休眠三秒"); -// } - - public DemoLockTest() { - } - - /** - * 测试分布式锁【编码方式】 - */ - //@Scheduled(cron = "0/5 * * * * ?") - public void execute2() throws InterruptedException { - if (redissonLock.tryLock(CloudConstant.REDISSON_DEMO_LOCK_KEY2, -1, 6000)) { - log.info("执行任务execute2开始,休眠十秒"); - Thread.sleep(10000); - System.out.println("=======================业务逻辑2============================="); - log.info("定时execute2结束,休眠十秒"); - - redissonLock.unlock(CloudConstant.REDISSON_DEMO_LOCK_KEY2); - } else { - log.info("execute2获取锁失败"); - } - } - -} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver1.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver1.java deleted file mode 100644 index 6d769e5..0000000 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver1.java +++ /dev/null @@ -1,36 +0,0 @@ -//package org.jeecg.modules.cloud.rabbitmq; -// -//import com.rabbitmq.client.Channel; -//import lombok.extern.slf4j.Slf4j; -//import org.jeecg.boot.starter.rabbitmq.core.BaseRabbiMqHandler; -//import org.jeecg.boot.starter.rabbitmq.listenter.MqListener; -//import org.jeecg.common.annotation.RabbitComponent; -//import org.jeecg.common.base.BaseMap; -//import org.jeecg.modules.cloud.constant.CloudConstant; -//import org.springframework.amqp.rabbit.annotation.RabbitHandler; -//import org.springframework.amqp.rabbit.annotation.RabbitListener; -//import org.springframework.amqp.support.AmqpHeaders; -//import org.springframework.messaging.handler.annotation.Header; -// -///** -// * RabbitMq接受者1 -// * (@RabbitListener声明类上,一个类只能监听一个队列) -// */ -//@Slf4j -//@RabbitListener(queues = CloudConstant.MQ_JEECG_PLACE_ORDER) -//@RabbitComponent(value = "helloReceiver1") -//public class HelloReceiver1 extends BaseRabbiMqHandler<BaseMap> { -// -// @RabbitHandler -// public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { -// super.onMessage(baseMap, deliveryTag, channel, new MqListener<BaseMap>() { -// @Override -// public void handler(BaseMap map, Channel channel) { -// //业务处理 -// String orderId = map.get("orderId").toString(); -// log.info("MQ Receiver1,orderId : " + orderId); -// } -// }); -// } -// -//} \ No newline at end of file diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver2.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver2.java deleted file mode 100644 index 14fb9dd..0000000 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver2.java +++ /dev/null @@ -1,36 +0,0 @@ -//package org.jeecg.modules.cloud.rabbitmq; -// -//import com.rabbitmq.client.Channel; -//import lombok.extern.slf4j.Slf4j; -//import org.jeecg.boot.starter.rabbitmq.core.BaseRabbiMqHandler; -//import org.jeecg.boot.starter.rabbitmq.listenter.MqListener; -//import org.jeecg.common.annotation.RabbitComponent; -//import org.jeecg.common.base.BaseMap; -//import org.jeecg.modules.cloud.constant.CloudConstant; -//import org.springframework.amqp.rabbit.annotation.RabbitHandler; -//import org.springframework.amqp.rabbit.annotation.RabbitListener; -//import org.springframework.amqp.support.AmqpHeaders; -//import org.springframework.messaging.handler.annotation.Header; -// -///** -// * RabbitMq接受者2 -// * (@RabbitListener声明类上,一个类只能监听一个队列) -// */ -//@Slf4j -//@RabbitListener(queues = CloudConstant.MQ_JEECG_PLACE_ORDER) -//@RabbitComponent(value = "helloReceiver2") -//public class HelloReceiver2 extends BaseRabbiMqHandler<BaseMap> { -// -// @RabbitHandler -// public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { -// super.onMessage(baseMap, deliveryTag, channel, new MqListener<BaseMap>() { -// @Override -// public void handler(BaseMap map, Channel channel) { -// //业务处理 -// String orderId = map.get("orderId").toString(); -// log.info("MQ Receiver2,orderId : " + orderId); -// } -// }); -// } -// -//} \ No newline at end of file diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver3.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver3.java deleted file mode 100644 index 2be891c..0000000 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver3.java +++ /dev/null @@ -1,35 +0,0 @@ -//package org.jeecg.modules.cloud.rabbitmq; -// -//import com.rabbitmq.client.Channel; -//import lombok.extern.slf4j.Slf4j; -//import org.jeecg.boot.starter.rabbitmq.core.BaseRabbiMqHandler; -//import org.jeecg.boot.starter.rabbitmq.listenter.MqListener; -//import org.jeecg.common.annotation.RabbitComponent; -//import org.jeecg.common.base.BaseMap; -//import org.jeecg.modules.cloud.constant.CloudConstant; -//import org.springframework.amqp.rabbit.annotation.RabbitHandler; -//import org.springframework.amqp.rabbit.annotation.RabbitListener; -//import org.springframework.amqp.support.AmqpHeaders; -//import org.springframework.messaging.handler.annotation.Header; -// -///** -// * RabbitMq接受者3 -// * (@RabbitListener声明类方法上,一个类可以多监听多个队列) -// */ -//@Slf4j -//@RabbitComponent(value = "helloReceiver3") -//public class HelloReceiver3 extends BaseRabbiMqHandler<BaseMap> { -// -// @RabbitListener(queues = CloudConstant.MQ_JEECG_PLACE_ORDER) -// public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { -// super.onMessage(baseMap, deliveryTag, channel, new MqListener<BaseMap>() { -// @Override -// public void handler(BaseMap map, Channel channel) { -// //业务处理 -// String orderId = map.get("orderId").toString(); -// log.info("MQ Receiver3,orderId : " + orderId); -// } -// }); -// } -// -//} \ No newline at end of file diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloTimeReceiver.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloTimeReceiver.java deleted file mode 100644 index 38e9131..0000000 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloTimeReceiver.java +++ /dev/null @@ -1,32 +0,0 @@ -//package org.jeecg.modules.cloud.rabbitmq; -// -//import com.rabbitmq.client.Channel; -//import lombok.extern.slf4j.Slf4j; -//import org.jeecg.boot.starter.rabbitmq.core.BaseRabbiMqHandler; -//import org.jeecg.boot.starter.rabbitmq.listenter.MqListener; -//import org.jeecg.common.annotation.RabbitComponent; -//import org.jeecg.common.base.BaseMap; -//import org.jeecg.modules.cloud.constant.CloudConstant; -//import org.springframework.amqp.rabbit.annotation.RabbitHandler; -//import org.springframework.amqp.rabbit.annotation.RabbitListener; -//import org.springframework.amqp.support.AmqpHeaders; -//import org.springframework.messaging.handler.annotation.Header; -// -//@Slf4j -//@RabbitListener(queues = CloudConstant.MQ_JEECG_PLACE_ORDER_TIME) -//@RabbitComponent(value = "helloTimeReceiver") -//public class HelloTimeReceiver extends BaseRabbiMqHandler<BaseMap> { -// -// @RabbitHandler -// public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { -// super.onMessage(baseMap, deliveryTag, channel, new MqListener<BaseMap>() { -// @Override -// public void handler(BaseMap map, Channel channel) { -// //业务处理 -// String orderId = map.get("orderId").toString(); -// log.info("Time Receiver1,orderId : " + orderId); -// } -// }); -// } -// -//} \ No newline at end of file diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/xxljob/DemoJobHandler.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/xxljob/DemoJobHandler.java deleted file mode 100644 index 528dd52..0000000 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/xxljob/DemoJobHandler.java +++ /dev/null @@ -1,235 +0,0 @@ - -package org.jeecg.modules.cloud.xxljob;; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.handler.IJobHandler; -import com.xxl.job.core.handler.annotation.XxlJob; -import com.xxl.job.core.log.XxlJobLogger; -import com.xxl.job.core.util.ShardingUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.io.BufferedInputStream; -import java.io.BufferedReader; -import java.io.DataOutputStream; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.Arrays; - - -/** - * xxl-job定时任务测试 - */ -@Component -@Slf4j -public class DemoJobHandler { - - - /** - * 简单任务 - * - * @param params - * @return - */ - - @XxlJob(value = "demoJob") - public ReturnT<String> demoJobHandler(String params) { - log.info("我是定时任务,我执行了..............................."); - return ReturnT.SUCCESS; - } - - /** - * 2、分片广播任务 - */ - - @XxlJob("shardingJobHandler") - public ReturnT<String> shardingJobHandler(String param) throws Exception { - - // 分片参数 - ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo(); - XxlJobLogger.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardingVO.getIndex(), shardingVO.getTotal()); - - // 业务逻辑 - for (int i = 0; i < shardingVO.getTotal(); i++) { - if (i == shardingVO.getIndex()) { - XxlJobLogger.log("第 {} 片, 命中分片开始处理", i); - } else { - XxlJobLogger.log("第 {} 片, 忽略", i); - } - } - - return ReturnT.SUCCESS; - } - - - /** - * 3、命令行任务 - */ - - @XxlJob("commandJobHandler") - public ReturnT<String> commandJobHandler(String param) throws Exception { - String command = param; - int exitValue = -1; - - BufferedReader bufferedReader = null; - try { - // command process - Process process = Runtime.getRuntime().exec(command); - BufferedInputStream bufferedInputStream = new BufferedInputStream(process.getInputStream()); - bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream)); - - // command log - String line; - while ((line = bufferedReader.readLine()) != null) { - XxlJobLogger.log(line); - } - - // command exit - process.waitFor(); - exitValue = process.exitValue(); - } catch (Exception e) { - XxlJobLogger.log(e); - } finally { - if (bufferedReader != null) { - bufferedReader.close(); - } - } - - if (exitValue == 0) { - return IJobHandler.SUCCESS; - } else { - return new ReturnT<String>(IJobHandler.FAIL.getCode(), "command exit value(" + exitValue + ") is failed"); - } - } - - - /** - * 4、跨平台Http任务 - * 参数示例: - * "url: http://www.baidu.com\n" + - * "method: get\n" + - * "data: content\n"; - */ - - @XxlJob("httpJobHandler") - public ReturnT<String> httpJobHandler(String param) throws Exception { - - // param parse - if (param == null || param.trim().length() == 0) { - XxlJobLogger.log("param[" + param + "] invalid."); - return ReturnT.FAIL; - } - String[] httpParams = param.split("\n"); - String url = null; - String method = null; - String data = null; - for (String httpParam : httpParams) { - if (httpParam.startsWith("url:")) { - url = httpParam.substring(httpParam.indexOf("url:") + 4).trim(); - } - if (httpParam.startsWith("method:")) { - method = httpParam.substring(httpParam.indexOf("method:") + 7).trim().toUpperCase(); - } - if (httpParam.startsWith("data:")) { - data = httpParam.substring(httpParam.indexOf("data:") + 5).trim(); - } - } - - // param valid - if (url == null || url.trim().length() == 0) { - XxlJobLogger.log("url[" + url + "] invalid."); - return ReturnT.FAIL; - } - if (method == null || !Arrays.asList("GET", "POST").contains(method)) { - XxlJobLogger.log("method[" + method + "] invalid."); - return ReturnT.FAIL; - } - - // request - HttpURLConnection connection = null; - BufferedReader bufferedReader = null; - try { - // connection - URL realUrl = new URL(url); - connection = (HttpURLConnection) realUrl.openConnection(); - - // connection setting - connection.setRequestMethod(method); - connection.setDoOutput(true); - connection.setDoInput(true); - connection.setUseCaches(false); - connection.setReadTimeout(5 * 1000); - connection.setConnectTimeout(3 * 1000); - connection.setRequestProperty("connection", "Keep-Alive"); - connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); - connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8"); - - // do connection - connection.connect(); - - // data - if (data != null && data.trim().length() > 0) { - DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream()); - dataOutputStream.write(data.getBytes("UTF-8")); - dataOutputStream.flush(); - dataOutputStream.close(); - } - - // valid StatusCode - int statusCode = connection.getResponseCode(); - if (statusCode != 200) { - throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid."); - } - - // result - bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); - StringBuilder result = new StringBuilder(); - String line; - while ((line = bufferedReader.readLine()) != null) { - result.append(line); - } - String responseMsg = result.toString(); - - XxlJobLogger.log(responseMsg); - return ReturnT.SUCCESS; - } catch (Exception e) { - XxlJobLogger.log(e); - return ReturnT.FAIL; - } finally { - try { - if (bufferedReader != null) { - bufferedReader.close(); - } - if (connection != null) { - connection.disconnect(); - } - } catch (Exception e2) { - XxlJobLogger.log(e2); - } - } - - } - - - /** - * 5、生命周期任务示例:任务初始化与销毁时,支持自定义相关逻辑; - */ - - @XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy") - public ReturnT<String> demoJobHandler2(String param) throws Exception { - XxlJobLogger.log("XXL-JOB, Hello World."); - return ReturnT.SUCCESS; - } - - public void init() { - log.info("init"); - } - - public void destroy() { - log.info("destory"); - } - -} - diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/pom.xml b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/pom.xml new file mode 100644 index 0000000..ae9369e --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/pom.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>jeecg-cloud-test</artifactId> + <groupId>org.jeecgframework.boot</groupId> + <version>3.1.0</version> + </parent> + <modelVersion>4.0.0</modelVersion> + <description>公共测试模块</description> + <artifactId>jeecg-cloud-test-more</artifactId> + + <dependencies> + <!-- 引入jeecg-boot-starter-cloud依赖 --> + <dependency> + <groupId>org.jeecgframework.boot</groupId> + <artifactId>jeecg-boot-starter-cloud</artifactId> + <!--system模块需要排除jeecg-system-cloud-api--> + <exclusions> + <exclusion> + <groupId>org.jeecgframework.boot</groupId> + <artifactId>jeecg-system-cloud-api</artifactId> + </exclusion> + </exclusions> + </dependency> + <!--定时任务--> + <dependency> + <groupId>org.jeecgframework.boot</groupId> + <artifactId>jeecg-boot-starter-job</artifactId> + </dependency> + <!--rabbitmq消息队列--> + <dependency> + <groupId>org.jeecgframework.boot</groupId> + <artifactId>jeecg-boot-starter-rabbitmq</artifactId> + </dependency> + <!-- 分布式锁依赖 --> + <dependency> + <groupId>org.jeecgframework.boot</groupId> + <artifactId>jeecg-boot-starter-lock</artifactId> + </dependency> + </dependencies> + +</project> \ No newline at end of file diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/constant/CloudConstant.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/constant/CloudConstant.java new file mode 100644 index 0000000..63b3eda --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/constant/CloudConstant.java @@ -0,0 +1,29 @@ +package org.jeecg.modules.test.constant; + +/** + * 微服务单元测试常量定义 + */ +public interface CloudConstant { + + /** + * 微服务名【对应模块jeecg-boot-module-demo】 + */ + public final static String SERVER_NAME_JEECGDEMO = "jeecg-demo"; + + /** + * MQ测试队列名字 + */ + public final static String MQ_JEECG_PLACE_ORDER = "jeecg_place_order"; + + /** + * MQ测试消息总线 + */ + public final static String MQ_DEMO_BUS_EVENT = "demoBusEvent"; + + /** + * 分布式锁lock key + */ + public final static String REDISSON_DEMO_LOCK_KEY1 = "demoLockKey1"; + public final static String REDISSON_DEMO_LOCK_KEY2 = "demoLockKey2"; + +} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClient.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClient.java new file mode 100644 index 0000000..71f9be9 --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClient.java @@ -0,0 +1,22 @@ +package org.jeecg.modules.test.feign.client; + +import org.jeecg.common.api.vo.Result; + +import org.jeecg.config.FeignConfig; +import org.jeecg.modules.test.constant.CloudConstant; +import org.jeecg.modules.test.feign.factory.JeecgTestClientFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 常规feign接口定义 + */ +@FeignClient(value = CloudConstant.SERVER_NAME_JEECGDEMO, configuration = FeignConfig.class,fallbackFactory = JeecgTestClientFactory.class) +@Component +public interface JeecgTestClient { + + @PostMapping(value = "/test/getMessage") + Result<Object> getMessage(@RequestParam(value = "name",required = false) String name); +} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClientDyn.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClientDyn.java new file mode 100644 index 0000000..ddf43dc --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClientDyn.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.test.feign.client; + +import org.jeecg.common.api.vo.Result; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 动态feign接口定义 + */ +public interface JeecgTestClientDyn { + + @PostMapping(value = "/test/getMessage") + Result<String> getMessage(@RequestParam(value = "name",required = false) String name); +} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/controller/JeecgTestFeignController.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/controller/JeecgTestFeignController.java new file mode 100644 index 0000000..bd09f65 --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/controller/JeecgTestFeignController.java @@ -0,0 +1,63 @@ +package org.jeecg.modules.test.feign.controller; + + +import org.apache.commons.lang3.StringUtils; +import org.jeecg.boot.starter.rabbitmq.client.RabbitMqClient; +import org.jeecg.common.api.vo.Result; +import org.jeecg.modules.test.feign.client.JeecgTestClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.csp.sentinel.annotation.SentinelResource; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + + +@RestController +@RequestMapping("/sys/test") +@Api(tags = "【微服务】单元测试") +public class JeecgTestFeignController { + + // @Autowired + //private JeecgFeignService jeecgFeignService; + + @Autowired + private JeecgTestClient jeecgTestClient; + + @Autowired + private RabbitMqClient rabbitMqClient; + + @PostMapping("getMessage") + @ApiOperation(value = "测试feign", notes = "测试feign") + @SentinelResource(value = "fallback",fallback = "getDefaultUser") + public Result<Object> getMessage(@RequestParam(value = "name",required = false) String name) { + return jeecgTestClient.getMessage("fegin——jeecg-boot2"); + } + + +// @GetMapping("getMessage2") +// @ApiOperation(value = "测试动态feign", notes = "测试动态feign") +// public Result<String> getMessage2() { +// JeecgTestClientDyn myClientDyn = jeecgFeignService.newInstance(JeecgTestClientDyn.class, CloudConstant.SERVER_NAME_JEECGDEMO); +// return myClientDyn.getMessage("动态fegin——jeecg-boot2"); +// } + + @PostMapping("test") + @ApiOperation(value = "测试熔断", notes = "测试熔断") + @SentinelResource(value = "fallback",fallback = "getDefaultUser") + public Result<Object> test(@RequestParam(value = "name",required = false) String name) { + if(StringUtils.isEmpty(name)){ + throw new IllegalArgumentException("name param is empty"); + } + + return Result.OK(); + } + public Result<Object> getDefaultUser(String name) { + System.out.println("熔断,默认回调函数"); + return Result.OK("访问超时"); + } +} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/factory/JeecgTestClientFactory.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/factory/JeecgTestClientFactory.java new file mode 100644 index 0000000..ee18e6f --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/factory/JeecgTestClientFactory.java @@ -0,0 +1,23 @@ +package org.jeecg.modules.test.feign.factory; + + + + +import feign.hystrix.FallbackFactory; +import org.jeecg.modules.test.feign.client.JeecgTestClient; +import org.jeecg.modules.test.feign.fallback.JeecgTestFallback; +import org.springframework.stereotype.Component; + +/** + * @author qinfeng + */ +@Component +public class JeecgTestClientFactory implements FallbackFactory<JeecgTestClient> { + + @Override + public JeecgTestClient create(Throwable throwable) { + JeecgTestFallback fallback = new JeecgTestFallback(); + fallback.setCause(throwable); + return fallback; + } +} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/fallback/JeecgTestFallback.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/fallback/JeecgTestFallback.java new file mode 100644 index 0000000..f5ba6fc --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/fallback/JeecgTestFallback.java @@ -0,0 +1,22 @@ +package org.jeecg.modules.test.feign.fallback; + +import org.jeecg.common.api.vo.Result; + +import lombok.Setter; +import org.jeecg.modules.test.feign.client.JeecgTestClient; + + +/** + * + */ +public class JeecgTestFallback implements JeecgTestClient { + + @Setter + private Throwable cause; + + + @Override + public Result<Object> getMessage(String name) { + return Result.OK("访问超时"); + } +} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/lock/DemoLockTest.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/lock/DemoLockTest.java new file mode 100644 index 0000000..51d156a --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/lock/DemoLockTest.java @@ -0,0 +1,63 @@ +package org.jeecg.modules.test.lock; + +import lombok.extern.slf4j.Slf4j; +import org.jeecg.boot.starter.lock.annotation.JLock; +import org.jeecg.boot.starter.lock.client.RedissonLockClient; +import org.jeecg.boot.starter.rabbitmq.client.RabbitMqClient; +import org.jeecg.common.base.BaseMap; +import org.jeecg.modules.test.constant.CloudConstant; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * 分布式锁测试demo + */ +@Slf4j +@Component +public class DemoLockTest { + @Autowired + RedissonLockClient redissonLock; + @Autowired + RabbitMqClient rabbitMqClient; + + /** + * 测试分布式锁【注解方式】 + */ + //@Scheduled(cron = "0/5 * * * * ?") + @JLock(lockKey = CloudConstant.REDISSON_DEMO_LOCK_KEY1) + public void execute() throws InterruptedException { + log.info("执行execute任务开始,休眠三秒"); + Thread.sleep(3000); + System.out.println("=======================业务逻辑1============================="); + Map map = new BaseMap(); + map.put("orderId", "BJ0001"); + rabbitMqClient.sendMessage(CloudConstant.MQ_JEECG_PLACE_ORDER, map); + //延迟10秒发送 + map.put("orderId", "NJ0002"); + rabbitMqClient.sendMessage(CloudConstant.MQ_JEECG_PLACE_ORDER, map, 10000); + log.info("execute任务结束,休眠三秒"); + } + + public DemoLockTest() { + } + + /** + * 测试分布式锁【编码方式】 + */ + //@Scheduled(cron = "0/5 * * * * ?") + public void execute2() throws InterruptedException { + if (redissonLock.tryLock(CloudConstant.REDISSON_DEMO_LOCK_KEY2, -1, 6000)) { + log.info("执行任务execute2开始,休眠十秒"); + Thread.sleep(10000); + System.out.println("=======================业务逻辑2============================="); + log.info("定时execute2结束,休眠十秒"); + + redissonLock.unlock(CloudConstant.REDISSON_DEMO_LOCK_KEY2); + } else { + log.info("execute2获取锁失败"); + } + } + +} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/DemoJobHandler.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/DemoJobHandler.java new file mode 100644 index 0000000..6b42cde --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/DemoJobHandler.java @@ -0,0 +1,234 @@ + +package org.jeecg.modules.test.xxljob; + + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.IJobHandler; +import com.xxl.job.core.handler.annotation.XxlJob; +import com.xxl.job.core.log.XxlJobLogger; +import com.xxl.job.core.util.ShardingUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Arrays; + + +/** + * xxl-job定时任务测试 + */ +@Component +@Slf4j +public class DemoJobHandler { + + + /** + * 简单任务 + * + * @param params + * @return + */ + + @XxlJob(value = "demoJob") + public ReturnT<String> demoJobHandler(String params) { + log.info("我是定时任务,我执行了..............................."); + return ReturnT.SUCCESS; + } + + /** + * 2、分片广播任务 + */ + + @XxlJob("shardingJobHandler") + public ReturnT<String> shardingJobHandler(String param) throws Exception { + + // 分片参数 + ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo(); + XxlJobLogger.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardingVO.getIndex(), shardingVO.getTotal()); + + // 业务逻辑 + for (int i = 0; i < shardingVO.getTotal(); i++) { + if (i == shardingVO.getIndex()) { + XxlJobLogger.log("第 {} 片, 命中分片开始处理", i); + } else { + XxlJobLogger.log("第 {} 片, 忽略", i); + } + } + + return ReturnT.SUCCESS; + } + + + /** + * 3、命令行任务 + */ + + @XxlJob("commandJobHandler") + public ReturnT<String> commandJobHandler(String param) throws Exception { + String command = param; + int exitValue = -1; + + BufferedReader bufferedReader = null; + try { + // command process + Process process = Runtime.getRuntime().exec(command); + BufferedInputStream bufferedInputStream = new BufferedInputStream(process.getInputStream()); + bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream)); + + // command log + String line; + while ((line = bufferedReader.readLine()) != null) { + XxlJobLogger.log(line); + } + + // command exit + process.waitFor(); + exitValue = process.exitValue(); + } catch (Exception e) { + XxlJobLogger.log(e); + } finally { + if (bufferedReader != null) { + bufferedReader.close(); + } + } + + if (exitValue == 0) { + return IJobHandler.SUCCESS; + } else { + return new ReturnT<String>(IJobHandler.FAIL.getCode(), "command exit value(" + exitValue + ") is failed"); + } + } + + + /** + * 4、跨平台Http任务 + * 参数示例: + * "url: http://www.baidu.com\n" + + * "method: get\n" + + * "data: content\n"; + */ + + @XxlJob("httpJobHandler") + public ReturnT<String> httpJobHandler(String param) throws Exception { + + // param parse + if (param == null || param.trim().length() == 0) { + XxlJobLogger.log("param[" + param + "] invalid."); + return ReturnT.FAIL; + } + String[] httpParams = param.split("\n"); + String url = null; + String method = null; + String data = null; + for (String httpParam : httpParams) { + if (httpParam.startsWith("url:")) { + url = httpParam.substring(httpParam.indexOf("url:") + 4).trim(); + } + if (httpParam.startsWith("method:")) { + method = httpParam.substring(httpParam.indexOf("method:") + 7).trim().toUpperCase(); + } + if (httpParam.startsWith("data:")) { + data = httpParam.substring(httpParam.indexOf("data:") + 5).trim(); + } + } + + // param valid + if (url == null || url.trim().length() == 0) { + XxlJobLogger.log("url[" + url + "] invalid."); + return ReturnT.FAIL; + } + if (method == null || !Arrays.asList("GET", "POST").contains(method)) { + XxlJobLogger.log("method[" + method + "] invalid."); + return ReturnT.FAIL; + } + + // request + HttpURLConnection connection = null; + BufferedReader bufferedReader = null; + try { + // connection + URL realUrl = new URL(url); + connection = (HttpURLConnection) realUrl.openConnection(); + + // connection setting + connection.setRequestMethod(method); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setUseCaches(false); + connection.setReadTimeout(5 * 1000); + connection.setConnectTimeout(3 * 1000); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); + connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8"); + + // do connection + connection.connect(); + + // data + if (data != null && data.trim().length() > 0) { + DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream()); + dataOutputStream.write(data.getBytes("UTF-8")); + dataOutputStream.flush(); + dataOutputStream.close(); + } + + // valid StatusCode + int statusCode = connection.getResponseCode(); + if (statusCode != 200) { + throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid."); + } + + // result + bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); + StringBuilder result = new StringBuilder(); + String line; + while ((line = bufferedReader.readLine()) != null) { + result.append(line); + } + String responseMsg = result.toString(); + + XxlJobLogger.log(responseMsg); + return ReturnT.SUCCESS; + } catch (Exception e) { + XxlJobLogger.log(e); + return ReturnT.FAIL; + } finally { + try { + if (bufferedReader != null) { + bufferedReader.close(); + } + if (connection != null) { + connection.disconnect(); + } + } catch (Exception e2) { + XxlJobLogger.log(e2); + } + } + + } + + + /** + * 5、生命周期任务示例:任务初始化与销毁时,支持自定义相关逻辑; + */ + + @XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy") + public ReturnT<String> demoJobHandler2(String param) throws Exception { + XxlJobLogger.log("XXL-JOB, Hello World."); + return ReturnT.SUCCESS; + } + + public void init() { + log.info("init"); + } + + public void destroy() { + log.info("destory"); + } + +} + diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/XxclJobTest.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/XxclJobTest.java new file mode 100644 index 0000000..68d0214 --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/XxclJobTest.java @@ -0,0 +1,40 @@ + +package org.jeecg.modules.test.xxljob; + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + + +/** + * xxl-job定时任务测试 + */ +@Component +@Slf4j +public class XxclJobTest { + + + /** + * 简单任务 + * + * @param params + * @return + */ + + @XxlJob(value = "testJob") + public ReturnT<String> demoJobHandler(String params) { + log.info("我是demo服务里的定时任务testJob,我执行了..............................."); + return ReturnT.SUCCESS; + } + + public void init() { + log.info("init"); + } + + public void destroy() { + log.info("destory"); + } + +} + diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/pom.xml b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/pom.xml new file mode 100644 index 0000000..93255bc --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/pom.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>jeecg-cloud-test</artifactId> + <groupId>org.jeecgframework.boot</groupId> + <version>3.1.0</version> + </parent> + <modelVersion>4.0.0</modelVersion> + <description>消息队列测试模块</description> + <artifactId>jeecg-cloud-test-rabbitmq</artifactId> + + <dependencies> + <!--rabbitmq消息队列--> + <dependency> + <groupId>org.jeecgframework.boot</groupId> + <artifactId>jeecg-boot-starter-rabbitmq</artifactId> + </dependency> + </dependencies> + +</project> \ No newline at end of file diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/constant/CloudConstant.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/constant/CloudConstant.java new file mode 100644 index 0000000..10e3e2a --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/constant/CloudConstant.java @@ -0,0 +1,26 @@ +package org.jeecg.modules.test.rabbitmq.constant; + +/** + * 微服务单元测试常量定义 + */ +public interface CloudConstant { + + + /** + * MQ测试队列名字 + */ + public final static String MQ_JEECG_PLACE_ORDER = "jeecg_place_order"; + public final static String MQ_JEECG_PLACE_ORDER_TIME = "jeecg_place_order_time"; + + /** + * MQ测试消息总线 + */ + public final static String MQ_DEMO_BUS_EVENT = "demoBusEvent"; + + /** + * 分布式锁lock key + */ + public final static String REDISSON_DEMO_LOCK_KEY1 = "demoLockKey1"; + public final static String REDISSON_DEMO_LOCK_KEY2 = "demoLockKey2"; + +} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/controller/JeecgMqTestController.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/controller/JeecgMqTestController.java new file mode 100644 index 0000000..659d79a --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/controller/JeecgMqTestController.java @@ -0,0 +1,51 @@ +package org.jeecg.modules.test.rabbitmq.controller; + + +import javax.servlet.http.HttpServletRequest; + +import org.jeecg.boot.starter.rabbitmq.client.RabbitMqClient; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.base.BaseMap; +import org.jeecg.modules.test.rabbitmq.constant.CloudConstant; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import cn.hutool.core.util.RandomUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + + + +@RestController +@RequestMapping("/sys/test") +@Api(tags = "【微服务】单元测试") +public class JeecgMqTestController { + + @Autowired + private RabbitMqClient rabbitMqClient; + + + @GetMapping(value = "/rabbitmq") + @ApiOperation(value = "测试rabbitmq", notes = "测试rabbitmq") + public Result<?> rabbitMqClientTest(HttpServletRequest req) { + //rabbitmq消息队列测试 + BaseMap map = new BaseMap(); + map.put("orderId", RandomUtil.randomNumbers(10)); + rabbitMqClient.sendMessage(CloudConstant.MQ_JEECG_PLACE_ORDER, map); + rabbitMqClient.sendMessage(CloudConstant.MQ_JEECG_PLACE_ORDER_TIME, map,10); + return Result.OK("MQ发送消息成功"); + } + + @GetMapping(value = "/rabbitmq2") + @ApiOperation(value = "rabbitmq消息总线测试", notes = "rabbitmq消息总线测试") + public Result<?> rabbitmq2(HttpServletRequest req) { + + //rabbitmq消息总线测试 + BaseMap params = new BaseMap(); + params.put("orderId", "123456"); + rabbitMqClient.publishEvent(CloudConstant.MQ_DEMO_BUS_EVENT, params); + return Result.OK("MQ发送消息成功"); + } +} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/event/DemoBusEvent.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/event/DemoBusEvent.java new file mode 100644 index 0000000..5042915 --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/event/DemoBusEvent.java @@ -0,0 +1,28 @@ +package org.jeecg.modules.test.rabbitmq.event; + +import org.jeecg.boot.starter.rabbitmq.event.EventObj; +import org.jeecg.boot.starter.rabbitmq.event.JeecgBusEventHandler; +import org.jeecg.common.base.BaseMap; +import org.jeecg.modules.test.rabbitmq.constant.CloudConstant; +import org.springframework.stereotype.Component; + +import cn.hutool.core.util.ObjectUtil; +import lombok.extern.slf4j.Slf4j; + +/** + * 消息处理器【发布订阅】 + */ +@Slf4j +@Component(CloudConstant.MQ_DEMO_BUS_EVENT) +public class DemoBusEvent implements JeecgBusEventHandler { + + + @Override + public void onMessage(EventObj obj) { + if (ObjectUtil.isNotEmpty(obj)) { + BaseMap baseMap = obj.getBaseMap(); + String orderId = baseMap.get("orderId"); + log.info("业务处理----订单ID:" + orderId); + } + } +} diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver1.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver1.java new file mode 100644 index 0000000..7627aa2 --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver1.java @@ -0,0 +1,58 @@ +package org.jeecg.modules.test.rabbitmq.listener; + +import org.jeecg.boot.starter.rabbitmq.core.BaseRabbiMqHandler; +import org.jeecg.boot.starter.rabbitmq.listenter.MqListener; +import org.jeecg.common.annotation.RabbitComponent; +import org.jeecg.common.base.BaseMap; +import org.jeecg.modules.test.rabbitmq.constant.CloudConstant; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.support.AmqpHeaders; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.web.client.RestTemplate; + +import com.rabbitmq.client.Channel; + +import lombok.extern.slf4j.Slf4j; + +/** + * RabbitMq接受者1 + * (@RabbitListener声明类上,一个类只能监听一个队列) + */ +@Slf4j +@RabbitListener(queues = CloudConstant.MQ_JEECG_PLACE_ORDER) +@RabbitComponent(value = "helloReceiver1") +public class HelloReceiver1 extends BaseRabbiMqHandler<BaseMap> { + + @Autowired + private RestTemplate restTemplate; + + @RabbitHandler + public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { + super.onMessage(baseMap, deliveryTag, channel, new MqListener<BaseMap>() { + @Override + public void handler(BaseMap map, Channel channel) { + //业务处理 + String orderId = map.get("orderId").toString(); + System.out.println("MQ Receiver1,orderId : " + orderId); + // jeecgTestClient.getMessage("JEECG"); + try{ +// HttpHeaders requestHeaders = new HttpHeaders(); +// requestHeaders.add("X-Access-Token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzExOTcyOTEsInVzZXJuYW1lIjoiYWRtaW4ifQ.N8mJvwzb4G0i3vYF9A2Bmf5cDKb1LDnOp1RwtpYEu1E"); +// requestHeaders.add("content-type", MediaType.APPLICATION_JSON_UTF8.toString()); +// MultiValueMap<String, String> requestBody = new LinkedMultiValueMap<>(); +// requestBody.add("name", "test"); +// HttpEntity< MultiValueMap<String, String> > requestEntity = new HttpEntity(requestBody, requestHeaders); +// //post +// ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://localhost:7002/test/getMessage", requestEntity, String.class); +// System.out.println(" responseEntity :"+responseEntity.getBody()); + }catch (Exception e){ + e.printStackTrace(); + } + + } + }); + } + +} \ No newline at end of file diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver2.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver2.java new file mode 100644 index 0000000..8531160 --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver2.java @@ -0,0 +1,36 @@ +package org.jeecg.modules.test.rabbitmq.listener;//package org.jeecg.modules.cloud.rabbitmq; + +import com.rabbitmq.client.Channel; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.boot.starter.rabbitmq.core.BaseRabbiMqHandler; +import org.jeecg.boot.starter.rabbitmq.listenter.MqListener; +import org.jeecg.common.annotation.RabbitComponent; +import org.jeecg.common.base.BaseMap; +import org.jeecg.modules.test.rabbitmq.constant.CloudConstant; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.support.AmqpHeaders; +import org.springframework.messaging.handler.annotation.Header; + +/** + * RabbitMq接受者2 + * (@RabbitListener声明类上,一个类只能监听一个队列) + */ +@Slf4j +@RabbitListener(queues = CloudConstant.MQ_JEECG_PLACE_ORDER) +@RabbitComponent(value = "helloReceiver2") +public class HelloReceiver2 extends BaseRabbiMqHandler<BaseMap> { + + @RabbitHandler + public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { + super.onMessage(baseMap, deliveryTag, channel, new MqListener<BaseMap>() { + @Override + public void handler(BaseMap map, Channel channel) { + //业务处理 + String orderId = map.get("orderId").toString(); + log.info("MQ Receiver2,orderId : " + orderId); + } + }); + } + +} \ No newline at end of file diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver3.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver3.java new file mode 100644 index 0000000..970d94a --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver3.java @@ -0,0 +1,34 @@ +package org.jeecg.modules.test.rabbitmq.listener;//package org.jeecg.modules.cloud.rabbitmq; + +import com.rabbitmq.client.Channel; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.boot.starter.rabbitmq.core.BaseRabbiMqHandler; +import org.jeecg.boot.starter.rabbitmq.listenter.MqListener; +import org.jeecg.common.annotation.RabbitComponent; +import org.jeecg.common.base.BaseMap; +import org.jeecg.modules.test.rabbitmq.constant.CloudConstant; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.support.AmqpHeaders; +import org.springframework.messaging.handler.annotation.Header; + +/** + * RabbitMq接受者3 + * (@RabbitListener声明类方法上,一个类可以多监听多个队列) + */ +@Slf4j +@RabbitComponent(value = "helloReceiver3") +public class HelloReceiver3 extends BaseRabbiMqHandler<BaseMap> { + + @RabbitListener(queues = CloudConstant.MQ_JEECG_PLACE_ORDER) + public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { + super.onMessage(baseMap, deliveryTag, channel, new MqListener<BaseMap>() { + @Override + public void handler(BaseMap map, Channel channel) { + //业务处理 + String orderId = map.get("orderId").toString(); + log.info("MQ Receiver3,orderId : " + orderId); + } + }); + } + +} \ No newline at end of file diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloTimeReceiver.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloTimeReceiver.java new file mode 100644 index 0000000..7379708 --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloTimeReceiver.java @@ -0,0 +1,34 @@ +package org.jeecg.modules.test.rabbitmq.listener; + +import org.jeecg.boot.starter.rabbitmq.core.BaseRabbiMqHandler; +import org.jeecg.boot.starter.rabbitmq.listenter.MqListener; +import org.jeecg.common.annotation.RabbitComponent; +import org.jeecg.common.base.BaseMap; +import org.jeecg.modules.test.rabbitmq.constant.CloudConstant; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.support.AmqpHeaders; +import org.springframework.messaging.handler.annotation.Header; + +import com.rabbitmq.client.Channel; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RabbitListener(queues = CloudConstant.MQ_JEECG_PLACE_ORDER_TIME) +@RabbitComponent(value = "helloTimeReceiver") +public class HelloTimeReceiver extends BaseRabbiMqHandler<BaseMap> { + + @RabbitHandler + public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { + super.onMessage(baseMap, deliveryTag, channel, new MqListener<BaseMap>() { + @Override + public void handler(BaseMap map, Channel channel) { + //业务处理 + String orderId = map.get("orderId").toString(); + log.info("Time Receiver1,orderId : " + orderId); + } + }); + } + +} \ No newline at end of file diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/controller/JeecgShardingDemoController.java b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/controller/JeecgShardingDemoController.java index 6dc0ab2..769148f 100644 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/controller/JeecgShardingDemoController.java +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/controller/JeecgShardingDemoController.java @@ -29,12 +29,12 @@ public class JeecgShardingDemoController extends JeecgController<ShardingSysLog, private IShardingSysLogService shardingSysLogService; /** - * 添加 + * 单库分表 * @return */ - @PostMapping(value = "/add") - @AutoLog(value = "分库分表添加") - @ApiOperation(value = "分库分表添加", notes = "分库分表添加") + @PostMapping(value = "/test1") + @AutoLog(value = "单库分表") + @ApiOperation(value = "单库分表", notes = "分库分表添加") public Result<?> add() { for (int i = 0; i < 10; i++) { ShardingSysLog shardingSysLog = new ShardingSysLog(); @@ -45,5 +45,22 @@ public class JeecgShardingDemoController extends JeecgController<ShardingSysLog, } return Result.OK(); } + /** + * 双库分表 + * @return + */ + @PostMapping(value = "/test2") + @AutoLog(value = "双库分表") + @ApiOperation(value = "双库分表", notes = "双库分表") + public Result<?> test2() { + for (int i = 20; i <= 30; i++) { + ShardingSysLog shardingSysLog = new ShardingSysLog(); + shardingSysLog.setLogContent("双库分表测试"); + shardingSysLog.setLogType(i); + shardingSysLog.setOperateType(i); + shardingSysLogService.save(shardingSysLog); + } + return Result.OK(); + } } diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding.yml b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding.yml index 6a45828..b58d16c 100644 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding.yml +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding.yml @@ -3,9 +3,10 @@ spring: props: sql-show: true datasource: + #添加分库数据源 ds0: driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/jeecg-boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai + url: jdbc:mysql://localhost:3300/jeecg-boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root type: com.alibaba.druid.pool.DruidDataSource password: root @@ -26,7 +27,8 @@ spring: table-classbased: props: strategy: standard - algorithmClassName: org.jeecg.modules.test.sharding.algorithm.StandardModTableShardAlgorithm + # 自定义标准分配算法 + algorithmClassName: org.jeecg.modules.demo.sharding.algorithm.StandardModTableShardAlgorithm type: CLASS_BASED tables: # 逻辑表名称 @@ -38,5 +40,5 @@ spring: standard: # 分片算法名称 sharding-algorithm-name: table-classbased - # 分片列名称 + # 分片列名称(对应数据库字段) sharding-column: log_type \ No newline at end of file diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding2.yml b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding2.yml new file mode 100644 index 0000000..95ab476 --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding2.yml @@ -0,0 +1,72 @@ +# 双库分表配置 +spring: + shardingsphere: + props: + sql-show: true + datasource: + ds0: + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/jeecg-boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai + type: com.alibaba.druid.pool.DruidDataSource + username: root + password: root + ds1: + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/jeecg-boot2?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai + type: com.alibaba.druid.pool.DruidDataSource + username: root + password: root + names: ds0,ds1 + # 规则配置 + rules: + replica-query: + # 负载均衡算法 + load-balancers: + round-robin: + type: ROUND_ROBIN + props: + default: 0 + data-sources: + prds: + primary-data-source-name: ds0 + replica-data-source-names: ds1 + load-balancer-name: round_robin + sharding: + # 配置绑定表,每一行为一组,绑定表会提高查询效率 + binding-tables: + - sys_log + # 分布式序列算法配置 + key-generators: + snowflake: + type: SNOWFLAKE + props: + worker-id: 123 + # 分片算法配置 + sharding-algorithms: + table-classbased: + props: + strategy: standard + algorithmClassName: org.jeecg.modules.test.sharding.algorithm.StandardModTableShardAlgorithm + type: CLASS_BASED + # 通过operate_type取模的方式确定数据落在哪个库 + database-inline: + type: INLINE + props: + algorithm-expression: ds$->{operate_type % 2} + tables: + # 逻辑表名称 + sys_log: + #配置具体表的数据节点 + actual-data-nodes: ds$->{0..1}.sys_log$->{0..1} + # 分库策略 + database-strategy: + standard: + sharding-column: operate_type + sharding-algorithm-name: database-inline + # 分表策略 + table-strategy: + standard: + # 分片算法名称 + sharding-algorithm-name: table-classbased + # 分片列名称 + sharding-column: log_type \ No newline at end of file diff --git a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/pom.xml b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/pom.xml index e329b61..c7e1579 100644 --- a/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/pom.xml +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/pom.xml @@ -22,5 +22,7 @@ <modules> <module>jeecg-cloud-test-seata</module> <module>jeecg-cloud-test-shardingsphere</module> + <module>jeecg-cloud-test-more</module> + <module>jeecg-cloud-test-rabbitmq</module> </modules> </project> \ No newline at end of file -- libgit2 0.22.2