当前位置: 首页 > 后端技术 > PHP

imi框架微服务生态一期开发完成20221014

时间:2023-03-29 17:29:03 PHP

进度说明(20221014)距离上次更新进度已经一个月了,在此期间,imi的微服务生态已经完成服务发现(负载均衡)(Nacos)和呼叫链接跟踪(Zipkin和Jaeger)。至此,imi框架已经打通了:配置中心、服务注册、服务发现(负载均衡)、调用链路跟踪、服务限流。imi现在完全可以满足常见的微服务需求。服务发现(负载均衡)目前实现的是Nacos服务发现,imi开发了3种负载均衡器:随机、轮询、加权。获取服务可用节点:/**@var\Imi\Service\Discovery\ServiceDiscovery$serviceDiscovery*/$serviceDiscovery=\Imi\App::getBean('ServiceDiscovery');$service=$serviceDiscovery->getInstance('服务名称');$service->getInstanceId();//实例ID,string$service->getServiceId();//服务ID,string$service->getWeight();//权重,float$service->getUri();//\Imi\Util\Uri$service->getMetadata();//元数据,数组//获取服务实例的ip和端口的常用方式$uri=$service->getUri();$host=$uri->getHost();$port=$uri->getPort();配置和更多使用请参考文档:https://doc.imiphp.com/v2.1/c...调用链路追踪imi基于OpenTracing协议接入调用链路追踪,目前支持:Zipkin和杰格。跟踪方法调用(注解)只能使用容器实例化对象方法进行跟踪/***@Trace("add")*@Tag(key="method.params.a",value="{params.0}")*@Tag(key="method.params.b",值="{params.1}")*@Tag(key="method.returnValue",value="{returnValue}")*@Tag(key="method.message",value="{params.0}+{params.1}={returnValue}")**@paramint|float$a*@paramint|float$b**@returnint|float*/publicfunctionadd($a,$b){return$一个+$b;}}上面代码跟踪的操作是add,@Trace也可以不指定操作名,默认为:类名::方法名()@Tag可选,记录一些标签数据。{params.0}为替换方法的第一个参数值;{returnValue}是替换方法的返回值。甚至可以用类似这种写法的params.0.id,returnValue.name来获取数组或对象类型的属性值。手动跟踪添加跟踪到当前服务:useImi\OpenTracing\Facade\Tracer;//start$scope=Tracer::startActiveSpan('write1');//...//你可以在这里做一些事情//end$scope->close();使用服务名称进行跟踪:useImi\OpenTracing\Facade\Tracer;//createTracer$tracer=Tracer::createTracer('redis');//start$scope1=TracerUtil::startRootActiveSpan($tracer,'test1');//...//你可以在这里做一些事情//你可以在test1下继续添加跟踪$scope2=$tracer->startActiveSpan('test1-1');//...//这里有一些要做的事情//结束test1-1$scope2->close();//...//这里要做一些事情//end$scope1->close();$tracer->flush();异常类忽略跟踪在异常类中添加@IgnoredException注解,捕获到该注解时不会认为是错误