进度阐明(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 和 Jaeger。

追踪办法调用(注解)

仅应用容器实例化的对象办法可被追踪
<?phpdeclare(strict_types=1);namespace app\Service;use Imi\OpenTracing\Annotation\Tag;use Imi\OpenTracing\Annotation\Trace;class TestService{    /**     * @Trace("add")     * @Tag(key="method.params.a", value="{params.0}")     * @Tag(key="method.params.b", value="{params.1}")     * @Tag(key="method.returnValue", value="{returnValue}")     * @Tag(key="method.message", value="{params.0}+{params.1}={returnValue}")     *     * @param int|float $a     * @param int|float $b     *     * @return int|float     */    public function add($a, $b)    {        return $a + $b;    }}

下面的代码追踪的操作是 add@Trace 也能够不指定操作名称,默认是:类名::办法名()

@Tag 是可选的,记录一些标签数据。{params.0} 就是代入办法的第一个参数值;{returnValue} 是代入办法的返回值。

你甚至能够应用 params.0.idreturnValue.name 相似这种写法,获取类型为数组或对象的属性值。

手动追踪

在以后服务中减少追踪:

use Imi\OpenTracing\Facade\Tracer;// 开始$scope = Tracer::startActiveSpan('write1');// ...// 这里能够做一些事件// 完结$scope->close();

用一个服务名追踪:

use Imi\OpenTracing\Facade\Tracer;// 创立 Tracer$tracer = Tracer::createTracer('redis');// 开始$scope1 = TracerUtil::startRootActiveSpan($tracer, 'test1');// ...// 这里能够做一些事件// 能够持续在 test1 下减少追踪$scope2 = $tracer->startActiveSpan('test1-1');// ...// 这里能够做一些事件// 完结 test1-1$scope2->close();// ...// 这里能够做一些事件// 完结$scope1->close();$tracer->flush();

异样类疏忽追踪

在异样类上加上 @IgnoredException 注解,捕捉到该注解时不会认为谬误

<?phpdeclare(strict_types=1);namespace app\Exception;use Imi\OpenTracing\Annotation\IgnoredException;use RuntimeException;/** * @IgnoredException */class GGException extends RuntimeException{}

配置及更多用法详见文档:https://doc.imiphp.com/v2.1/c...

近期开发计划

  • 持续保护迭代 imi 外围性能万年不变
  • 深耕微服务生态,为 imi 接入反对更多中间件

如果你对开源和 imi 我的项目感兴趣,无妨一起来开发。

只需开发一个受认可的 imi 组件或基于 imi 的开源我的项目,即可成为 imi 开发组成员之一。


imi 介绍

imi 是一款反对长连贯微服务分布式的 PHP 开发框架,它能够运行在 PHP-FPM、Swoole、Workerman、RoadRunner 等多种容器环境下。

imi 领有丰盛的性能组件,v2.1 版本内置了 2 个分布式长连贯服务的解决方案。

imi 框架当初曾经稳固运行在:文旅电商平台、物联网充电云平台、停车云平台、领取微服务、短信微服务、钱包微服务、卡牌游戏服务端、数据迁徙服务(虎扑)等我的项目中。

imi 第一个版本公布于 2018 年 6 月 21 日

我的项目地址

  • Github:https://github.com/imiphp/imi
  • Gitee:https://gitee.com/yurunsoft/IMI
  • 官网:https://www.imiphp.com/
  • 文档:https://doc.imiphp.com/v2.1/

取得过的荣誉

  • InfoQ 举荐:https://mp.weixin.qq.com/s/oB...
  • 码云 GVP 我的项目:https://gitee.com/yurunsoft/IMI

开发组成员

宇润(张润宇),94年植树节生,无锡人。Swoole 开发组成员、php-src 内核贡献者、TDengine 贡献者、2021 中国开源码力榜前百名。
开源我的项目包含但不限于:imi、PaySDK、YurunHttp、Guzzle-Swoole、YurunOAuthLogin、ChineseUtil 等
Github:https://github.com/Yurunsoft


NHZEX,次要奉献:代码优化、bug修复、测试优化、PHP 8.1 兼容
Github:https://github.com/NHZEX


封尘,93年,狮子座,宣城人。imi 框架开发组成员,开源作者。
开源我的项目包含但不限于:fcup、mjs、university font icon library、fcphp、fcblog 等
次要奉献:imi 晚期用户,imi 1.0、2.0 官网页面作者
Github:https://github.com/lovefc


阿诺Eno,99年出世,成都人,全栈程序员(主后端),医学生(本科护理学业余),硕士二战考生。
罕用编程语言PHP、NodeJs等,imi 框架开发组成员。

一名热衷于用代码发明世界的护士小哥,独爱PHP,大学期间主导过20多个次要以PHP为后端的WEB我的项目的开发,具备丰盛的码农教训,也善于接国内外软件毕业设计。

次要奉献:文档编写、bug 修复

Github:https://github.com/Gumo666


青玄Chris,96年,广东人,时长n年半的PHP练习生,喜爱唱\跳\RAP\PHP , imi 框架开发组成员

喜爱参加开源用爱发电,imi 框架开发组成员 ,EasySwoole社区贡献者

次要奉献:imi-etcd 作者

Github:https://github.com/ChrisLeeAr...