diff --git a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/Log4Constans.java b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/Log4Constans.java new file mode 100644 index 0000000..69db8fa --- /dev/null +++ b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/Log4Constans.java @@ -0,0 +1,5 @@ +package com.qiuguo.iot.base.constans; + +public class Log4Constans { + public static String PRINT_LOG_ID = "logid"; +} diff --git a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/RedisConstans.java b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/RedisConstans.java index b23a10c..3dad1d6 100644 --- a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/RedisConstans.java +++ b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/RedisConstans.java @@ -21,7 +21,7 @@ public class RedisConstans { /* * 10年 * */ - public static Long TEN_YEAR = ONE_DAY * 365 * 10; + public static Long TEN_YEAR = 365L * 10; public static String DEVICE_INFO = "device::info::"; public static String IOT_TOKEN = "iot_token:"; diff --git a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/utils/WebClientUtils.java b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/utils/WebClientUtils.java index be06d19..c078cca 100644 --- a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/utils/WebClientUtils.java +++ b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/utils/WebClientUtils.java @@ -2,10 +2,13 @@ package com.qiuguo.iot.base.utils; import cn.hutool.core.math.Money; import com.alibaba.fastjson.JSONObject; +import com.qiuguo.iot.base.constans.Log4Constans; import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; import org.springframework.http.HttpHeaders; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; +import reactor.util.context.Context; import java.util.Map; @@ -43,11 +46,11 @@ public class WebClientUtils { return Mono.just(JSONObject.parseObject(s)); }); } - } public static Mono post(String url, JSONObject body, Map headers) { log.info("POST WebClient URL:{} body:{} headers:{}", url, body, headers); + //String logId = MDC.get(Log4Constans.PRINT_LOG_ID); if(headers == null || headers.size() == 0) { return webClient.post().uri(url).bodyValue(body.toString()).retrieve().bodyToMono(String.class).flatMap(s-> { diff --git a/iot-modules/iot-admin-http-api/src/main/java/com/qiuguo/iot/admin/http/api/filter/LogMdcConfiguration.java b/iot-modules/iot-admin-http-api/src/main/java/com/qiuguo/iot/admin/http/api/filter/LogMdcConfiguration.java index 2f45143..e9fc428 100644 --- a/iot-modules/iot-admin-http-api/src/main/java/com/qiuguo/iot/admin/http/api/filter/LogMdcConfiguration.java +++ b/iot-modules/iot-admin-http-api/src/main/java/com/qiuguo/iot/admin/http/api/filter/LogMdcConfiguration.java @@ -1,5 +1,6 @@ package com.qiuguo.iot.admin.http.api.filter; +import com.qiuguo.iot.base.constans.Log4Constans; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Subscription; import org.slf4j.MDC; @@ -21,7 +22,7 @@ import javax.annotation.PreDestroy; @Configuration @Slf4j public class LogMdcConfiguration { - public static String PRINT_LOG_ID = "logid"; + public static String PRINT_LOG_ID = Log4Constans.PRINT_LOG_ID; @PostConstruct public void contextOperatorHook() { Hooks.onEachOperator(PRINT_LOG_ID, Operators.lift((r, c) ->{ diff --git a/iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/filter/LogMdcConfiguration.java b/iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/filter/LogMdcConfiguration.java index c14235e..3d6be64 100644 --- a/iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/filter/LogMdcConfiguration.java +++ b/iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/filter/LogMdcConfiguration.java @@ -1,5 +1,6 @@ package com.qiuguo.iot.user.api.filter; +import com.qiuguo.iot.base.constans.Log4Constans; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Subscription; import org.slf4j.MDC; @@ -21,7 +22,7 @@ import javax.annotation.PreDestroy; @Configuration @Slf4j public class LogMdcConfiguration { - public static String PRINT_LOG_ID = "logid"; + public static String PRINT_LOG_ID = Log4Constans.PRINT_LOG_ID; @PostConstruct public void contextOperatorHook() { Hooks.onEachOperator(PRINT_LOG_ID, Operators.lift((r, c) ->{ diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/filter/LogMdcConfiguration.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/filter/LogMdcConfiguration.java index 6ed9439..e53f654 100644 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/filter/LogMdcConfiguration.java +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/filter/LogMdcConfiguration.java @@ -1,5 +1,6 @@ package com.qiuguo.iot.box.websocket.api.filter; +import com.qiuguo.iot.base.constans.Log4Constans; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Subscription; import org.slf4j.MDC; @@ -20,7 +21,7 @@ import javax.annotation.PreDestroy; @Configuration @Slf4j public class LogMdcConfiguration { - public static String PRINT_LOG_ID = "logid"; + public static String PRINT_LOG_ID = Log4Constans.PRINT_LOG_ID; @PostConstruct public void contextOperatorHook() { Hooks.onEachOperator(PRINT_LOG_ID, Operators.lift((r, c) ->{ diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BoxWebSocketHandler.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BoxWebSocketHandler.java index 32f62cd..1a1effb 100644 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BoxWebSocketHandler.java +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BoxWebSocketHandler.java @@ -29,6 +29,7 @@ import org.springframework.web.reactive.socket.*; import reactor.core.publisher.*; import javax.annotation.Resource; +import java.time.Duration; @Component @WebSocketMapping("/websocket/box") @@ -115,14 +116,13 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock //通知用户端设备绑定成功 sendNoticeToUser(boxSession.getUserId(), "设备离线,设备序列号:" + boxSession.getSn(), AskTypeEnum.BOX_OFF_LINE.getCode()); deviceInfoService.setOnLineStatus(sn, YesNo.NO.getCode()).subscribe(); - ReactiveValueOperations operations = reactiveStringRedisTemplate.opsForValue(); UserDeviceInfoModel userDeviceInfoModel = new UserDeviceInfoModel(); userDeviceInfoModel.setStatus(YesNo.NO.getCode()); userDeviceInfoModel.setUserId(userId); userDeviceInfoModel.setSn(sn); - operations.set(RedisConstans.USER_BOX_INFO + userId, + reactiveStringRedisTemplate.opsForValue().set(RedisConstans.USER_BOX_INFO + userId, JSONObject.toJSONString(userDeviceInfoModel), - RedisConstans.TEN_YEAR).subscribe(); + Duration.ofDays(RedisConstans.TEN_YEAR)).subscribe(); return; } log.info("被踢下线断开连接:{}", boxSession.getSn()); @@ -137,34 +137,35 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock } } - private void errorLogin(BaseSession boxSession, ReactiveValueOperations operations, String sn){ + private void errorLogin(BaseSession boxSession, String sn){ //清除异常redis - operations.delete(RedisConstans.DEVICE_INFO + sn).subscribe();//不需要时间 + reactiveStringRedisTemplate.opsForValue().delete(RedisConstans.DEVICE_INFO + sn).subscribe();//不需要时间 closeSendMsg(boxSession, "异常,请重新登录", AskTypeEnum.TTS.getCode()); } private void checkToken(BoxSession boxSession, String sn, Long linkTime, String signature, Long userId){ - ReactiveValueOperations operations = reactiveStringRedisTemplate.opsForValue(); - operations.get(RedisConstans.DEVICE_INFO + sn).defaultIfEmpty("").flatMap(s -> { - if(com.qiuguo.iot.base.utils.StringUtils.isNotBlank(s)){ + reactiveStringRedisTemplate.opsForValue().get(RedisConstans.DEVICE_INFO + sn).defaultIfEmpty("").flatMap(s -> { + if(com.qiuguo.iot.base.utils.StringUtils.isNotBlank(s) && s.length() < 1000){ try{ DeviceInfoEntity dv = JSONObject.parseObject(s, DeviceInfoEntity.class); if(dv.getId() == null){ log.info("redis设备缓存异常,清楚"); - errorLogin(boxSession, operations, sn); + errorLogin(boxSession, sn); } return Mono.just(dv); }catch (Exception e){ log.info("转换异常,清除redis。下次连接成功{}", e); - errorLogin(boxSession, operations, sn); + errorLogin(boxSession, sn); } } DeviceInfoRequest request = new DeviceInfoRequest(); request.setSn(sn); return deviceInfoService.selectDeviceInfoByRequest(request).defaultIfEmpty(new DeviceInfoEntity()).map(dv -> { if(dv.getId() != null){ - operations.set(RedisConstans.DEVICE_INFO + dv.getSn(), JSONObject.toJSONString(dv), RedisConstans.ONE_HOUR).subscribe();//直接提交订阅 + String redis = JSONObject.toJSONString(dv); + + reactiveStringRedisTemplate.opsForValue().set(RedisConstans.DEVICE_INFO + dv.getSn(), redis, Duration.ofHours(1)).subscribe();//直接提交订阅 } return dv; @@ -227,14 +228,13 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock //下面所有的以前未主设备改成非主设备 //通知用户端设备绑定成功 sendNoticeToUser(userId, "设备绑定成功,设备序列号:" + dv.getSn(), AskTypeEnum.DEVICE_BIND.getCode()); - ReactiveValueOperations operations = reactiveStringRedisTemplate.opsForValue(); UserDeviceInfoModel userDeviceInfoModel = new UserDeviceInfoModel(); userDeviceInfoModel.setStatus(YesNo.YES.getCode()); userDeviceInfoModel.setUserId(userId); userDeviceInfoModel.setSn(entity.getOtherDeviceId()); - operations.set(RedisConstans.USER_BOX_INFO + userId, + reactiveStringRedisTemplate.opsForValue().set(RedisConstans.USER_BOX_INFO + userId, JSONObject.toJSONString(userDeviceInfoModel), - RedisConstans.TEN_YEAR).subscribe(); + Duration.ofDays(RedisConstans.TEN_YEAR)).subscribe(); return Mono.empty(); }).subscribe(); diff --git a/iot-modules/iot-customer-http-api/src/main/java/com/qiuguo/iot/customer/http/api/filter/LogMdcConfiguration.java b/iot-modules/iot-customer-http-api/src/main/java/com/qiuguo/iot/customer/http/api/filter/LogMdcConfiguration.java index c20fc22..c431da5 100644 --- a/iot-modules/iot-customer-http-api/src/main/java/com/qiuguo/iot/customer/http/api/filter/LogMdcConfiguration.java +++ b/iot-modules/iot-customer-http-api/src/main/java/com/qiuguo/iot/customer/http/api/filter/LogMdcConfiguration.java @@ -1,5 +1,6 @@ package com.qiuguo.iot.customer.http.api.filter; +import com.qiuguo.iot.base.constans.Log4Constans; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Subscription; import org.slf4j.MDC; @@ -21,7 +22,7 @@ import javax.annotation.PreDestroy; @Configuration @Slf4j public class LogMdcConfiguration { - public static String PRINT_LOG_ID = "logid"; + public static String PRINT_LOG_ID = Log4Constans.PRINT_LOG_ID; @PostConstruct public void contextOperatorHook() { Hooks.onEachOperator(PRINT_LOG_ID, Operators.lift((r, c) ->{