|
|
@@ -8,6 +8,7 @@ import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
|
|
|
+import com.genersoft.iot.vmp.media.zlm.ZLMRunner;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -54,6 +55,9 @@ public class MediaServerServiceImpl implements IMediaServerService {
|
|
|
@Autowired
|
|
|
private SipConfig sipConfig;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ZLMRunner zlmRunner;
|
|
|
+
|
|
|
@Value("${server.ssl.enabled:false}")
|
|
|
private boolean sslEnabled;
|
|
|
|
|
|
@@ -279,7 +283,9 @@ public class MediaServerServiceImpl implements IMediaServerService {
|
|
|
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
|
|
|
MediaServerItem serverItem=(MediaServerItem)redisUtil.get(key);
|
|
|
if(null==serverItem){
|
|
|
- serverItem=mediaServerMapper.queryOne(mediaServerId);
|
|
|
+ //zlm服务不在线,启动重连
|
|
|
+ reloadZlm();
|
|
|
+ serverItem=(MediaServerItem)redisUtil.get(key);
|
|
|
}
|
|
|
return serverItem;
|
|
|
}
|
|
|
@@ -474,8 +480,13 @@ public class MediaServerServiceImpl implements IMediaServerService {
|
|
|
String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
|
|
|
|
|
|
if (redisUtil.zSize(key) == null || redisUtil.zSize(key) == 0) {
|
|
|
- logger.info("获取负载最低的节点时无在线节点");
|
|
|
- return null;
|
|
|
+ logger.info("获取负载最低的节点时无在线节点,启动重连机制");
|
|
|
+ //启动重连
|
|
|
+ reloadZlm();
|
|
|
+ if (redisUtil.zSize(key) == null || redisUtil.zSize(key) == 0) {
|
|
|
+ logger.info("获取负载最低的节点时无在线节点");
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 获取分数最低的,及并发最低的
|
|
|
@@ -637,8 +648,14 @@ public class MediaServerServiceImpl implements IMediaServerService {
|
|
|
MediaServerItem mediaServerItem = getOne(mediaServerId);
|
|
|
if (mediaServerItem == null) {
|
|
|
// zlm连接重试
|
|
|
- logger.warn("[更新ZLM 保活信息]失败,未找到流媒体信息");
|
|
|
- return;
|
|
|
+ logger.warn("[更新ZLM 保活信息]失败,未找到流媒体信息,尝试重连zlm");
|
|
|
+ reloadZlm();
|
|
|
+ mediaServerItem = getOne(mediaServerId);
|
|
|
+ if (mediaServerItem == null) {
|
|
|
+ // zlm连接重试
|
|
|
+ logger.warn("[更新ZLM 保活信息]失败,未找到流媒体信息");
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
String key = VideoManagerConstants.MEDIA_SERVER_KEEPALIVE_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
|
|
|
int hookAliveInterval = mediaServerItem.getHookAliveInterval() + 2;
|
|
|
@@ -661,4 +678,12 @@ public class MediaServerServiceImpl implements IMediaServerService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void reloadZlm(){
|
|
|
+ try {
|
|
|
+ zlmRunner.run();
|
|
|
+ Thread.sleep(500);//延迟0.5秒缓冲时间
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.warn("尝试重连zlm失败!",e);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|