Hyperf v1.1 版本全解析:ORM 多态查询、异步队列、AMQP 与协程生态的功能演进与实践指南

发布时间:2026/10/9 1:04:53
Hyperf v1.1 版本全解析:ORM 多态查询、异步队列、AMQP 与协程生态的功能演进与实践指南 后端微服务【免费下载链接】hyperf A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.项目地址https://gitcode.com/gh_mirrors/hy/hyperf点击查看免费下载Hyperf v1.1 是协程框架 Hyperf 在 2019 年 10 月至 2020 年 5 月之间滚动发布的稳定版本线v1.1.0 ~ v1.1.32这一时期的更新围绕模型层能力扩充、消息队列成熟化、新组件生态补齐、框架基础设施重构四条主线展开。本文以 docs/zh-hk/changelog/1.1.md 的官方变更记录为主体骨架结合当前仓库源码src 目录对关键实现进行佐证与纵深解读帮助你系统掌握 v1.1 引入的核心 API、配置项与升级注意点并能将其直接应用到基于 Hyperf 的微服务与中间件开发中。v1.1 版本线概览一次面向生态完整性的演进v1.1 从 2019-10-08 的 v1.1.0 发布到 2020-05-21 的 v1.1.32 收尾共经历 30 余次迭代。从变更记录的结构看每个小版本都按新增Added修复Fixed变更Changed优化Optimized移除Deleted分类记录覆盖组件数量快速膨胀异步队列、AMQP、JSON-RPC、gRPC、WebSocket、定时任务、缓存、配置中心、服务治理、验证器、视图引擎等模块几乎每个版本都有改动。纵观整个 v1.1 版本线可以提炼出几条清晰的技术演进主线模型层ORM持续增强多态关联查询方法、自定义类型转换器Custom Casts、模型事件监听、insertOrIgnore等查询能力不断补齐消息队列走向生产级AMQP 与 Async-Queue 相继获得并发控制、重试控制、消费事件、优雅启停与自动重启能力组件生态快速扩张DB、Filesystem、Session、Nats、NSQ、socket.io-server、Super-Globals、Retry、Metric 等新组件在 v1.1 期间密集落地框架基础设施重构注解扫描流程优化、ConfigProvider 结构规范化、container.php精简、Inject增加required参数、DI 容器支持懒加载。下面按主题深入展开。模型层增强多态查询、自定义类型转换器与模型事件多态关联查询方法的补齐v1.1.30 / v1.1.32v1.1.30 新增了 ORM 的morphWith与whereHasMorph方法#1616v1.1.32 又在此基础上补齐了orWhereHasMorph、whereDoesntHaveMorph与orWhereDoesntHaveMorph#1724并修复了多态关联为空时仍会查询 SQL 的问题#1734。这些方法在源码中均有对应实现例如 src/database/src/Model/Concerns/QueriesRelationships.php 中定义了public function whereHasMorph($relation, $types, ?Closure $callback null, $operator , $count 1) public function orWhereHasMorph(MorphTo|string $relation, $types, ?Closure $callback null, string $operator , int $count 1) public function whereDoesntHaveMorph(MorphTo|string $relation, $types, ?Closure $callback null) public function orWhereDoesntHaveMorph(MorphTo|string $relation, $types, ?Closure $callback null)实战要点whereHasMorph用于按多态类型筛选存在性关联$types参数用于限定要检查的多态类型列表whereDoesntHaveMorph系列则取反查询不存在关联的记录。配合 v1.1.32 新增的Model::loadMorph、Model::loadMorphCount可以在预加载Eager Loading阶段按需加载多态关联及其计数。仓库测试 src/database/tests/WhereHasMorphTest.php 与 src/database/tests/ModelMorphEagerLoadingTest.php 提供了完整的用法示例可作参考。自定义类型转换器Custom Castsv1.1.32v1.1.32 为模型引入了自定义类型转换器#1742这是对 Laravel 自定义 Cast 模式的移植让模型属性的存取转换不再局限于内置的int、json、datetime等类型。该功能的核心是三个接口均定义在 src/contract 目录下src/contract/src/Castable.php标记接口要求实现public static function castUsing()用于声明该转换目标实际使用的 Caster 类src/contract/src/CastsAttributes.php双向转换接口需要实现get($model, string $key, $value, array $attributes)数据库值 → 业务值与set($model, string $key, $value, array $attributes)业务值 → 数据库值src/contract/src/CastsInboundAttributes.php仅入站转换接口只需实现set()适合只做写入时转换、读取时保持原值的场景。与之配套的新增 API 包括Model\Builder::withCastssrc/database/src/Model/Builder.php在查询时动态合并 Casts例如Model::query()-withCasts([price decimal:2])用于查询期临时转换不影响模型定义Model::loadMorph、Model::loadMorphCount、Model::syncAttributes补充多态预加载与属性同步能力。从源码看模型属性读写会经过 src/database/src/Model/Concerns/HasAttributes.php 中getClassCastableAttributeValue()/setClassCastableAttribute()/resolveCasterClass()等方法的类 Cast 分发逻辑读取时若 Caster 实现了CastsInboundAttributes则直接返回原值否则调用get()同时引入classCastCache对对象型转换结果做缓存。仓库测试 src/database/tests/DatabaseModelCustomCastingTest.php 覆盖了大小写转换、序列化往返、syncOriginal等典型场景例如其中验证了$model-uppercase taylor后读回、getAttributes()与toArray()均得到TAYLOR。模型事件机制v1.1.0v1.1.0 为数据库模型增加了新的事件机制#420与 PSR-15 风格的事件调度器配合可以用解耦的 Listener 监听模型事件创建、更新、删除等生命周期回调替代在模型中直接覆写钩子方法的做法。查询能力补充v1.1.13v1.1.13 为database组件新增了insertOrIgnore方法#1204在 src/database/src/Query/Builder.php 中实现public function insertOrIgnore(array $values): int它生成INSERT IGNORE语义的 SQL冲突时静默跳过适合批量导入等场景同版本还为其配套了insertOrIgnoreUsing支持子查询或 Builder 作为数据源。异步队列 Async-Queue从注解到生产级消费控制AsyncQueueMessage注解与maxAttemptsv1.1.0 / v1.1.24v1.1.0 新增AsyncQueueMessage注解#402将注解标注在方法上该方法的实际执行逻辑会被投递给异步队列消费而不再同步执行。v1.1.24 为该注解增加了maxAttempts参数#1502用于控制消息失败时的最大重试重复消费次数。当前源码中的注解定义见 src/async-queue/src/Annotation/AsyncQueueMessage.php#[Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_METHOD)] class AsyncQueueMessage extends AbstractAnnotation { public function __construct( public string $pool default, public int $delay 0, public int $maxAttempts 0 ) { } }注解可同时作用于类与方法TARGET_CLASS | TARGET_METHOD三个参数的含义分别是参数默认值说明pooldefault使用的异步队列连接池名称delay0消息延迟投递的秒数maxAttempts0最大重试次数0表示不限制该注解由切面 src/async-queue/src/Aspect/AsyncQueueAspect.php 解析并创建AnnotationJob投递。全局dispatch()函数src/async-queue/src/Functions.php同样支持通过第三个参数$maxAttempts动态设置重试次数。注意注解的类注释明确提示不要在异步队列环境内再次调用带此注解的方法因为执行/投递逻辑取决于当前是否处于异步队列环境重复投递会被当作直接执行。消费速率控制与阶梯式重试v1.1.0v1.1.0 为 Async-Queue 消费者引入了两类能力#597、#599使用Concurrent控制消费速率避免瞬时压力过大支持根据当前重试次数设置阶梯式的重试等待时长——消息第几次失败就等待相应的秒数后再入队适合对上游有节流要求的业务。自动重启与QueueLength事件v1.1.0 / v1.1.16 / v1.1.18v1.1.0 为消费者增加了自动重启机制#620当消费进程异常退出后能够自动拉起。v1.1.16 新增QueueLength事件#1263用于在队列积压达到阈值时触发告警或扩容逻辑v1.1.18 起QueueLengthListener不再作为 Async-Queue 组件的默认监听器#1324需要时自行注册避免默认行为带来的额外负担。v1.1.23 还调整了消息创建方式改用make()而非new#1481使消息对象可以享受依赖注入容器管理。AMQP 组件并发限流、消费事件与 RPC 模式消费者配置体系的完善AMQP 消费者在 v1.1 期间获得了大量可配置能力逐版本累积如下版本能力PRv1.1.2concurrent.limit配置限制协程消费速率#722v1.1.3AfterConsume、BeforeConsume、FailToConsume消费事件#747v1.1.9basic_qos配置预取数量控制#1044v1.1.14消费者enable属性控制是否跟随 Server 启动#1219v1.1.27maxConsumption最大消费次数#1597源码佐证消费注解 src/amqp/src/Annotation/Consumer.php 声明了enable与maxConsumption参数消息基类 src/amqp/src/Message/ConsumerMessage.php 中维护了qos数组、enable布尔值默认true与maxConsumption默认0即不限次及对应的 getter/setter消费进程 src/amqp/src/ConsumerManager.php 会根据注解的enable决定是否将消费者注册进 Server。concurrent.limit的底层实现位于 src/amqp/src/Consumer.php它从配置amqp.pool.concurrent.limit读取数值大于 1 时创建Concurrent实例在收到每条消息时通过$concurrent-create($callback)开启受限并发消息处理完毕还会调用waitConcurrentHandled()等待并发任务收尾最长约 5 秒确保进程退出前消息处理完成。Result::NACK返回类型v1.1.0v1.1.0 为 AMQP 消费者增加了nack返回类型#648当消费逻辑返回Hyperf\Amqp\Result::NACK时抽象消费者会调用basic_nack方法响应消息对应源码见 src/amqp/src/Consumer.php。当前仓库中Result已是枚举类src/amqp/src/Result.php提供ACK与NACK两个 caseConsumerMessage的默认消费结果即为Result::ACKsrc/amqp/src/Message/ConsumerMessage.php。通过返回不同的Result你可以在一个消费者内精细控制单条消息是确认还是拒绝。KeepaliveIO 与连接生命周期v1.1.14 / v1.1.15 / v1.1.7v1.1.14 为 AMQP 增加KeepaliveIO功能#1166通过定时发送心跳维持长连接v1.1.15 修复了心跳发送失败导致子进程 Socket 通信不可用的问题#1258v1.1.7 新增close_on_destruct选项#976控制代码在析构阶段是否主动关闭连接v1.1.14 优化生产者在执行declare后释放对应连接#1235v1.1.32 修复了使用其他连接池时concurrent.limit配置不生效的问题#1748。AMQP RPC 模式v1.1.30v1.1.30 新增了 AMQP RPC 客户端支持#1666、#1669将 AMQP 从单向消息投递扩展为可承载请求-响应的 RPC 通信与 docs/zh-hk/amqp.md 中描述的 AMQP 组件使用方式配套。命令行工具链gen:model 选项矩阵与 describe:routesgen:model命令v1.1.0 ~ v1.1.31v1.1.0 将db:model命令重命名为gen:model#638并在此后的版本中持续增加选项版本新增选项PRv1.1.0table-mapping表名到模型类名的映射#523v1.1.0默认生成单数类名复数表名 → 单数模型类名#523v1.1.2ignore-tables忽略表默认屏蔽migrations表#678v1.1.3with-comments生成字段注释#745v1.1.19property-case设置成员属性命名风格0snake1camel#1384v1.1.27生成relation、scope、attributes变量注释#1575v1.1.31--refresh-fillable增加简写-R#1730当前源码 src/database/src/Commands/ModelCommand.php 完整保留了这些选项的注册$this-addOption(refresh-fillable, R, InputOption::VALUE_NONE, Whether generate fillable argument for model.); $this-addOption(table-mapping, M, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, Table mappings for model.); $this-addOption(ignore-tables, null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, Ignore tables for creating models.); $this-addOption(with-comments, null, InputOption::VALUE_NONE, Whether generate the property comments for model.); $this-addOption(property-case, null, InputOption::VALUE_OPTIONAL, Which property case you want use, 0: snake case, 1: camel case.);除命令行选项外所有配置均可写入commands.gen:model配置项如commands.gen:model.refresh_fillable、commands.gen:model.table_mapping实现配置化生成模型。describe:routes命令v1.1.19v1.1.19 新增describe:routes命令#1339、#1394用于在命令行查看路由细节。其实现位于 src/devtool/src/Describe/RoutesCommand.php支持两个选项--path/-p按路径关键字过滤--server/-S指定要查看的 Server默认http。命令内部通过DispatcherFactory获取指定 Server 的路由收集器分别解析静态路由与带参数路由variableRouters对每个 Handler 输出方法、URI 与 ActionController 方法或Closure。v1.1.27 修复了路由 Handler 是匿名函数时该命令执行失败的问题#1624。Command 事件与choiceMultiplev1.1.4 / v1.1.18 / v1.1.32v1.1.4 为 Command 增加BeforeHandle、AfterHandle、FailToHandle事件#804v1.1.18 增加AfterExecute事件#1335v1.1.32 新增Hyperf\Command\Command::choiceMultiple(): array#1741。动机很明确基类choice()方法的返回类型是string即使设置了$multiple参数也无法处理多选结果choiceMultiple()以array类型返回才能真正拿到多选值。底层实现见 src/command/src/Concerns/InteractsWithIO.php它基于 Symfony 的ChoiceQuestion并通过setMultiselect($multiple)开启多选。新组件图谱DB、Filesystem、Session、Nats、NSQ、socket.io-server 等v1.1 是 Hyperf 组件数量增长最快的时期几乎每两三个版本就会落地一个新组件组件引入版本核心能力DBv1.1.6#827极简高性能 DB 组件v1.1.19 增加DB::connection()指定连接#1371Sessionv1.1.6#921会话管理v1.1.21 允许通过配置修改session_name#1424Natsv1.1.5#820NATS 消息平台客户端v1.1.6 增加消费者消费/订阅事件NSQv1.1.17#1321实时分布式消息平台 NSQ 客户端Filesystemv1.1.22#1451文件系统组件v1.1.23 增加默认配置#1467socket.io-serverv1.1.30#1651socket.io 协议服务端super-globalsv1.1.14#1215适配不支持 PSR-7 的第三方包Retryv1.1.7#860重试组件Metricv1.1.4#784监控指标v1.1.16 增加 NoOp 驱动、v1.1.18 增加预制 Grafana 面板Zookeeper 配置中心v1.1.6#941配置中心适配这些组件对应源码目录均可在 src 下找到例如 src/db、src/session、src/nats、src/nsq、src/filesystem、src/socketio-server、src/super-globals、src/retry、src/metric。定时任务的单实例执行v1.1.5 / v1.1.6v1.1.5 新增了计划任务在集群下仅执行一次的支持#812v1.1.6 补充了多实例环境下只运行单一实例定时任务的能力#911。对应模型属性在 src/crontab/src/Crontab.php 中为singleton与onOneServer默认均false注解 src/crontab/src/Annotation/Crontab.php 提供同名可选参数监听器 src/crontab/src/Listener/CrontabRegisterListener.php 负责把注解值写入任务对象。v1.1.17 还为 crontab 组件增加了 Command 模式支持#1313即定时任务可以直接执行命令而非仅调用方法。v1.1.26 修复了服务关停后onOneServer配置不会重置的问题#1563。依赖注入容器懒加载、新方法与启动协调DI 容器能力扩展v1.1.9 / v1.1.24v1.1.9 为 DI Container 增加懒加载功能#948同时增加define()与set()方法并新增Hyperf\Contract\ContainerInterface#1056、#1081v1.1.24 为懒加载功能增加了对接口继承和抽象方法继承的支持#1517。Inject的required参数v1.1.0v1.1.0 为Inject注解增加了required参数#596当定义Inject(requiredfalse)时若依赖不存在则不会抛出Hyperf\Di\Exception\NotFoundException而是以默认值null注入required默认值为true。构造器注入场景下可以通过将参数声明为nullable或给默认值null达到同样效果。CoordinatorManager优雅启停v1.1.24v1.1.24 新增Hyperf\Utils\CoordinatorManager#1510当前位于 src/coordinator/src/CoordinatorManager.php用于提供更优雅的启动与停止服务启动前不响应请求服务停止前保证某些循环逻辑能够正常结束。其 API 包括CoordinatorManager::initialize(string $identifier): void // 初始化一个 Coordinator CoordinatorManager::until(string $identifier): Coordinator // 获取 Coordinator不存在时自动创建 CoordinatorManager::clear(string $identifier): void // 使用后清理避免内存泄漏配合协程的yield/resume机制常驻循环可以在收到停止信号后主动让出控制权、完成收尾再退出替代依赖 Swoole 原生进程信号处理。容器与注解扫描的基础设施优化v1.1.0v1.1.0 简化了container.php文件并优化了注解缓存机制#463新的文件内容亦记录于本 changelog?php use Hyperf\Di\Container; use Hyperf\Di\Definition\DefinitionSourceFactory; use Hyperf\Context\ApplicationContext; $container new Container((new DefinitionSourceFactory(true))()); if (! $container instanceof \Psr\Container\ContainerInterface) { throw new RuntimeException(The dependency injection container is invalid.); } return ApplicationContext::setContainer($container);注解扫描流程也做了拆分优化#644将app与vendor两部分分开扫描显著减少扫描耗时Swoole shortname 检测逻辑重写#653不再要求必须swoole.use_shortname Off才能通过检测。ConfigProvider 结构规范化v1.1.0升级注意点v1.1.0 调整了 ConfigProvider 类结构#614、#617同时将config/dependencies.php移动到了config/autoload/dependencies.php且文件结构去除了dependencies层——此后你可以直接把dependencies配置写进config/config.php。ConfigProvider 的scan配置从顶层移入annotations层级变更前scan [ paths [ __DIR__, ], collectors [], ],变更后annotations [ scan [ paths [ __DIR__, ], collectors [], ], ],多了一层annotations使 ConfigProvider 结构与配置文件结构保持一致不再特殊。另外v1.1.0 还移除了三个 ServerFactory 类Hyperf\JsonRpc\HttpServerFactory、Hyperf\HttpServer\ServerFactory、Hyperf\GrpcServer\ServerFactory#401、弃用的AsyncQueue::delay方法#402与ServerInterface::SERVER_TCP常量改用SERVER_BASE#563。升级到 v1.1 时这些属于破坏性变更需要同步调整。RPC 与 JSON-RPC新协议、连接池与错误码规范jsonrpc-tcp-length-check协议v1.1.12v1.1.12 为jsonrpc组件新增了jsonrpc-tcp-length-check协议#1177在 TCP 传输层增加了长度校验避免半包/粘包导致的解析错位。v1.1.28 修复了该协议无法在 Consul 中添加心跳检查的问题#1641。JSON-RPC 连接池与传输层v1.1.7 / v1.1.8 / v1.1.30v1.1.7 新增Hyperf\JsonRpc\JsonRpcPoolTransporter#973为 TCP 协议下的 JSON-RPC 提供连接池支持v1.1.8 修复JsonRpcPoolTransporter配置合并失败的问题#1013v1.1.30 修复RpcPoolTransporter连接池配置不生效#1682与连接失败后同协程内无法重置连接#1683的问题。错误码与recv方法v1.1.14v1.1.14 为 JSON-RPC 响应增加了error.data.code值用于传递 Exception Code并为Hyperf\Rpc\Contract\TransporterInterface增加了recv方法#1208。同期修复了 Exception/Error 在 TCP Server 下无法正确处理、JSON-RPC 未校验 Request ID 与 Response ID 一致性等问题。v1.1.15 修复了同一协程内 JSON-RPC 连接混淆复用的问题#1260。服务注册与健康节点v1.1.5 / v1.1.17 / v1.1.19 / v1.1.28v1.1.5 新增 Consul 集群支持可从集群拉取服务提供者节点信息#859并优化了获取健康节点的逻辑v1.1.17 修复同名服务不同协议被覆盖的问题#1310v1.1.19 修复 rpc-client 会从 Consul 获取到不健康节点#1639以及结果为null时抛出RequestException#1641v1.1.24 修复 Consul 的catalog注册方法调用失败GET 改为 PUT#1507v1.1.23 起 RPC client 会自动代理父接口的方法定义#1480继承关系的方法无需逐一声明。RPC 与 gRPC 的细节完善v1.1.10 / v1.1.16v1.1.10 将TraceMiddeware重命名为TraceMiddleware修正拼写并提升ServiceRegisterListener成员的可重写性#1108。v1.1.16 对 gRPC 客户端做了一轮集中优化#1273断线自动重连、客户端被 GC 时自动关闭连接、修复关闭后仍持有 HTTP2 连接、channel pool 可能含非空 channel、改为懒初始化因此可在构造函数和容器注入下使用。缓存与模型缓存新 Handler 与数据一致性RedisStringHandlerv1.1.28v1.1.28 为model-cache组件新增RedisStringHandler#1647将模型缓存数据以 Redis String 类型存储区别于默认的 Hash 结构当前实现位于 src/model-cache/src/Handler/RedisStringHandler.php。use_default_value自动修正v1.1.21v1.1.21 为模型缓存增加use_default_value配置#1435用于自动修正缓存数据与数据库数据之间的差异——当缓存字段缺失时以默认值兜底避免缓存与 DB 不一致导致的读取异常。配置解析位于 src/model-cache/src/Config.phpprotected bool $useDefaultValue false; // 读取 values[use_default_value] 并转为 bool缓存相关的修复与优化v1.1.26 将文件缓存引擎的原生文件操作替换为Filesystem组件#1560async-queue 的 Redis 引擎由\Redis改为RedisProxy#1568v1.1.9 修复RedisDriver::clear有时无法删除全部缓存#1049v1.1.7 修复模型缓存RedisHandler::incr在集群模式下失败#956v1.1.6 优化模型缓存increment的并发原子性#936以及批量修改数据时删除对应缓存#928v1.1.20 修复模型存在hidden属性时缓存字段数据不正确#1405。Redis 生态v1.1.5 / v1.1.8 / v1.1.22v1.1.5 新增 Redis 集群客户端支持#873并修复了 Redis Server 重启后连接不自动重连#831、scan/hScan/zScan/sScan无法使用#846等问题。v1.1.8 新增 Redis Lua 模块用于管理 Lua 脚本#965。v1.1.22 起官方推荐使用\Hyperf\Redis\Redis替代\Redis进行注入#1452原因记录于 issue #938当前 src/redis/src/Redis.php 通过mixin \Redis保留原生 IDE 提示的同时接入了 Hyperf 的协程化代理RedisProxy。WebSocket 与长连接fd 级 Context 与跨 Worker 推送v1.1.0 允许发送 WebSocket 消息到任意fd即使当前 Worker 进程不持有该fd框架也会自动进行进程间通信实现发送#418。v1.1.27 为 WebSocket 服务增加了基于fd存储的 Context#1603当前实现见 src/websocket-server/src/Context.phpContext 数据以{fd}.{id}为键存储支持set/get/has/release从而在连接维度维护会话数据。v1.1.8 还为 WebSocket 客户端增加了默认端口支持HTTP 80 / HTTPS 443#1021。配置中心与外部系统适配Apollov1.1.6 / v1.1.17v1.1.6 为 Apollo 配置中心增加strict_mode#931自动将配置转换为对应数据类型。当前源码 src/config-apollo/src/ApolloDriver.php 通过config_center.drivers.apollo.strict_mode默认false读取该开关v1.1.0 允许通过配置文件定义 Apollo 客户端的clientIp、pullTimeout、intervalTimeout#629v1.1.17 为 Apollo 增加BootProcessListener在服务启动时从 Apollo 拉取配置#1220。Aliyun ACMv1.1.14 / v1.1.19 / v1.1.20v1.1.14 允许 ACM 配置获取进程解析 UTF-8 字符Worker 启动后自动获取一次配置并支持将拉取的配置传递给自定义进程#1224v1.1.19 新增 ECS RAM 授权#1354v1.1.20 修复SecurityTokenHeader 为空时 STS token 解密失败#1415。Consul 与 etcdv1.1.16 为 Consul 客户端增加 ACL token 支持#1276v1.1.4 修复 etcd 配置中心enable设为false时项目启动仍会拉取配置的问题#796并优化客户端避免多次创建HandlerStack。验证器与异常处理v1.1.0 引入了表单验证器组件#429、#643这是一个衍生自illuminate/validation的组件。此后多个版本持续修复与增强v1.1.13 修复验证规则size无法作用于integer#1210v1.1.11 修复alpha_num规则无法按预期运行#1153v1.1.17 补齐缺失的翻译内容gt、gte、ipv4、ipv6、lt、lte、mimetypes、not_regex、starts_with、uuid#1308v1.1.32 修复值为null时datetime验证器执行失败#1764v1.1.9 修复图片验证的后缀大小写问题#1055。异常处理侧v1.1.31 将filp/whoops集成进异常处理器组件#1723当前实现见 src/exception-handler/src/Handler/WhoopsExceptionHandler.php支持 PrettyPage / JsonResponse / PlainText / XmlResponse 等多种 Handler适合开发环境调试。v1.1.6 新增Hyperf\ExceptionHandler\Listener\ErrorExceptionHandler监听器#913把 PHP 错误统一纳入异常处理流程。稳定性与性能协程语义下的经典问题修复v1.1 版本线修复了大量协程环境特有的问题这些修复对理解协程框架的正确使用方式极具参考价值文件锁死锁v1.1.27#1589普通flock在协程切换时可能造成死锁需要协程安全的锁实现go()返回值v1.1.27#1607重写后的go方法返回值需与 Swoole 原生保持一致Translator 数据混淆v1.1.6#932Translator::setLocale在协程环境下需按协程隔离避免并发请求相互污染Parallel 异常处理v1.1.6#909v1.1.14#1174并发协程中逻辑抛错时需保证整体可停止并输出 Trace 信息内存溢出v1.1.22#1449高基数请求路径如大量唯一 URL 作为指标标签导致内存膨胀Metric 组件在 v1.1.13 也修复了请求路径携带参数的问题#1200连接池计数v1.1.32#1750连接关闭失败时会导致当前连接数计数错误sticky 模式v1.1.10#1106数据库开启sticky模式时连接归还连接池前需重置状态避免影响下一个请求Keepalive 下的 socket 耗尽v1.1.16#1262keepaliveIO 场景下需及时释放 socket。这些修复从侧面印证了 Hyperf 在协程 连接池 上下文三重模型下的设计取舍凡是涉及跨协程共享的全局状态翻译、Session、连接、锁都必须做协程级隔离这是 Hyperf 开发中最重要的心智模型之一。升级与迁移速查如果你正从 v1.0 升级到 v1.1或从旧版 v1.1 升级到更高版本需要重点核对以下破坏性变更均来自本 changelog 的变更/移除记录命令重命名db:model→gen:modelv1.1.0配置项db:model→gen:modelv1.1.2#729ConfigProvider 结构scan移入annotations.scanv1.1.0dependencies配置迁入config/autoload/dependencies.phpcontainer.php精简使用DefinitionSourceFactory一行构建容器v1.1.0ServerFactory 类移除HttpServerFactory、JsonRpc\HttpServerFactory、GrpcServer\ServerFactory被移除v1.1.0常量与接口变更SERVER_TCP→SERVER_BASEv1.1.0OnMessageInterface/OnOpenInterface第一参数由Swoole\Server改为Swoole\WebSocket\Serverv1.1.0#637Redis 注入类型推荐\Hyperf\Redis\Redis而非\Redisv1.1.22代理缓存清理di:init-proxy不再主动清理代理缓存改用vendor/bin/init-proxy.shv1.1.4#811v1.1.7 起该脚本只删除runtime/container目录#977。结语Hyperf v1.1 版本线记录了框架从核心可用走向生态完整的关键一年。以 docs/zh-hk/changelog/1.1.md 为索引你可以顺藤摸瓜地在 src 中找到几乎所有功能对应的实现多态查询在 QueriesRelationships.php自定义 Cast 的契约在 src/contractAMQP 的并发控制与消费事件在 src/amqp优雅启停在 CoordinatorManager.php模型生成命令在 ModelCommand.php。对于正在使用 v1.1 生产环境的团队本文列出的修复清单本身也是一份升级前必读的已知问题手册——尤其是协程文件锁、Translator 隔离、连接池计数这些隐蔽问题都值得在升级时回归验证。赞分享后端微服务【免费下载链接】hyperf A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.项目地址https://gitcode.com/gh_mirrors/hy/hyperf点击查看免费下载相关推荐Hyperf v1.1 系列版本演进详解从 ORM 多态查询到协程组件体系成型Hyperf v1.1 系列版本演进详解从 ORM 多态查询到协程组件体系成型 本文基于 Hyperf 开源仓库中 docs/zh hk/changelog后端微服务Hyperf v1.1 版本更新详解从多态关联查询到自定义 Casts 的完整演进Hyperf v1.1 版本更新详解从多态关联查询到自定义 Casts 的完整演进 Hyperf 是一个基于 Swoole 的高性能协程框架其 v1.1 系后端微服务StarRocks 2.5 版本全解析数据湖生态、Query Cache 与查询队列的演进之路StarRocks 2.5 版本全解析数据湖生态、Query Cache 与查询队列的演进之路 StarRocks 2.5 是 StarRocks 迈向湖仓AI 技能AI 插件人工智能开发工具上一篇3步搞定Umi-OCR免费离线OCR工具从截图到批量文字提取全攻略下一篇3步掌握DLSS版本管理提升游戏性能30%的实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询