优化cacheclient+构建策略模块发送【手机号归属地和运营商】到后台管理模块的队列+优化策略模块号段补全功能

main
heqijun 4 months ago
parent af29eb818c
commit 9b1336f408

@ -70,6 +70,12 @@ public class CacheController {
redisClient.sAdd(key, value);
}
@PostMapping("/saddstr/{key}")
public void saddStr(@PathVariable(value = "key") String key, @RequestBody String... value) {
log.info("【缓存模块】saddStr: key = {}\nvalue = {}", key, value);
redisClient.sAdd(key, value);
}
@PostMapping("/smember/{key}")
public Set smember(@PathVariable(value = "key") String key) {
log.info("【缓存模块】smember: key = {}", key);

@ -39,6 +39,9 @@ public interface BeaconCacheClient {
@PostMapping("cache/sadd/{key}")
void sadd(@PathVariable(value = "key") String key, @RequestBody Map<String, Object>... value);
@PostMapping("cache/saddstr/{key}")
void saddStr(@PathVariable(value = "key") String key, @RequestBody String... value);
@PostMapping("cache/smember/{key}")
Set smember(@PathVariable(value = "key") String key);

@ -28,4 +28,7 @@ public class CacheConstant {
@Description("号段前缀")
public static final String PHASE = "phase:";
@Description("敏感词key")
public static final String DIRTY_WORD = "dirty_word";
}

@ -0,0 +1,26 @@
package com.mashibing.strategy.config;
import com.mashibing.common.constant.RabbitMQConstant;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author heqijun
* @ClassName: RabbitMQConfig
* @Description: RabbitMQConfig
* @date 2025/6/8 17:46
*/
@Configuration
public class RabbitMQConfig {
/**
*
*/
@Bean
public Queue preSendQueue() {
return QueueBuilder.durable(RabbitMQConstant.MOBILE_AREA_OPERATOR).build();
}
}

@ -0,0 +1,43 @@
package com.mashibing.strategy.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author heqijun
* @ClassName: RabbitMQTemplateConfig
* @Description: RabbitMQTemplateconfirmreturn
* @date 2025/6/8 17:52
*/
@Configuration
@Slf4j
public class RabbitMQTemplateConfig {
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
//设置connectionFactory
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
//配置confirm机制回调
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
//消息妹有发送到交换机
if (!ack) {
log.error("【策略模块-发送消息】消息没有发送到交换机。。。" +
"\n correlationData={},ack={},cause:{} ", correlationData, ack, cause);
}
});
//配置return机制回调
rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> log.error("【策略模块-发送消息】消息没有路由到指定的队列。。。" +
"\nmessage={},exchange={},routingKey={}", new String(message.getBody()), exchange, routingKey));
return rabbitTemplate;
}
}

