webman有熔断器吗?实现降级,找了一个第3方的但是好像有问题

bigman

https://github.com/mix-php/micro-hystrix/blob/master/src/CircuitBreaker.php

第106行好像对并发没效果的

// 最大并发数,超过并发返回错误
'maxConcurrentRequests' => 5,

这个属性没有用

1333 2 0
2个回答

不败少龙

改成1就会进入错误信息

  • bigman 2021-09-23

    这个熔断器是有问题的对吧?

  • 不败少龙 2021-09-23

    这个要基于Swoole才可以吧 单独用是没有效果

  • 不败少龙 2021-09-23

    并发1个就进入 返回熔断 页没有错 改成其他的就不会出现熔断

  • bigman 2021-09-23

    嗯 所以想说 能否在workerman这边实现一个熔断器,或者要怎么改?

  • 不败少龙 2021-09-23

    这个不知道哦 !只是在网上抄袭了节流, 不知道怎么去弄 ,这个是我在网上抄的 不知道怎么整合到webman了
    $host = request()->host();
    // 健康检查
    $healthStats = new HealthStats($host, 10, 0.8);
    // 熔断器
    $circuitBreaker = new CircuitBreaker($healthStats, 6, 3);
    for ($i = 0; $i < 10; ++$i) {
    if (!$circuitBreaker->isBreak()) {
    $resp = rand(0, 10); // 模拟调用成功/失败
    if ($resp == 0) {
    $healthStats->fail();
    } else {
    $healthStats->success();
    }
    } else {
    $msg = "触发熔断机制";
    return json(['code' => 500, 'msg' => $msg]);
    }
    }

  • bigman 2021-09-23

    我找的这个比较好,如果不考虑并发的话 只考虑timeout是
    完全可以的

  • bigman 2021-09-23

    并发的话 他也只能是单个进程的并发

  • 不败少龙 2021-09-23

    哦!那你除了并发那个 其他的都是可以起到效果吗

  • bigman 2021-09-23

  • bigman 2021-09-23

    实在不行 节流这块就单独拎出来做也可以

  • bigman 2021-09-23

    我是怕麻烦 最好一个小组件解决就比较完美

  • 不败少龙 2021-09-23

    那你怎么测试的 我测试一直是成功 没有返回熔断

  • bigman 2021-09-23

    rpc 远端弄个sleep 时间长点 来测试

  • 不败少龙 2021-09-23

    哦! 必须是rpc模式才能吗?

  • bigman 2021-09-23

    对的

xiuwang

你咋测试的 并发没效果的?

  • bigman 2021-09-23

    开一个进程,然后ab 压

  • xiuwang 2021-09-23

    一个进程就一个并发,压不出来吧。maxConcurrentRequests改成2,多开几个进程压试下

  • bigman 2021-09-23

    ???并发请求到一个进程啊!怎么压不出来啊?

  • xiuwang 2021-09-23

    进程里是排队一个一个处理的,所以同一时刻只是一个并发

  • bigman 2021-09-23

    所以单位时间内看处理几个请求

年代过于久远,无法发表回答
🔝