lisai17@sina.com 2020-10-13 17:11:13 +08:00
parent bbb63db569
commit f627babeb3
3 changed files with 36 additions and 12 deletions

View File

@ -11,7 +11,9 @@ import com.jfinal.aop.Clear;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Record;
import java.text.DateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Clear(AuthInterceptor.class)
@ -31,10 +33,19 @@ public class CacheController extends Controller {
}
public void last() {
Map<Integer, Record> map = new HashMap<>();
for (Map.Entry<Integer, Record> entry : SvrCacheData.SUP_HEARTBEAT.entrySet()) {
Record c = entry.getValue();
Record out = new Record();
for(Map.Entry<Integer, Long> entry : SvrCacheData.SUP_HEARTBEAT.entrySet()){
out.set(String.valueOf(entry.getKey()), DateTimeUtil.sdfhms.get().format(new Date(entry.getValue())));
out.set("version", c.get("version"));
if (c.get("tm") != null) {
out.set("tm", DateTimeUtil.sdfhms.get().format(new Date(c.getLong("tm"))));
}
renderJson(out);
map.put(entry.getKey(), out);
}
renderJson(map);
}
}

View File

@ -1,11 +1,12 @@
package com.cowr.service.ssjygl.main;
import com.cowr.model.Supermarket;
import com.jfinal.plugin.activerecord.Record;
import java.util.HashMap;
import java.util.Map;
public class SvrCacheData {
public static Map<Integer, Supermarket> SUP_CACHE = new HashMap<>(); // 砂站基础信息缓存,常用配置数据,避免重复请求数据库
public static Map<Integer, Long> SUP_HEARTBEAT = new HashMap<>(); // 砂站客户端心跳时间戳
public static Map<Integer, Record> SUP_HEARTBEAT = new HashMap<>(); // 砂站客户端心跳时间戳
}

View File

@ -6,6 +6,7 @@ import com.cowr.model.Supermarket;
import com.cowr.service.ssjygl.main.SvrCacheData;
import com.cowr.service.ssjygl.synctask.SyncTaskService;
import com.jfinal.log.Log;
import com.jfinal.plugin.activerecord.Record;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
@ -185,6 +186,15 @@ public class NettyServer {
.toJSONString()
);
// 只保存有效 supermarket_id
if (SvrCacheData.SUP_CACHE.containsKey(supermarket_id)) {
if (!SvrCacheData.SUP_HEARTBEAT.containsKey(supermarket_id)) {
SvrCacheData.SUP_HEARTBEAT.put(supermarket_id, new Record());
}
SvrCacheData.SUP_HEARTBEAT.get(supermarket_id).set("version", json.get("clinet_version"));
}
log.debug("supermarket_id %s 注册成功, client version %s", supermarket_id, json.get("clinet_version"));
} else if (Enums.MsgTarget.HEARTBEAT.name().equals(target)) {
printlog("收到心跳 supermarket " + map.get(ctx.channel()) + ", 已连接客户端总数: " + map.size());
@ -192,11 +202,13 @@ public class NettyServer {
if (map.containsKey(ctx.channel())) {
Integer supermarket_id = map.get(ctx.channel());
if(SvrCacheData.SUP_CACHE.containsKey(supermarket_id)){
Supermarket supermarket = SvrCacheData.SUP_CACHE.get(supermarket_id);
// 只保存有效 supermarket_id
SvrCacheData.SUP_HEARTBEAT.put(supermarket.getId(), System.currentTimeMillis());
if (SvrCacheData.SUP_CACHE.containsKey(supermarket_id)) {
if (!SvrCacheData.SUP_HEARTBEAT.containsKey(supermarket_id)) {
SvrCacheData.SUP_HEARTBEAT.put(supermarket_id, new Record());
}
SvrCacheData.SUP_HEARTBEAT.get(supermarket_id).set("tm", System.currentTimeMillis());
}
}
} else if (Enums.MsgTarget.SYNCTASK.name().equals(target)) {