net.gdface.facelog.WebredisController Maven / Gradle / Ivy
package net.gdface.facelog;
import java.io.IOException;
import java.lang.ProcessBuilder.Redirect;
import java.net.URI;
import java.util.ArrayList;
import java.util.Map;
import com.google.common.base.Joiner;
import com.google.common.base.MoreObjects;
import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
import net.gdface.utils.NetworkUtil;
/**
* 本地webredis服务控制器
* 如果webredis指定为本机服务,则尝试连接,连接不上则尝试启动
* @author guyadong
*
*/
public class WebredisController extends BaseServiceController {
private final static Predicate RESPONSE_VALIDATOR = new Predicate() {
@Override
public boolean apply(String input) {
return null == input ? false : input.startsWith("webredis");
}
};
/** webredis服务参数 */
private final Map parameters;
/**
* 构造方法
* @param prameters webredis连接参数
*/
WebredisController(Map prameters) {
this.parameters = prameters;
String host = (String) parameters.get(WEBREDIS_HOST);
int port = (int) parameters.get(WEBREDIS_PORT);
location = URI.create(String.format("http://%s:%s", host,port));
}
protected boolean testConnect(){
return NetworkUtil.testHttpConnectChecked(location.toString(), RESPONSE_VALIDATOR);
}
/**
* 根据提供的参数启动本地 webredis 服务(node.js)
* @param parameters
* @return node.js进程
*/
@Override
protected Process startLocalServer(){
String nodejsExe = (String) parameters.get(NODEJS_EXE);
String webredisFile = (String) parameters.get(WEBREDIS_FILE);
ArrayList args = Lists.newArrayList();
args.add(nodejsExe);
args.add(webredisFile);
// 命令行指定端口
if(parameters.containsKey(WEBREDIS_PORT)){
args.add("--port=" + parameters.get(WEBREDIS_PORT));
}
/** 优先使用 WEBREDIS_RURL */
if(parameters.containsKey(WEBREDIS_RURI)){
// 命令行指定redis 连接url
args.add("--rurl=" + parameters.get(WEBREDIS_RURI));
}else{
// 命令行指定redis 主机
if(parameters.containsKey(WEBREDIS_RHOST)){
args.add("--rhost=" + parameters.get(WEBREDIS_RHOST));
}
// 命令行指定redis 端口
if(parameters.containsKey(WEBREDIS_RPORT)){
args.add("--rport=" + parameters.get(WEBREDIS_RPORT));
}
// 命令行指定redis 连接密码
if(parameters.containsKey(WEBREDIS_RAUTH)){
args.add("--rauth=" + parameters.get(WEBREDIS_RAUTH));
}
// 命令行指定redis 数据库
if(parameters.containsKey(WEBREDIS_RDB)){
args.add("--rdb=" + parameters.get(WEBREDIS_RDB));
}
}
try {
logger.info("start webredis server(启动webredis服务器) {}",MoreObjects.firstNonNull(parameters.get(WEBREDIS_PORT), DEFAULT_WEBREDIS_PORT));
String cmd = Joiner.on(' ').join(args);
logger.debug("cmd(启动命令): {}",cmd);
return new ProcessBuilder(args)
.redirectError(Redirect.INHERIT)
.redirectOutput(Redirect.INHERIT)
.start();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
protected boolean canStartLocal() {
return parameters.containsKey(NODEJS_EXE)
&& parameters.containsKey(WEBREDIS_FILE);
}
@Override
protected boolean isEmbedded() {
return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy