imi 框架微服务生态开发第一阶段完成 20221014

宇润 -
imi 框架微服务生态开发第一阶段完成 20221014
进度说明(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。

追踪方法调用(注解)仅使用容器实例化的对象方法可被追踪
<?php

declare(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 注解,捕获到该注解时不会认为错误

<?php

declare(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/imiGitee: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...

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

php介绍

PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。

Tags 标签

phpswoole微服务服务发现追踪

扩展阅读

加个好友,技术交流

1628738909466805.jpg