From d47902bdca2eb772c974803a5bd72e917a294b39 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期一, 29 八月 2022 14:39:18 +0800 Subject: [PATCH] 启动时redis未连接导致无法启动 --- src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java | 50 ++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java index f6d3eef..d923755 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java @@ -8,6 +8,7 @@ import java.util.Map; import java.util.Set; +import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import org.slf4j.Logger; @@ -19,7 +20,6 @@ import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; @@ -39,7 +39,6 @@ import com.genersoft.iot.vmp.storager.dao.MediaServerMapper; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.utils.redis.RedisUtil; -import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -52,6 +51,8 @@ public class MediaServerServiceImpl implements IMediaServerService { private final static Logger logger = LoggerFactory.getLogger(MediaServerServiceImpl.class); + + private final String zlmKeepaliveKeyPrefix = "zlm-keepalive_"; @Autowired private SipConfig sipConfig; @@ -83,9 +84,11 @@ @Autowired private ZLMRTPServerFactory zlmrtpServerFactory; - @Autowired private EventPublisher publisher; + + @Autowired + private DynamicTask dynamicTask; /** * 鍒濆鍖� @@ -130,7 +133,7 @@ logger.info("media server [ {} ] ssrcConfig is null", mediaServerItem.getId()); return null; }else { - String ssrc = null; + String ssrc; if (presetSsrc != null) { ssrc = presetSsrc; }else { @@ -398,15 +401,43 @@ if (serverItem.isAutoConfig()) { setZLMConfig(serverItem, "0".equals(zlmServerConfig.getHookEnable())); } + final String zlmKeepaliveKey = zlmKeepaliveKeyPrefix + serverItem.getId(); + dynamicTask.stop(zlmKeepaliveKey); + dynamicTask.startDelay(zlmKeepaliveKey, new KeepAliveTimeoutRunnable(serverItem), (serverItem.getHookAliveInterval() + 5) * 1000); publisher.zlmOnlineEventPublish(serverItem.getId()); logger.info("[ZLM] 杩炴帴鎴愬姛 {} - {}:{} ", zlmServerConfig.getGeneralMediaServerId(), zlmServerConfig.getIp(), zlmServerConfig.getHttpPort()); + } + + class KeepAliveTimeoutRunnable implements Runnable{ + + private MediaServerItem serverItem; + + public KeepAliveTimeoutRunnable(MediaServerItem serverItem) { + this.serverItem = serverItem; + } + + @Override + public void run() { + logger.info("[zlm蹇冭烦鍒版湡]锛�" + serverItem.getId()); + // 鍙戣捣http璇锋眰楠岃瘉zlm鏄惁纭疄鏃犳硶杩炴帴锛屽鏋滅‘瀹炴棤娉曡繛鎺ュ垯鍙戦�佺绾夸簨浠讹紝鍚﹀垯涓嶄綔澶勭悊 + JSONObject mediaServerConfig = zlmresTfulUtils.getMediaServerConfig(serverItem); + if (mediaServerConfig != null && mediaServerConfig.getInteger("code") == 0) { + logger.info("[zlm蹇冭烦鍒版湡]锛歿}楠岃瘉鍚巣lm浠嶅湪绾匡紝鎭㈠蹇冭烦淇℃伅,璇锋鏌lm鏄惁鍙互姝e父鍚憌vp鍙戦�佸績璺�", serverItem.getId()); + // 娣诲姞zlm淇℃伅 + updateMediaServerKeepalive(serverItem.getId(), mediaServerConfig); + }else { + publisher.zlmOfflineEventPublish(serverItem.getId()); + } + } } @Override public void zlmServerOffline(String mediaServerId) { delete(mediaServerId); + final String zlmKeepaliveKey = zlmKeepaliveKeyPrefix + mediaServerId; + dynamicTask.stop(zlmKeepaliveKey); } @Override @@ -417,7 +448,7 @@ if (RedisUtil.zScore(key, serverItem.getId()) == null) { // 涓嶅瓨鍦ㄥ垯璁剧疆榛樿鍊� 宸插瓨鍦ㄥ垯閲嶇疆 RedisUtil.zAdd(key, serverItem.getId(), 0L); // 鏌ヨ鏈嶅姟娴佹暟閲� - zlmresTfulUtils.getMediaList(serverItem, null, null, "rtmp",(mediaList ->{ + zlmresTfulUtils.getMediaList(serverItem, null, null, "rtsp",(mediaList ->{ Integer code = mediaList.getInteger("code"); if (code == 0) { JSONArray data = mediaList.getJSONArray("data"); @@ -429,7 +460,6 @@ }else { clearRTPServer(serverItem); } - } @@ -465,7 +495,7 @@ } // 鑾峰彇鍒嗘暟鏈�浣庣殑锛屽強骞跺彂鏈�浣庣殑 - Set<Object> objects = RedisUtil.ZRange(key, 0, -1); + Set<Object> objects = RedisUtil.zRange(key, 0, -1); ArrayList<Object> mediaServerObjectS = new ArrayList<>(objects); String mediaServerId = (String)mediaServerObjectS.get(0); @@ -625,9 +655,9 @@ return; } } - String key = VideoManagerConstants.MEDIA_SERVER_KEEPALIVE_PREFIX + userSetting.getServerId() + "_" + mediaServerId; - int hookAliveInterval = mediaServerItem.getHookAliveInterval() + 2; - RedisUtil.set(key, data, hookAliveInterval); + final String zlmKeepaliveKey = zlmKeepaliveKeyPrefix + mediaServerItem.getId(); + dynamicTask.stop(zlmKeepaliveKey); + dynamicTask.startDelay(zlmKeepaliveKey, new KeepAliveTimeoutRunnable(mediaServerItem), (mediaServerItem.getHookAliveInterval() + 5) * 1000); } private MediaServerItem getOneFromDatabase(String mediaServerId) { -- Gitblit v1.8.0