视频030~034(开始构建缓存模块)

master
Administrator 2 years ago
parent fd5938cae3
commit e4d5bb5ae1

@ -53,6 +53,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- 一些公共的组件会放到当前common中-->
<dependency>
<groupId>com.mashibing</groupId>
<artifactId>beacon-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

@ -30,6 +30,9 @@ public class SmsController {
log.info("【接口模块-单条短信Controller】 参数不合法 msg = {}",msg);
return R.error(SmsCodeEnum.PARAMETER_ERROR.getCode(),msg);
}
//=========================构建StandardSubmit各种封装校验=========================================
//=========================发送到MQ交给策略模块处理=========================================
return R.ok();
}
}

@ -1,7 +1,5 @@
package com.mashibing.api.filter;
import com.mashibing.api.form.SmsForm;
/**
*
* @author zjw
@ -11,7 +9,7 @@ public interface CheckFilter {
/**
*
* @param smsForm
* @param object
*/
void check(SmsForm smsForm);
void check(Object object);
}

@ -1,7 +1,6 @@
package com.mashibing.api.filter;
import com.mashibing.api.form.SingleSendForm;
import com.mashibing.api.form.SmsForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
@ -11,7 +10,7 @@ import java.util.Map;
/**
* @author zjw
* @description
* @description
*/
@Component
@RefreshScope
@ -20,25 +19,23 @@ public class CheckFilterContext {
// Spring的IOC会将对象全部都放到Map集合中
// 基于4.x中Spring提供的反省注解基于Map只拿到需要的类型对象即可
@Autowired
private Map<String,CheckFilter> checkFiltersMap;
private Map<String, CheckFilter> checkFiltersMap;
// 基于Nacos获取到执行的顺序和需要执行的校验对象
@Value("${singleSendFilters:apikey,ip,sign,template}")
private String singleSendFilters;
@Value("${filters:apikey,ip,sign,template}")
private String filters;
/**
* check
*/
public void check(SmsForm smsForm){
if (smsForm instanceof SingleSendForm) {
// 单挑短信发送的策略
//1. 将获取到filters基于,做切分
String[] filterArray = singleSendFilters.split(",");
//2. 遍历数组即可
for (String filter : filterArray) {
CheckFilter checkFilter = checkFiltersMap.get(filter);
checkFilter.check(smsForm);
}
public void check(Object object) {
// 单挑短信发送的策略
//1. 将获取到filters基于,做切分
String[] filterArray = filters.split(",");
//2. 遍历数组即可
for (String filter : filterArray) {
CheckFilter checkFilter = checkFiltersMap.get(filter);
checkFilter.check(object);
}
}
}

@ -1,7 +1,6 @@
package com.mashibing.api.filter.impl;
import com.mashibing.api.filter.CheckFilter;
import com.mashibing.api.form.SmsForm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -15,7 +14,7 @@ public class ApiKeyCheckFilter implements CheckFilter {
@Override
public void check(SmsForm smsForm) {
public void check(Object object) {
log.info("【接口模块-校验apikey】 校验ing…………");
}
}

@ -1,7 +1,6 @@
package com.mashibing.api.filter.impl;
import com.mashibing.api.filter.CheckFilter;
import com.mashibing.api.form.SmsForm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -15,7 +14,7 @@ public class FeeCheckFilter implements CheckFilter {
@Override
public void check(SmsForm smsForm) {
public void check(Object object) {
log.info("【接口模块-校验客户余额】 校验ing…………");
}
}

@ -1,7 +1,6 @@
package com.mashibing.api.filter.impl;
import com.mashibing.api.filter.CheckFilter;
import com.mashibing.api.form.SmsForm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -15,7 +14,7 @@ public class IPCheckFilter implements CheckFilter {
@Override
public void check(SmsForm smsForm) {
public void check(Object object) {
log.info("【接口模块-校验ip】 校验ing…………");
}
}

@ -1,7 +1,6 @@
package com.mashibing.api.filter.impl;
import com.mashibing.api.filter.CheckFilter;
import com.mashibing.api.form.SmsForm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -15,7 +14,7 @@ public class MobileCheckFilter implements CheckFilter {
@Override
public void check(SmsForm smsForm) {
public void check(Object object) {
log.info("【接口模块-校验手机号】 校验ing…………");
}
}

@ -1,7 +1,6 @@
package com.mashibing.api.filter.impl;
import com.mashibing.api.filter.CheckFilter;
import com.mashibing.api.form.SmsForm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -15,7 +14,7 @@ public class SignCheckFilter implements CheckFilter {
@Override
public void check(SmsForm smsForm) {
public void check(Object object) {
log.info("【接口模块-校验签名】 校验ing…………");
}
}

@ -1,7 +1,6 @@
package com.mashibing.api.filter.impl;
import com.mashibing.api.filter.CheckFilter;
import com.mashibing.api.form.SmsForm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -15,7 +14,7 @@ public class TemplateCheckFilter implements CheckFilter {
@Override
public void check(SmsForm smsForm) {
public void check(Object object) {
log.info("【接口模块-校验模板】 校验ing…………");
}
}

@ -11,13 +11,24 @@ import javax.validation.constraints.NotNull;
* @description
*/
@Data
public class SingleSendForm extends SmsForm {
public class SingleSendForm {
/** 客户的apikey */
@NotBlank(message = "apikey不允许为空")
private String apikey;
/** 手机号 */
@NotBlank(message = "手机号不能为空!")
private String mobile;
/** 短信内容 */
@NotBlank(message = "短信内容不能为空!")
private String text;
/** 客户业务内的uid */
private String uid;
/** 0-验证码短信 1-通知类短信 2-营销类短信 */
@Range(min = 0,max = 2,message = "短信类型只能是0~2的整数")
@NotNull(message = "短信类型不允许非空!")

@ -1,25 +0,0 @@
package com.mashibing.api.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
*
* @author zjw
* @description
*/
@Data
public class SmsForm {
/** 客户的apikey */
@NotBlank(message = "apikey不允许为空")
private String apikey;
/** 手机号 */
@NotBlank(message = "手机号不能为空!")
private String mobile;
/** 客户业务内的uid */
private String uid;
}

@ -0,0 +1,37 @@
<?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>beacon-cloud</artifactId>
<groupId>com.mashibing</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>beacon-cache</artifactId>
<dependencies>
<!-- web项目-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos的配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- data系列的redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
</project>

@ -0,0 +1,19 @@
package com.mashibing.cache;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @author zjw
* @description
*/
@SpringBootApplication
@EnableDiscoveryClient
public class CacheStarterApp {
public static void main(String[] args) {
SpringApplication.run(CacheStarterApp.class,args);
}
}

@ -0,0 +1,78 @@
package com.mashibing.cache.config;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* RedisTemplate
* @author zjw
* @description
*/
@Configuration
public class RedisConfig {
@Bean
public <T> RedisTemplate<String,T> redisTemplate(RedisConnectionFactory factory,RedisSerializer<Object> redisSerializer){
//1. 构建RedisTemplate对象
RedisTemplate<String,T> redisTemplate = new RedisTemplate<>();
//2. 设置RedisConnectionFactory到RedisTemplate
redisTemplate.setConnectionFactory(factory);
//3. 设置Redis的key的序列化方式
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
//4. 设置Redis的value的序列化方式 Date
redisTemplate.setValueSerializer(redisSerializer);
redisTemplate.setHashValueSerializer(redisSerializer);
//5. 保证生效
redisTemplate.afterPropertiesSet();
//6. 返回RedisTemplate
return redisTemplate;
}
@Bean
public RedisSerializer<Object> redisSerializer(){
//1. 构建Jackson的ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
//2. 设置JDK8日期格式的支持
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
Module timeModule = new JavaTimeModule()
.addDeserializer(LocalDate.class,new LocalDateDeserializer(dateFormatter))
.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(dateTimeFormatter))
.addSerializer(LocalDate.class,new LocalDateSerializer(dateFormatter))
.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(dateTimeFormatter));
objectMapper.registerModule(timeModule);
//3. 构建Jackson2JsonRedisSerializer
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//4. 设置好对JDK8日期的支持
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
//5. 返回设置好的Jackson2JsonRedisSerializer
return jackson2JsonRedisSerializer;
}
}

@ -0,0 +1,17 @@
# 服务名称
spring:
application:
name: beacon-cache
# 多环境
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-cache-dev.yml

@ -0,0 +1,21 @@
<?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>beacon-cloud</artifactId>
<groupId>com.mashibing</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>beacon-common</artifactId>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>

@ -0,0 +1,98 @@
package com.mashibing.common.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* --POJO
*
* @author zjw
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class StandardSubmit {
/**
*
*/
private Long sequenceId;
/**
* IDapikeyID
*/
private Long clientId;
/**
* ip
*/
private String ip;
/**
* uid
*/
private String uid;
/**
*
*/
private String mobile;
/**
*
*/
private String sign;
/**
*
*/
private String text;
/**
*
*/
private LocalDateTime sendTime;
/**
* 7067
*/
private Long fee;
/**
*
*/
private Integer operatorId;
/**
* 0451 0455
*/
private Integer areaCode;
/**
* ~
*/
private String area;
/**
* 106934985673485645
*/
private String srcNumber;
/**
* id
*/
private Long channelId;
/**
* 0-/ing1-2- 0
*/
private int reportState;
// 后续再做封装~~~~
}

@ -5,13 +5,16 @@
<modelVersion>4.0.0</modelVersion>
<modules>
<module>beacon-api</module>
<module>beacon-common</module>
<module>beacon-cache</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath />
<relativePath/>
</parent>
<groupId>com.mashibing</groupId>
<artifactId>beacon-cloud</artifactId>
<version>1.0-SNAPSHOT</version>

Loading…
Cancel
Save