From ae21715eb15540309aca141db006e50bd5f4f2c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=82=85=E5=93=A5?= <184172133@qq.com> Date: Sun, 10 Sep 2023 11:01:45 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9ARedis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/md/xfg-dev-tech-redis.drawio | 1 + .../xfg/dev/tech/config/RedisClientConfig.java | 10 ++++++---- .../persistent/repository/OrderRepository.java | 3 +-- 3 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 docs/md/xfg-dev-tech-redis.drawio diff --git a/docs/md/xfg-dev-tech-redis.drawio b/docs/md/xfg-dev-tech-redis.drawio new file mode 100644 index 0000000..0afd0d0 --- /dev/null +++ b/docs/md/xfg-dev-tech-redis.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/RedisClientConfig.java b/xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/RedisClientConfig.java index 5578baa..2a816a9 100644 --- a/xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/RedisClientConfig.java +++ b/xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/RedisClientConfig.java @@ -16,7 +16,7 @@ import org.springframework.context.annotation.Configuration; /** * @author Fuzhengwei bugstack.cn @小傅哥 * @description Redis 客户端,使用 Redisson Redisson - * @create 2023-09-03 16:51 + * @create 2023-09-09 16:51 */ @Configuration @EnableConfigurationProperties(RedisClientConfigProperties.class) @@ -40,19 +40,21 @@ public class RedisClientConfig { .setPingConnectionInterval(properties.getPingInterval()) .setKeepAlive(properties.isKeepAlive()) ; + RedissonClient redissonClient = Redisson.create(config); - // 添加监听 String[] beanNamesForType = applicationContext.getBeanNamesForType(MessageListener.class); for (String beanName : beanNamesForType) { MessageListener bean = applicationContext.getBean(beanName, MessageListener.class); - Class beanClass = bean.getClass(); + + Class beanClass = bean.getClass(); + if (beanClass.isAnnotationPresent(RedisTopic.class)) { RedisTopic redisTopic = beanClass.getAnnotation(RedisTopic.class); + RTopic topic = redissonClient.getTopic(redisTopic.topic()); topic.addListener(String.class, bean); - // 动态创建 bean 对象,注入到 spring 容器,bean 的名称为 redisTopic,对象为 RTopic ConfigurableListableBeanFactory beanFactory = applicationContext.getBeanFactory(); beanFactory.registerSingleton(redisTopic.topic(), topic); } diff --git a/xfg-dev-tech-infrastructure/src/main/java/cn/bugstack/xfg/dev/tech/infrastructure/persistent/repository/OrderRepository.java b/xfg-dev-tech-infrastructure/src/main/java/cn/bugstack/xfg/dev/tech/infrastructure/persistent/repository/OrderRepository.java index 7139ef4..2e5c69b 100644 --- a/xfg-dev-tech-infrastructure/src/main/java/cn/bugstack/xfg/dev/tech/infrastructure/persistent/repository/OrderRepository.java +++ b/xfg-dev-tech-infrastructure/src/main/java/cn/bugstack/xfg/dev/tech/infrastructure/persistent/repository/OrderRepository.java @@ -52,13 +52,12 @@ public class OrderRepository implements IOrderRepository { @Override public String createOrderByNoLock(OrderAggregate orderAggregate) { - UserEntity userEntity = orderAggregate.getUserEntity(); SKUEntity skuEntity = orderAggregate.getSkuEntity(); // 模拟锁商品库存 long decrCount = redissonService.decr(skuEntity.getSku()); if (decrCount < 0) return "已无库存[初始化的库存和使用库存,保持一致。orderService.initSkuCount(\"13811216\", 10000);]"; - String lockKey = userEntity.getUserId().concat("_").concat(String.valueOf(decrCount)); + String lockKey = skuEntity.getSku().concat("_").concat(String.valueOf(decrCount)); RLock lock = redissonService.getLock(lockKey); -- GitLab