public function discovery(array $group, array $report)
{
$self = $this;
$this->monitorProcess = new \swoole_process(function () use($group, $report, $self) {
while (true) {
// 上报的服务器IP
$reportServerIP = $self->getLocalIp();
swoole_set_process_name("dora: monitor (" . $reportServerIP . ")");
foreach ($report as $discovery) {
foreach ($discovery as $config) {
if (trim($config["ip"]) && $config["port"] > 0) {
$key = $config["ip"] . "_" . $config["port"];
try {
if (!isset($_redisObj[$key])) {
//if not connect
$_redisObj[$key] = new \Redis();
$_redisObj[$key]->connect($config["ip"], $config["port"]);
}
//register this server
$_redisObj[$key]->sadd("dora.serverlist", json_encode(array("node" => array("ip" => $reportServerIP, "port" => $self->serverPort), "group" => $group)));
//set time out
$_redisObj[$key]->set("dora.servertime." . $reportServerIP . "." . $self->serverPort . ".time", time());
echo "Reported Service Discovery:" . $config["ip"] . ":" . $config["port"] . PHP_EOL;
} catch (\Exception $ex) {
$_redisObj[$key] = null;
echo "connect to Service Discovery error:" . $config["ip"] . ":" . $config["port"] . PHP_EOL;
}
}
sleep(10);
//sleep 10 sec and report again
}
// config foreach
}
//discover foreach
}
});
$this->server->addProcess($this->monitorProcess);
}