php与微服务
公司的系统根本就没有容错机制。所以想到了java微服务。
首先是需要一个注册中心 getService.php
<?php $array = ["produce" => [ ["url" => "http://127.0.0.1/testSwitch/producer1.php","status" => "1"], ["url" => "http://127.0.0.1/testSwitch/producer2.php","status" => "-1"], ["url" => "http://127.0.0.1/testSwitch/producer3.php","status" => "-1"], ] ]; echo json_encode($array); ?>
三个服务提供者,用status表示状态。
<?php //用来测试超时机制 //sleep(120); echo "producer1"; ?>
服务的消费方,调用者。
主要是三步。第一步,获取可以调用的服务。第二步,选择一个服务。第三步,调用服务。
如果服务中出现问题,可以通知注册中心去修改当前服务的状态,并且同时短信通知到运维人员。这样可以保证下一次调用是正常。
<?php function chooseUrl($urls){ //或者进行异常捕获 $url = null; foreach($urls as $u){ if($u['status'] == -1){ continue; }else{ $url = $u['url']; } } return $url; } function getContent($url){ //或者进行异常捕获 //超时机制 $ctx = stream_context_create(array('http'=> array( 'timeout' => 10, ) )); $content = file_get_contents($url,false,$ctx); return empty($content) ? false : $content; } function getServices($serviceName){ //或者进行异常捕获 $services = file_get_contents('http://127.0.0.1/testSwitch/getService.php'); if(empty($services)){ return false; } $services = json_decode($services,true); $urls = $services[$serviceName]; return empty($urls) ? false : $urls; } function run($serviceName){ $urls = getServices($serviceName); if(!$urls){ //注册中心错误,maybe异常 return false; } $url = chooseUrl($urls); if(empty($url)){ //无可用服务,maybe异常 return false; } $content = getContent($url); if(empty($content)){ //服务错误,更新服务信息。 echo $url." 服务错误 "; return false; } return $content; } $result = run("produce"); if(!$result){ echo "默认的熔断机制"; }else{ echo $result; } ?>
测试1
结果
这里就是手动修改注册中心状态
结果
在将producer的注释取消,进行超时测试
服务器上其他的因素导致服务超时。这样也可以进行状态变更。
相关推荐
zyyjay 2020-11-09
xuebingnan 2020-11-05
samtrue 2020-11-22
stefan0 2020-11-22
yifangs 2020-10-13
songshijiazuaa 2020-09-24
hebiwtc 2020-09-18
天步 2020-09-17
83911535 2020-11-13
whatsyourname 2020-11-13
zhouyuqi 2020-11-10
Noneyes 2020-11-10
mathchao 2020-10-28
王志龙 2020-10-28
wwwsurfphpseocom 2020-10-28
diskingchuan 2020-10-23
savorTheFlavor 2020-10-23