@ -1,6 +1,7 @@
package com.mashibing.strategy.service.strategyfilter.impl;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.common.constant.RabbitMQConstant;
import com.mashibing.common.pojo.StandardSubmit;
import com.mashibing.strategy.feignclient.CacheClient;
import com.mashibing.strategy.pojo.PhasePojo;
@ -8,6 +9,7 @@ import com.mashibing.strategy.service.strategyfilter.StrategyFilter;
import com.mashibing.strategy.utils.PhaseUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@ -29,10 +31,13 @@ public class PhaseStrategyFilter implements StrategyFilter {
@Autowired
private RestTemplate restTemplate;
@Autowired
RabbitTemplate rabbitTemplate;
@Override
public void strategy(StandardSubmit standardSubmit) {
public void strategy(StandardSubmit submit) {
log.info("【策略模块-号段补全】开始===============================");
String mobile7 = standardSubmit.getMobile().substring(0, 7);
String mobile7 = submit.getMobile().substring(0, 7);
//缓存中查询号段。如果查询不到,则在三方接口中查询
String s = cacheClient.get(CacheConstant.PHASE + mobile7);
PhasePojo phasePojo = new PhasePojo();
@ -40,6 +45,8 @@ public class PhaseStrategyFilter implements StrategyFilter {
log.info("【策略模块-号段补全】缓存中未查询到信息,需要三方查询。。。");
phasePojo = PhaseUtil.phaseMobile360(restTemplate, mobile7);
log.info("【策略模块-号段补全】三方查询结果:{}", phasePojo);
//三方查到之后,发送消息到后台管理模块
rabbitTemplate.convertAndSend(RabbitMQConstant.MOBILE_AREA_OPERATOR, submit.getMobile());
} else {
log.info("【策略模块-号段补全】缓存中查询到信息:{}", s);
String[] split = s.split(",");
@ -47,8 +54,8 @@ public class PhaseStrategyFilter implements StrategyFilter {
phasePojo.setOperatorNa(split[1]);
}
//查询到号段之后补全standardSubmit中运营商信息
standardSubmit.setArea(phasePojo.getArea());
standardSubmit.setOperatorId(PhaseUtil.getOperatorId(phasePojo.getOperatorNa()));
submit.setArea(phasePojo.getArea());
submit.setOperatorId(PhaseUtil.getOperatorId(phasePojo.getOperatorNa()));
log.info("【策略模块-号段补全】结束===============================");
}
}

@ -1,40 +0,0 @@
package com.mashibing.test.feignClient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* @author heqijun
* @ClassName: BeaconCacheClient
* @Description: openFeignClient
* @date 2025/6/5 20:13
*/
@FeignClient("beacon-cache")
@RequestMapping("cache")
public interface BeaconCacheClient {
@GetMapping("get/{key}")
String get(@PathVariable String key);
@GetMapping("set/{key}/{value}")
void set(@PathVariable String key, @PathVariable String value);
@GetMapping("hget/{key}")
Map hget(@PathVariable String key);
@PostMapping("hset/{key}")
void hset(@PathVariable String key, @RequestBody Map hash);
@PostMapping("/sadd/{key}")
void sadd(@PathVariable(value = "key") String key, @RequestBody Map<String, Object>... maps);
/**
* String
*
* @param map keykeyvaluevalue
*/
@PostMapping("/pipeline/string")
void pipelineString(@RequestBody Map<String, String> map);
}

@ -0,0 +1,19 @@
package com.mashibing.test.feignClient;
import com.mashibing.common.clients.BeaconCacheClient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* @author heqijun
* @ClassName: BeaconCacheClient
* @Description: openFeignClient
* @date 2025/6/5 20:13
*/
@FeignClient("beacon-cache")
public interface CacheClient extends BeaconCacheClient {
}

@ -0,0 +1,19 @@
package com.mashibing.test.mapper;
import com.mashibing.test.entity.MobileArea;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @author heqijun
* @ClassName: MobileAreaMapper
* @Description: TODO()
* @date 2025/6/8 14:47
*/
public interface MobileDirtywordMapper {
@Select("select dirtyword from mobile_dirtyword")
List<String> findAllDirtyword();
}

@ -3,7 +3,7 @@ package com.mashibing.test.mapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mashibing.test.entity.ClientBalance;
import com.mashibing.test.feignClient.BeaconCacheClient;
import com.mashibing.test.feignClient.CacheClient;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@ -12,14 +12,12 @@ import org.springframework.test.context.junit4.SpringRunner;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@RunWith(SpringRunner.class)
class ClientBalanceMapperTest {
@Autowired
BeaconCacheClient beaconCacheClient;
CacheClient cacheClient;
@Autowired
ClientBalanceMapper clientBalanceMapper;
@ -30,6 +28,6 @@ class ClientBalanceMapperTest {
System.out.println("balance = " + balance);
ObjectMapper objectMapper = new ObjectMapper();
Map map = objectMapper.readValue(objectMapper.writeValueAsString(balance), Map.class);
beaconCacheClient.hset("client_balance:1", map);
cacheClient.hset("client_balance:1", map);
}
}

@ -3,7 +3,7 @@ package com.mashibing.test.mapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mashibing.test.entity.ClientBusiness;
import com.mashibing.test.feignClient.BeaconCacheClient;
import com.mashibing.test.feignClient.CacheClient;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@ -20,7 +20,7 @@ class ClientBusinessMapperTest {
private ClientBusinessMapper mapper;
@Autowired
BeaconCacheClient beaconCacheClient;
CacheClient cacheClient;
@Test
public void findById() {
@ -29,6 +29,6 @@ class ClientBusinessMapperTest {
cb.setClientFilters("phase," + cb.getClientFilters());
System.out.println(cb);
ObjectMapper mapper = new ObjectMapper();
beaconCacheClient.hset("client_business:" + cb.getApikey(), mapper.convertValue(cb, Map.class));
cacheClient.hset("client_business:" + cb.getApikey(), mapper.convertValue(cb, Map.class));
}
}

@ -2,20 +2,17 @@ package com.mashibing.test.mapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mashibing.test.entity.ClientSign;
import com.mashibing.test.feignClient.BeaconCacheClient;
import com.mashibing.test.feignClient.CacheClient;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@RunWith(SpringRunner.class)
class ClientSignMapperTest {
@ -24,7 +21,7 @@ class ClientSignMapperTest {
private ClientSignMapper mapper;
@Autowired
BeaconCacheClient beaconCacheClient;
CacheClient cacheClient;
@Test
void findAllByClientId() {
@ -36,6 +33,6 @@ class ClientSignMapperTest {
.map(clientSign -> mapper.convertValue(clientSign, Map.class))
.collect(Collectors.toList());
beaconCacheClient.sadd("client_sign:1", maps.toArray(new Map[]{}));
cacheClient.sadd("client_sign:1", maps.toArray(new Map[]{}));
}
}

@ -2,7 +2,7 @@ package com.mashibing.test.mapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mashibing.test.entity.ClientTemplate;
import com.mashibing.test.feignClient.BeaconCacheClient;
import com.mashibing.test.feignClient.CacheClient;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@ -13,14 +13,12 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@RunWith(SpringRunner.class)
class ClientTemplateMapperTest {
@Autowired
BeaconCacheClient beaconCacheClient;
CacheClient cacheClient;
@Autowired
ClientTemplateMapper clientTemplateMapper;
@ -36,6 +34,6 @@ class ClientTemplateMapperTest {
.stream()
.map(clientTemplate -> mapper.convertValue(clientTemplate, Map.class))
.collect(Collectors.toList());
beaconCacheClient.sadd("client_template:15", maps.toArray(new Map[]{}));
cacheClient.sadd("client_template:15", maps.toArray(new Map[]{}));
}
}

@ -1,7 +1,7 @@
package com.mashibing.test.mapper;
import com.mashibing.test.entity.MobileArea;
import com.mashibing.test.feignClient.BeaconCacheClient;
import com.mashibing.test.feignClient.CacheClient;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
@ -13,14 +13,12 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
class MobileAreaMapperTest {
@Autowired
BeaconCacheClient beaconCacheClient;
CacheClient cacheClient;
@Autowired
MobileAreaMapper mapper;
@ -40,7 +38,7 @@ class MobileAreaMapperTest {
endTime = System.currentTimeMillis();
log.info("【List转Map耗时】: {} ms", endTime - startTime);
startTime = System.currentTimeMillis();
beaconCacheClient.pipelineString(map);
cacheClient.pipelineString(map);
endTime = System.currentTimeMillis();
log.info("【写入Redis耗时】: {} ms", endTime - startTime);
}

@ -0,0 +1,34 @@
package com.mashibing.test.mapper;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.test.feignClient.CacheClient;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
class MobileDirtywordMapperTest {
@Autowired
CacheClient cacheClient;
@Autowired
MobileDirtywordMapper mapper;
@Test
void findAllDirtyword() {
List<String> dirtywords = mapper.findAllDirtyword();
cacheClient.saddStr(CacheConstant.DIRTY_WORD, dirtywords.toArray(new String[]{}));
}
}
Loading…
Cancel
Save