歡迎您光臨本站 註冊首頁

Hyperf 1.0.5 發布,新增秒級定時任務等多個組件

←手機掃碼閱讀     admin @ 2019-07-17 , reply:0

更新內容

本次更新主要新增了 秒級定時任務 hyper/crontab 組件,以及修復了一些其它組件的 Bug

Added

  • #185 響應(Response) 增加 xml 格式支持;
  • #202 在協程內拋出未捕獲的異常時,默認輸出異常的 trace 信息;
  • #138 #197 增加秒級定時任務組件;

Changed

  • #195 變更 retry() 函數的 $times 參數的行為意義, 表示重試的次數而不是執行的次數;
  • #198 優化 Hyperf\Di\Containerhas() 方法, 當傳遞一個不可實例化的示例(如介面)至 $container->has($interface) 方法時,會返回 false
  • #199 當生產 AMQP 消息失敗時,會自動重試一次;
  • #200 通過 Git 打包項目的部署包時,不再包含 tests 文件夾;

Fixed

  • #176 修復 LengthAwarePaginator::nextPageUrl() 方法返回值的類型約束;
  • #188 修復 Guzzle Client 的代理設置不生效的問題;
  • #211 修復 RPC Client 存在多個時會被最後一個覆蓋的問題;
  • #212 修復 Guzzle Client 的 ssl_keycert 配置項不能正常工作的問題;

定時任務

通常來說,執行定時任務會通過 Linux 的 crontab 命令來實現,但現實情況下,並不是所有開發人員都能夠擁有生產環境的伺服器去設置定時任務的,這裡 hyperf/crontab 組件為您提供了一個 秒級 定時任務功能,只需通過簡單的定義即可完成一個定時任務的定義。

安裝


composer require hyperf/crontab

使用

啟動任務調度器進程

在使用定時任務組件之前,需要先在 config/autoload/processes.php 內註冊一下 Hyperf\Crontab\Process\CrontabDispatcherProcess 自定義進程,如下:


<?php
// config/autoload/processes.php
return [
    Hyperf\Crontab\Process\CrontabDispatcherProcess::class,
];

這樣服務啟動時會啟動一個自定義進程,用於對定時任務的解析和調度分發。如果您沒有註冊該進程,亦可理解為您關閉了定時任務功能。

定義定時任務

通過配置文件定義

您可於 config/autoload/crontab.php 的配置文件內配置您所有的定時任務,文件返回一個 Hyperf\Crontab\Crontab[] 結構的數組,如配置文件不存在可自行創建:


<?php
// config/autoload/crontab.php
use Hyperf\Crontab\Crontab;
return [
    (new Crontab())->setName('Foo')->setRule('* * * * *')->setCallback([App\Task\FooTask::class, 'execute'])->setMemo('這是一個示例的定時任務'),
];

通過註解定義

通過 @Crontab 註解可以快速完成對一個任務的定義,以下的定義示例與配置文件定義所達到的目的都是一樣的。定義一個名為 Foo 每分鐘執行一次 App\Task\FooTask::execute() 的定時任務。


<?php
namespace App\Task;

use Hyperf\Contract\StdoutLoggerInterface;
use Hyperf\Crontab\Annotation\Crontab;

/**
 * @Crontab(name="Foo", rule="* * * * *", callback="execute", memo="這是一個示例的定時任務")
 */
class FooTask
{

    /**
     * @Inject()
     * @var \Hyperf\Contract\StdoutLoggerInterface
     */
    private $logger;

    public function execute()
    {
        $this->logger->info(date('Y-m-d H:i:s', time()));
    }
}

任務屬性

name

定時任務的名稱,可以為任意字元串,各個定時任務之間的名稱要唯一。

rule

定時任務的執行規則,在分鐘級的定義時,與 Linux 的 crontab 命令的規則一致,在秒級的定義時,規則長度從 5 位變成 6 位,在規則的前面增加了對應秒級的節點,如 */5 * * * * * 則代表每 5 秒執行一次。注意在註解定義時,規則存在 \ 符號時,需要進行轉義處理,即填寫 *\/5 * * * * *

callback

定時任務的執行回調,即計劃任務實際執行的代碼,在通過配置文件定義時,這裡需要傳遞一個 [$class, $method] 的數組,$class 為一個類的全稱,$method$class 內的一個 public 方法。當通過註解定義時,只需要提供一個當前類內的 public 方法的方法名即可,如果當前類只有一個 public 方法,您甚至可以不提供該屬性。

memo

定時任務的備註,該屬性為可選屬性,沒有任何邏輯上的意義,僅供開發人員查閱幫助對該計劃任務的理解。

調度分發策略

