加入收藏 | 设为首页 | 会员中心 | 我要投稿 无锡站长网 (https://www.0510zz.cn/)- 运维、开发、CDN、操作系统、语音技术!
当前位置: 首页 > 教程 > 正文

Swoft 2.0.3 重大更新,发布优雅的微服务治理

发布时间:2022-08-02 14:35:53 所属栏目:教程 来源:互联网
导读:什么是 Swoft ? Swoft 是一款基于 Swoole 扩展实现的 PHP 微服务协程框架。Swoft 能像 Go 一样,内置协程网络服务器及常用的协程客户端且常驻内存,不依赖传统的 PHP-FPM。有类似 Go 语言的协程操作方式,有类似 Spring Cloud 框架灵活的注解、强大的全局依
  什么是 Swoft ?
  Swoft 是一款基于 Swoole 扩展实现的 PHP 微服务协程框架。Swoft 能像 Go 一样,内置协程网络服务器及常用的协程客户端且常驻内存,不依赖传统的 PHP-FPM。有类似 Go 语言的协程操作方式,有类似 Spring Cloud 框架灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等。
 
  Swoft 通过长达三年的积累和方向的探索,把 Swoft 打造成 PHP 界的 Spring Cloud, 它是 PHP 高性能框架和微服务治理的最佳选择。
 
  优雅的服务治理
  Swoft 官方建议开发者使用 Service mesh 模式,比如 Istio/Envoy 框架,把业务和服务治理分开,但是 Swoft 也为中小型企业快速构建微服务提供了一套微服务组件。
 
  服务注册与发现
  服务熔断
  服务限流
  配置中心
  服务注册与发现
  服务注册与发现,需要用到 Swoft 官方提供的 swoft-consul 组件,如果其它第三方也类似。
 
  注册与取消服务
  监听 SwooleEvent::START 事件,注册服务
 
  /**
   * Class RegisterServiceListener
   *
   * @since 2.0
   *
   * @Listener(event=SwooleEvent::START)
   */
  class RegisterServiceListener implements EventHandlerInterface
  {
      /**
       * @Inject()
       *
       * @var Agent
       */
      private $agent;
 
      /**
       * @param EventInterface $event
       */
      public function handle(EventInterface $event): void
      {
          /* @var HttpServer $httpServer */
          $httpServer = $event->getTarget();
 
          $service = [
              // ....
          ];
 
          $scheduler = SwooleCoroutineScheduler();
          $scheduler->add(function () use ($service) {
              // Register
              $this->agent->registerService($service);
              CLog::info('Swoft http register service success by consul!');
          });
          $scheduler->start();
      }
  }
  监听 SwooleEvent::SHUTDOWN 事件,取消服务
 
  /**
   * Class DeregisterServiceListener
   *
   * @since 2.0
   *
   * @Listener(SwooleEvent::SHUTDOWN)
   */
  class DeregisterServiceListener implements EventHandlerInterface
  {
      /**
       * @Inject()
       *
       * @var Agent
       */
      private $agent;
 
      /**
       * @param EventInterface $event
       */
      public function handle(EventInterface $event): void
      {
          /* @var HttpServer $httpServer */
          $httpServer = $event->getTarget();
 
          $scheduler = SwooleCoroutineScheduler();
          $scheduler->add(function () use ($httpServer) {
              $this->agent->deregisterService('swoft');
          });
          $scheduler->start();
      }
  }    
  服务发现
  定义服务提供者
 
  /**
   * Class RpcProvider
   *
   * @since 2.0
   *        
   * @Bean()
   */
  class RpcProvider implements ProviderInterface
  {
      /**
       * @Inject()
       *
       * @var Agent
       */
      private $agent;
 
      /**
       * @param Client $client
       *
       * @return array
       * @example
       * [
       *     'host:port'
       * ]
       */
      public function getList(Client $client): array
      {
          // Get health service from consul
          $services = $this->agent->services();
 
          $services = [
 
          ];
 
          return $services;
      }
  }
  配置服务提供者
 
  return [
      'user'           => [
        'class'   => ServiceClient::class,
        'provider' => bean(RpcProvider::class)
        // ...
      ]
  ];
  服务熔断
  Swoft 使用 @Breaker 注解实现熔断,可以在任何方法上面进行熔断操作。
 
  /**
   * Class BreakerLogic
   *
   * @since 2.0
   *
   * @Bean()
   */
  class BreakerLogic
  {
      /**
       * @Breaker(fallback="funcFallback")
       *
       * @return string
       * @throws Exception
       */
      public function func(): string
      {
          // Do something
 
          throw new Exception('Breaker exception');
      }
      
      /**
       * @return string
       */
      public function funcFallback(): string

(编辑:无锡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读