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 dbe426b21..f23cd827d 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 @@ jeecg-boot-module-system + - + + jeecg-cloud-test-more + 3.1.0 + --> + + + 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 9aab6bb08..2c9ef96dd 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/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 ece0f420b..000000000 --- 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 8713efbbd..000000000 --- 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 getMessage() { - return jeecgTestClient.getMessage("jeecg-boot"); - } - - @GetMapping("getMessage2") - @ApiOperation(value = "测试动态feign", notes = "测试动态feign") - public Result 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 85d995c85..000000000 --- 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 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 c4f646f99..000000000 --- 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 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 cc2202351..000000000 --- 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 { - - @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 032d6ba01..000000000 --- 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 6d769e5dd..000000000 --- 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 { -// -// @RabbitHandler -// public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { -// super.onMessage(baseMap, deliveryTag, channel, new MqListener() { -// @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 14fb9ddbb..000000000 --- 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 { -// -// @RabbitHandler -// public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { -// super.onMessage(baseMap, deliveryTag, channel, new MqListener() { -// @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 2be891c64..000000000 --- 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 { -// -// @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() { -// @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 38e9131ce..000000000 --- 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 { -// -// @RabbitHandler -// public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { -// super.onMessage(baseMap, deliveryTag, channel, new MqListener() { -// @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-more/pom.xml b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/pom.xml new file mode 100644 index 000000000..ae9369e88 --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/pom.xml @@ -0,0 +1,44 @@ + + + + jeecg-cloud-test + org.jeecgframework.boot + 3.1.0 + + 4.0.0 + 公共测试模块 + jeecg-cloud-test-more + + + + + org.jeecgframework.boot + jeecg-boot-starter-cloud + + + + org.jeecgframework.boot + jeecg-system-cloud-api + + + + + + org.jeecgframework.boot + jeecg-boot-starter-job + + + + org.jeecgframework.boot + jeecg-boot-starter-rabbitmq + + + + org.jeecgframework.boot + jeecg-boot-starter-lock + + + + \ 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/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 similarity index 83% rename from jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/constant/CloudConstant.java rename to jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/constant/CloudConstant.java index cfdd2824b..63b3eda38 100644 --- 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-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/constant/CloudConstant.java @@ -1,4 +1,4 @@ -package org.jeecg.modules.cloud.constant; +package org.jeecg.modules.test.constant; /** * 微服务单元测试常量定义 @@ -14,7 +14,6 @@ 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测试消息总线 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 000000000..71f9be919 --- /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 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 000000000..ddf43dcd4 --- /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 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 000000000..bd09f6598 --- /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 getMessage(@RequestParam(value = "name",required = false) String name) { + return jeecgTestClient.getMessage("fegin——jeecg-boot2"); + } + + +// @GetMapping("getMessage2") +// @ApiOperation(value = "测试动态feign", notes = "测试动态feign") +// public Result 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 test(@RequestParam(value = "name",required = false) String name) { + if(StringUtils.isEmpty(name)){ + throw new IllegalArgumentException("name param is empty"); + } + + return Result.OK(); + } + public Result 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 000000000..ee18e6fc4 --- /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 { + + @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 000000000..f5ba6fc8d --- /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 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 000000000..51d156a18 --- /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-system-start/src/main/java/org/jeecg/modules/cloud/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 similarity index 99% rename from jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/xxljob/DemoJobHandler.java rename to jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/DemoJobHandler.java index 528dd52db..6b42cdeaf 100644 --- 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-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/DemoJobHandler.java @@ -1,5 +1,5 @@ -package org.jeecg.modules.cloud.xxljob;; +package org.jeecg.modules.test.xxljob; import com.xxl.job.core.biz.model.ReturnT; @@ -9,7 +9,6 @@ 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; 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 000000000..68d021442 --- /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 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 000000000..93255bca8 --- /dev/null +++ b/jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/pom.xml @@ -0,0 +1,22 @@ + + + + jeecg-cloud-test + org.jeecgframework.boot + 3.1.0 + + 4.0.0 + 消息队列测试模块 + jeecg-cloud-test-rabbitmq + + + + + org.jeecgframework.boot + jeecg-boot-starter-rabbitmq + + + + \ 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 000000000..10e3e2ad8 --- /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 000000000..659d79a51 --- /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 000000000..5042915dd --- /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 000000000..7627aa213 --- /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 { + + @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() { + @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 requestBody = new LinkedMultiValueMap<>(); +// requestBody.add("name", "test"); +// HttpEntity< MultiValueMap > requestEntity = new HttpEntity(requestBody, requestHeaders); +// //post +// ResponseEntity 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 000000000..8531160ad --- /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 { + + @RabbitHandler + public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { + super.onMessage(baseMap, deliveryTag, channel, new MqListener() { + @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 000000000..970d94ac0 --- /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 { + + @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() { + @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 000000000..73797081b --- /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 { + + @RabbitHandler + public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { + super.onMessage(baseMap, deliveryTag, channel, new MqListener() { + @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 6dc0ab2e9..769148f05 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 add() { for (int i = 0; i < 10; i++) { ShardingSysLog shardingSysLog = new ShardingSysLog(); @@ -45,5 +45,22 @@ public class JeecgShardingDemoController extends JeecgController 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 6a45828cf..b58d16c65 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 000000000..95ab476d3 --- /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 e329b6138..c7e157999 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 @@ jeecg-cloud-test-seata jeecg-cloud-test-shardingsphere + jeecg-cloud-test-more + jeecg-cloud-test-rabbitmq \ No newline at end of file