定時任務在設計上允許通過不同的策略來調度分發執行任務,目前僅提供了 多進程執行策略協程執行策略 兩種策略,默認為 多進程執行策略,後面的迭代會增加更多更強的策略。

更改調度分發策略

通過在 config/dependencies.php 更改 Hyperf\Crontab\Strategy\StrategyInterface 介面類所對應的實例來更改目前所使用的策略,默認情況下使用 多進程執行策略,對應的類為 Hyperf\Crontab\Strategy\ProcessStrategy,如我們希望更改策略為一個新的策略,比如為 App\Crontab\Strategy\FooStrategy,那麼如下:


<?php
return [
    'dependencies' => [
        \Hyperf\Crontab\Strategy\StrategyInterface::class => \App\Crontab\Strategy\FooStrategy::class,
    ],
];

多進程執行策略

策略類:Hyperf\Crontab\Strategy\ProcessStrategy

默認情況下使用此策略,即為 CrontabDispatcherProcess 進程解析定時任務,並通過進程間通訊輪訓傳遞執行任務到各個 Worker 進程中,由各個 Worker 進程以協程來實際運行執行任務。

協程執行策略

策略類:Hyperf\Crontab\Strategy\CoroutineStrategy

默認情況下使用此策略,即為 CrontabDispatcherProcess 進程解析定時任務,並在進程內為每個執行任務創建一個協程來運行。

關於 Hyperf

Hyperf 是基於 Swoole 4.3+ 實現的高性能、高靈活性的 PHP 協程框架,內置協程伺服器及大量常用的組件,性能較傳統基於 PHP-FPM 的框架有質的提升,提供超高性能的同時,也保持著極其靈活的可擴展性,標準組件均均基於 PSR 標準 實現,基於強大的依賴注入設計,保證了絕大部分組件或類都是 可替換可復用 的。     框架組件庫除了常見的協程版的 MySQL 客戶端Redis 客戶端,還為您準備了協程版的 Eloquent ORMWebSocket 服務端及客戶端JSON RPC 服務端及客戶端GRPC 服務端及客戶端Zipkin (OpenTracing) 客戶端Guzzle HTTP 客戶端Elasticsearch 客戶端Consul 客戶端ETCD 客戶端AMQP 組件Apollo 配置中心阿里雲 ACM 應用配置管理基於令牌桶演算法的限流器通用連接池熔斷器Swagger 文檔生成 等組件,省去了自己實現對應協程版本的麻煩,Hyperf 還提供了 基於 PSR-11 的依賴注入容器註解AOP 面向切面編程基於 PSR-15 的中間件自定義進程基於 PSR-14 的事件管理器Redis/RabbitMQ 消息隊列自動模型緩存基於 PSR-16 的緩存 等非常便捷的功能,滿足豐富的技術場景和業務場景,開箱即用。

框架初衷

儘管現在基於 PHP 語言開發的框架處於一個百花爭鳴的時代,但仍舊未能看到一個優雅的設計與超高性能的共存的完美框架,亦沒有看到一個真正為 PHP 微服務鋪路的框架,此為 Hyperf 及其團隊成員的初衷,我們將持續投入並為此付出努力,也歡迎你加入我們參與開源建設。

設計理念

Hyperspeed + Flexibility = Hyperf,從名字上我們就將 超高速靈活性 作為 Hyperf 的基因。

  • 對於超高速,我們基於 Swoole 協程並在框架設計上進行大量的優化以確保超高性能的輸出。
  • 對於靈活性,我們基於 Hyperf 強大的依賴注入組件,組件均基於 PSR 標準 的契約和由 Hyperf 定義的契約實現,達到框架內的絕大部分的組件或類都是可替換的。

基於以上的特點,Hyperf 將存在豐富的可能性,如實現 Web 服務,網關服務,分散式中間件,微服務架構,遊戲伺服器,物聯網(IOT)等。

文檔齊全

我們投入了大量的時間用於文檔的建設,以解決各種因為文檔缺失所帶來的問題,文檔上也提供了大量的示例,對新手同樣友好。

生產可用

我們為組件進行了大量的單元測試以保證邏輯的正確,同時維護了高質量的文檔,在 Hyperf 正式對外開放(2019年6月20日)之前,便已在一家 C輪 和一家 B輪 互聯網公司上線了多個服務並以穩定的姿態完美的運行了超過半年時間,經過了嚴酷的生產環境的考驗,我們才正式的對外開放該項目。

Hyperf 官網   


[admin ]

來源:OsChina
連結:https://www.oschina.net/news/108314/hyperf-1-0-5-released
Hyperf 1.0.5 發布,新增秒級定時任務等多個組件已經有294次圍觀

http://coctec.com/news/all/show-post-210069.html