From 49a871c9721554a48cfb7f000df13b8b898cbe94 Mon Sep 17 00:00:00 2001 From: Administrator Date: Fri, 30 Dec 2022 16:42:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=9161=EF=BC=88=E7=AD=96=E7=95=A5?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E8=B4=A3=E4=BB=BB=E9=93=BE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mashibing/cache/CacheStarterApp.java | 5 ++ .../cache/controller/TestController.java | 15 ++++++ .../common/model/StandardSubmit.java | 2 + beacon-strategy/pom.xml | 50 +++++++++++++++++ .../strategy/StrategyStarterApp.java | 21 ++++++++ .../strategy/client/BeaconCacheClient.java | 16 ++++++ .../strategy/filter/StrategyFilter.java | 16 ++++++ .../filter/StrategyFilterContext.java | 53 +++++++++++++++++++ .../filter/impl/BlackStrategyFilter.java | 20 +++++++ .../filter/impl/DirtyWordStrategyFilter.java | 20 +++++++ .../filter/impl/PhaseStrategyFilter.java | 21 ++++++++ .../filter/impl/RouteStrategyFilter.java | 20 +++++++ .../strategy/mq/PreSendListener.java | 44 +++++++++++++++ .../src/main/resources/bootstrap.yml | 19 +++++++ pom.xml | 1 + 15 files changed, 323 insertions(+) create mode 100644 beacon-strategy/pom.xml create mode 100644 beacon-strategy/src/main/java/com/mashibing/strategy/StrategyStarterApp.java create mode 100644 beacon-strategy/src/main/java/com/mashibing/strategy/client/BeaconCacheClient.java create mode 100644 beacon-strategy/src/main/java/com/mashibing/strategy/filter/StrategyFilter.java create mode 100644 beacon-strategy/src/main/java/com/mashibing/strategy/filter/StrategyFilterContext.java create mode 100644 beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/BlackStrategyFilter.java create mode 100644 beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/DirtyWordStrategyFilter.java create mode 100644 beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/PhaseStrategyFilter.java create mode 100644 beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/RouteStrategyFilter.java create mode 100644 beacon-strategy/src/main/java/com/mashibing/strategy/mq/PreSendListener.java create mode 100644 beacon-strategy/src/main/resources/bootstrap.yml diff --git a/beacon-cache/src/main/java/com/mashibing/cache/CacheStarterApp.java b/beacon-cache/src/main/java/com/mashibing/cache/CacheStarterApp.java index 8197c22..d803fea 100644 --- a/beacon-cache/src/main/java/com/mashibing/cache/CacheStarterApp.java +++ b/beacon-cache/src/main/java/com/mashibing/cache/CacheStarterApp.java @@ -5,12 +5,17 @@ import org.redisson.client.RedisClient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.context.annotation.ComponentScan; /** * @author zjw * @description */ @SpringBootApplication +@ComponentScan(basePackages = { + "com.msb.framework.redis", + "com.mashibing.cache" +}) @EnableDiscoveryClient public class CacheStarterApp { diff --git a/beacon-cache/src/main/java/com/mashibing/cache/controller/TestController.java b/beacon-cache/src/main/java/com/mashibing/cache/controller/TestController.java index 88ff3ba..b3d9ac7 100644 --- a/beacon-cache/src/main/java/com/mashibing/cache/controller/TestController.java +++ b/beacon-cache/src/main/java/com/mashibing/cache/controller/TestController.java @@ -2,9 +2,11 @@ package com.mashibing.cache.controller; import com.msb.framework.redis.RedisClient; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.Map; /** @@ -29,4 +31,17 @@ public class TestController { Map result = redisClient.getMap(key); return result; } + @GetMapping("/test/xxx") + public Map xxx(){ + Map maps = new HashMap<>(); + maps.put("1801003","北京 北京,电信"); + maps.put("1734310","北京 北京,电信"); + redisClient.pipelined(operations -> { + for (Map.Entry entry : maps.entrySet()) { + operations.opsForValue().set(entry.getKey(),entry.getValue()); + } + }); + return null; + } + } diff --git a/beacon-common/src/main/java/com/mashibing/common/model/StandardSubmit.java b/beacon-common/src/main/java/com/mashibing/common/model/StandardSubmit.java index b11d03e..bde64c5 100644 --- a/beacon-common/src/main/java/com/mashibing/common/model/StandardSubmit.java +++ b/beacon-common/src/main/java/com/mashibing/common/model/StandardSubmit.java @@ -114,6 +114,8 @@ public class StandardSubmit implements Serializable { * 签名的id */ private Long signId; + + // 后续再做封装~~~~ diff --git a/beacon-strategy/pom.xml b/beacon-strategy/pom.xml new file mode 100644 index 0000000..82ffa8f --- /dev/null +++ b/beacon-strategy/pom.xml @@ -0,0 +1,50 @@ + + + + beacon-cloud + com.mashibing + 1.0-SNAPSHOT + ../pom.xml + + 4.0.0 + + beacon-strategy + + + + + org.springframework.boot + spring-boot-starter-web + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + com.mashibing + beacon-common + 1.0-SNAPSHOT + + + + org.springframework.boot + spring-boot-starter-amqp + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + + \ No newline at end of file diff --git a/beacon-strategy/src/main/java/com/mashibing/strategy/StrategyStarterApp.java b/beacon-strategy/src/main/java/com/mashibing/strategy/StrategyStarterApp.java new file mode 100644 index 0000000..32793f4 --- /dev/null +++ b/beacon-strategy/src/main/java/com/mashibing/strategy/StrategyStarterApp.java @@ -0,0 +1,21 @@ +package com.mashibing.strategy; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * @author zjw + * @description + */ +@SpringBootApplication +@EnableDiscoveryClient +@EnableFeignClients +public class StrategyStarterApp { + + public static void main(String[] args) { + SpringApplication.run(StrategyStarterApp.class,args); + } + +} diff --git a/beacon-strategy/src/main/java/com/mashibing/strategy/client/BeaconCacheClient.java b/beacon-strategy/src/main/java/com/mashibing/strategy/client/BeaconCacheClient.java new file mode 100644 index 0000000..527373a --- /dev/null +++ b/beacon-strategy/src/main/java/com/mashibing/strategy/client/BeaconCacheClient.java @@ -0,0 +1,16 @@ +package com.mashibing.strategy.client; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +/** + * @author zjw + * @description + */ +@FeignClient(value = "beacon-cache") +public interface BeaconCacheClient { + + @GetMapping("/cache/hget/{key}/{field}") + String hget(@PathVariable(value = "key")String key, @PathVariable(value = "field")String field); +} diff --git a/beacon-strategy/src/main/java/com/mashibing/strategy/filter/StrategyFilter.java b/beacon-strategy/src/main/java/com/mashibing/strategy/filter/StrategyFilter.java new file mode 100644 index 0000000..9c8110b --- /dev/null +++ b/beacon-strategy/src/main/java/com/mashibing/strategy/filter/StrategyFilter.java @@ -0,0 +1,16 @@ +package com.mashibing.strategy.filter; + +import com.mashibing.common.model.StandardSubmit; + +/** + * @author zjw + * @description + */ +public interface StrategyFilter { + + /** + * 校验!!!! + * @param submit + */ + void strategy(StandardSubmit submit); +} diff --git a/beacon-strategy/src/main/java/com/mashibing/strategy/filter/StrategyFilterContext.java b/beacon-strategy/src/main/java/com/mashibing/strategy/filter/StrategyFilterContext.java new file mode 100644 index 0000000..089448f --- /dev/null +++ b/beacon-strategy/src/main/java/com/mashibing/strategy/filter/StrategyFilterContext.java @@ -0,0 +1,53 @@ +package com.mashibing.strategy.filter; + +import com.mashibing.common.constant.CacheConstant; +import com.mashibing.common.model.StandardSubmit; +import com.mashibing.strategy.client.BeaconCacheClient; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * 策略模块校验链的执行 + * @author zjw + * @description + */ +@Component +@Slf4j +public class StrategyFilterContext { + + // 泛型注入,拿到所有的校验信息。 + @Autowired + private Map stringStrategyFilterMap; + + // 注入CacheClient + @Autowired + private BeaconCacheClient cacheClient; + + private final String CLIENT_FILTERS = "clientFilters"; + + + /** + * 当前check方法用于管理校验链的顺序 + */ + public void strategy(StandardSubmit submit) { + //1、 基于Redis获取客户对应的校验信息 + String filters = cacheClient.hget(CacheConstant.CLIENT_BUSINESS + submit.getApikey(), CLIENT_FILTERS); + + //2、健壮性校验后,基于逗号分隔遍历 + String[] filterArray; + if(filters != null && (filterArray = filters.split(",")).length > 0){ + // 到这,filterArray不为null,并且有数据 + for (String strategy : filterArray) { + //3、 遍历时,从stringStrategyFilterMap中获取到需要执行的校验信息,执行 + StrategyFilter strategyFilter = stringStrategyFilterMap.get(strategy); + if(strategyFilter != null){ + strategyFilter.strategy(submit); + } + } + } + } + +} diff --git a/beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/BlackStrategyFilter.java b/beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/BlackStrategyFilter.java new file mode 100644 index 0000000..209670e --- /dev/null +++ b/beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/BlackStrategyFilter.java @@ -0,0 +1,20 @@ +package com.mashibing.strategy.filter.impl; + +import com.mashibing.common.model.StandardSubmit; +import com.mashibing.strategy.filter.StrategyFilter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 黑名单校验 + * @author zjw + * @description + */ +@Service(value = "black") +@Slf4j +public class BlackStrategyFilter implements StrategyFilter { + @Override + public void strategy(StandardSubmit submit) { + log.info("【策略模块-黑名单校验】 校验ing…………"); + } +} diff --git a/beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/DirtyWordStrategyFilter.java b/beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/DirtyWordStrategyFilter.java new file mode 100644 index 0000000..cfc2bf2 --- /dev/null +++ b/beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/DirtyWordStrategyFilter.java @@ -0,0 +1,20 @@ +package com.mashibing.strategy.filter.impl; + +import com.mashibing.common.model.StandardSubmit; +import com.mashibing.strategy.filter.StrategyFilter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 敏感词校验 + * @author zjw + * @description + */ +@Service(value = "dirtyword") +@Slf4j +public class DirtyWordStrategyFilter implements StrategyFilter { + @Override + public void strategy(StandardSubmit submit) { + log.info("【策略模块-敏感词校验】 校验ing…………"); + } +} diff --git a/beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/PhaseStrategyFilter.java b/beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/PhaseStrategyFilter.java new file mode 100644 index 0000000..2384dd0 --- /dev/null +++ b/beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/PhaseStrategyFilter.java @@ -0,0 +1,21 @@ +package com.mashibing.strategy.filter.impl; + +import com.mashibing.common.model.StandardSubmit; +import com.mashibing.strategy.filter.StrategyFilter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 号段补全:获取手机号的运营商以及对应的归属地 + * @author zjw + * @description + */ +@Service(value = "phase") +@Slf4j +public class PhaseStrategyFilter implements StrategyFilter { + + @Override + public void strategy(StandardSubmit submit) { + log.info("【策略模块-号段补齐】 校验ing…………"); + } +} diff --git a/beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/RouteStrategyFilter.java b/beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/RouteStrategyFilter.java new file mode 100644 index 0000000..7497e20 --- /dev/null +++ b/beacon-strategy/src/main/java/com/mashibing/strategy/filter/impl/RouteStrategyFilter.java @@ -0,0 +1,20 @@ +package com.mashibing.strategy.filter.impl; + +import com.mashibing.common.model.StandardSubmit; +import com.mashibing.strategy.filter.StrategyFilter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 路由策略,选择合适的运营商通道 + * @author zjw + * @description + */ +@Service(value = "route") +@Slf4j +public class RouteStrategyFilter implements StrategyFilter { + @Override + public void strategy(StandardSubmit submit) { + log.info("【策略模块-路由策略】 校验ing…………"); + } +} diff --git a/beacon-strategy/src/main/java/com/mashibing/strategy/mq/PreSendListener.java b/beacon-strategy/src/main/java/com/mashibing/strategy/mq/PreSendListener.java new file mode 100644 index 0000000..81349b8 --- /dev/null +++ b/beacon-strategy/src/main/java/com/mashibing/strategy/mq/PreSendListener.java @@ -0,0 +1,44 @@ +package com.mashibing.strategy.mq; + +import com.mashibing.common.constant.RabbitMQConstants; +import com.mashibing.common.model.StandardSubmit; +import com.mashibing.strategy.filter.StrategyFilterContext; +import com.rabbitmq.client.Channel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +/** + * 监听接口模块推送过来的消息 + * @author zjw + * @description + */ +@Component +@Slf4j +public class PreSendListener { + + + /** + * 整个策略模块的校验 + */ + @Autowired + private StrategyFilterContext filterContext; + + @RabbitListener(queues = RabbitMQConstants.SMS_PRE_SEND) + public void listen(StandardSubmit submit, Message message, Channel channel) throws IOException { + log.info("【策略模块-接收消息】 接收到接口模块发送的消息 submit = {}",submit); + // 处理业务………… + try { + filterContext.strategy(submit); + log.info("【策略模块-消费完毕】手动ack"); + channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); + } catch (IOException e) { + e.printStackTrace(); + log.error("【策略模块-消费失败】凉凉~~~"); + } + } +} diff --git a/beacon-strategy/src/main/resources/bootstrap.yml b/beacon-strategy/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..cdcd596 --- /dev/null +++ b/beacon-strategy/src/main/resources/bootstrap.yml @@ -0,0 +1,19 @@ +# 服务名称 +spring: + application: + name: beacon-strategy +# 多环境 + profiles: + active: dev +# nacos注册中心地址 + cloud: + nacos: + discovery: + server-addr: 114.116.226.76:8848 + # nacos配置中心地址: + config: + server-addr: 114.116.226.76:8848 + file-extension: yml + # beacon-api-dev.yml + + diff --git a/pom.xml b/pom.xml index 22f4bd1..561505a 100644 --- a/pom.xml +++ b/pom.xml @@ -8,6 +8,7 @@ beacon-common beacon-cache beacon-test + beacon-strategy org.springframework.boot