当前位置: 首页 > 后端技术 > PHP

?Hyperf发布二级定时任务组件及多组件v1.0.5更新-企业级PHP微服务协程框架

时间:2023-03-29 17:19:51 PHP

更新内容本次更新主要增加了二级定时任务hyper/crontab组件,修复了BugAdded#185其他部分组件的响应(Response)增加了xml格式支持;#202协程抛出未捕获异常时,默认输出异常的trace信息;#138#197添加秒级定时任务组件;Changed#195更改retry()函数的$times参数的行为含义,表示重试次数,而不是执行次数;#198优化Hyperf\Di\Container的has()方法,当向$container->has($interface)方法传递不可实例化的实例(如interface)时,会返回false;#199AMQP消息制作失败时,会自动重试一次;#200项目的部署包通过Git打包时,不再包含tests文件夹;修复#176修复LengthAwarePaginator::nextPageUrl()方法返回值的类型约束;#188修复GuzzleClient代理设置不生效的问题;#211修复多个RPCClient时,会被最后一个覆盖的问题;#212修复GuzzleClient的ssl_key和cert配置项不能正常使用的问题;定时任务一般来说,定时任务的执行会通过Linux的crontab命令来实现,但在现实中并不是所有的开发者都可以在生产环境的服务器上设置定时任务,这里的hyperf/crontab组件为大家提供了一个二级定时任务功能,只需简单定义即可完成定时任务的定义。安装composerrequirehyperf/crontab启动任务调度进程在使用计划任务组件之前,需要在config/autoload/processes.php中注册Hyperf\Crontab\Process\CrontabDispatcherProcess自定义进程,如下:true,];通过配置文件定义定义定时任务你可以在config/autoload/crontab.php配置文件中配置你所有的定时任务,该文件返回一个Hyperf\Crontab\Crontab[]结构的数组,如果配置文件没有存在,可以自己创建:true,//配置文件定义的定时任务'crontab'=>[(newCrontab())->setName('Foo')->setRule('*****')->setCallback([App\Task\FooTask::class,'execute'])->setMemo('这是一个定时任务的例子'),],];通过注解定义@Crontab注解可以用来快速完成任务的定义。以下定义示例与配置文件定义的目的相同。定义一个名为Foo的cron任务,它每分钟执行一次App\Task\FooTask::execute()。logger->info(date('Y-m-dH:i:s',time()));}}任务属性name定时任务的名称,可以是任意字符串,每个定时任务的名称必须是唯一的。rule定时任务的执行规则与linuxcrontab命令在分钟级定义时的规则一致。在二级定义时,规则的长度由5位变为6位,并在规则前面加上相应的二级。节点,比如*/5*****表示每5秒执行一次。注意,注解定义时,如果规则中有\符号,需要进行转义,即填写*\/5*****。callback定时任务的执行回调,即定时任务实际执行的代码。通过配置文件定义的时候,这里需要传入一个[$class,$method]的数组。$class是一个类的全称,$method是$class的一个公共方法。通过注解定义时,只需要提供当前类中一个公共方法的方法名即可。如果当前类只有一个public方法,你甚至可以不提供这个属性。备忘定时任务备注。该属性是可选的,没有逻辑意义。仅供开发者参考,帮助理解定时任务。调度和分配策略定时任务旨在让不同的策略来调度和执行任务。目前只提供两种策略:多进程执行策略和协程执行策略。默认为多进程执行策略,后续迭代会增加。更强的战略。改变调度分配策略,通过改变config/dependencies.php中Hyperf\Crontab\Strategy\StrategyInterface接口类对应的实例来改变当前使用的策略。默认使用多进程执行策略,对应的类是Hyperf\Crontab\Strategy\ProcessStrategy,如果我们想把策略改成新的策略,比如App\Crontab\Strategy\FooStrategy,那么如下:[\Hyperf\Crontab\Strategy\StrategyInterface::class=>\App\Crontab\Strategy\FooStrategy::class,],];多进程执行策略策略类:Hyperf\Crontab\Strategy\ProcessStrategy该策略默认用于为CrontabDispatcherProcess进程解析定时任务,通过进程间通信轮训将执行任务传递给各个Worker进程,以及每个Worker进程使用一个协程来实际运行执行任务。协程执行策略策略类:Hyperf\Crontab\Strategy\CoroutineStrategy该策略默认用于为CrontabDispatcherProcess进程解析定时任务,为进程内的每个执行任务创建一个协程来运行。关于HyperfHyperf是一个基于Swoole4.3+的高性能、高灵活性的PHP协程框架。它内置协程服务器和大量常用组件。同时,它还保持着极其灵活的可扩展性。标准组件均基于PSR标准实现。基于强大的依赖注入设计,保证大部分组件或类是可替换和可重用的。框架组件库除了常见的协程版MySQL客户端和Redis客户端,还为你准备了协程版EloquentORM、WebSocket服务端和客户端、JSONRPC服务端和客户端、GRPC服务端和客户端客户端、Zipkin(OpenTracing)客户端、GuzzleHTTP客户端、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轮互联网公司推出多项服务,并以稳定的姿态完美运行了半年多。经过严酷的生产环境考验,我们正式对外开放项目。官网和Github通信?点星支持我们Hyperf官网QQ群:862099724