Hyperf 1.1 版本演进全解析:从异步队列到自定义模型转换的 32 次迭代
Hyperf 1.1 版本演进全解析:从异步队列到自定义模型转换的 32 次迭代
导读
本文基于 Hyperf 官方仓库的 docs/zh-tw/changelog/1.1.md 版本记录,系统梳理 Hyperf 1.1 系列从 v1.1.0(2019-10-08)到 v1.1.32(2020-05-21)的完整演进脉络。1.1 是 Hyperf 由 1.0 走向成熟的标志性版本线:异步队列注解化、表单验证器、Session、Filesystem、NSQ 等新组件在这一时期集中落地,同时 ORM、RPC、AMQP、模型缓存等核心能力经历了大量缺陷修复与最佳化。阅读本文,你将掌握 1.1 系列每个版本的新增能力与破坏性变更,理解 @AsyncQueueMessage、@Transactional、模型自定义类型转换等特性背后的源码实现,并能在升级或选型时快速定位各能力的引入版本。
一、v1.1.0:1.1 系列的奠基版本
v1.1.0(2019-10-08)是 1.1 系列的开篇,集中交付了大量框架级能力,多数变更至今仍构成 Hyperf 日常开发的核心体验。
路由解析前置与中间件修复
#401 新增了 Hyperf\HttpServer\Router\Dispatched 对象,用于存储解析完成的路由信息,并在用户中间件执行之前完成解析,便于后续使用;同时修复了路由带参数时中间件失效的问题。从源码结构看,Dispatched 承载了路由匹配的结果,是中间件链路与控制器分发之间的关键数据载体。
异步队列注解化:@AsyncQueueMessage
#402 新增 @AsyncQueueMessage 注解:在方法上定义此注解,即表明该方法的实际执行逻辑会被投递到 Async-Queue 队列中消费。这正是 Hyperf 异步任务从「手动封装 Job 类」走向「注解声明式」的关键一步。
当前仓库中该注解定义于 src/async-queue/src/Annotation/AsyncQueueMessage.php,其参数包括:
pool:使用的消息队列连接池,默认default;delay:消息延迟投递秒数,默认0;maxAttempts:消息消费失败时的最大重试次数,默认0(不限制)。
注解声明为 #<a href="https://link.gitcode.com/i/f1a24ed2e6aadf815e6dc1eec2e737b7" target="_blank">Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_METHOD)],可作用于类与方法;其实际投递逻辑位于 [src/async-queue/src/Aspect/AsyncQueueAspect.php,Aspect 会读取注解的 maxAttempts 并构造 AnnotationJob 投递,maxAttempts 参数在 src/async-queue/src/AnnotationJob.php 中传入。
模型事件机制与 WebSocket 跨进程推送
- #420 为数据库模型引入新的事件机制,与 PSR-15 事件调度器配合,可解耦地定义 Listener 监听模型事件。
- #418 允许向任意
fd发送 WebSocket 消息,即使当前 Worker 进程不持有该fd,框架会自动通过进程间通信实现投递。
表单验证器组件
#429 文档所讲解能力的基础。
依赖注入与 OpenTracing 适配
- #596 为
@Inject注解新增required参数。@Inject(required=false)在依赖不存在时不再抛出Hyperf\Di\Exception\NotFoundException,而是以默认值null注入;required默认值为true,构造器注入场景下可通过将参数声明为nullable达到同样效果。 - #478 更好地适配 OpenTracing 协议并兼容 Jaeger 分布式调用链追踪系统。
- #555 新增全局函数
swoole_hook_flags(),用于获取SWOOLE_HOOK_FLAGS常量定义的 Runtime Hook 等级,可在bin/hyperf.php中通过define('SWOOLE_HOOK_FLAGS', SWOOLE_HOOK_ALL)方式定义。
异步队列消费能力增强
- #597 为 AsyncQueue 消费者引入
Concurrent控制消费速率; - #599 支持根据当前重试次数设置该消息的重试等待时长,可实现阶梯式重试等待;
- #620 为 AsyncQueue 消费者增加自动重启机制。
AMQP 消费者 nack 支持
#648 为 AMQP Consumer 增加 nack 返回类型:当消费逻辑返回 Hyperf\Amqp\Result::NACK 时,抽象消费者会以 basic_nack 方法响应消息。
破坏性变更(升级 1.0 → 1.1 必读)
v1.1.0 的变更集中在容器、配置结构与命名调整上:
- 新的
config/container.php文件(#463)简化了容器初始化并优化注解缓存机制,内容如下:
<?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);
- ConfigProvider 结构变更(#614、#617):
config/dependencies.php移至config/autoload/dependencies.php且去掉dependencies层;ConfigProvider 中的scan配置增加一层annotations,与配置文件结构对齐:
// 之前
'scan' => [
'paths' => [__DIR__],
'collectors' => [],
],
// 现在
'annotations' => [
'scan' => [
'paths' => [__DIR__],
'collectors' => [],
],
],
-
命令重命名(#638):
db:model更名为gen:model,并增加 Visitor 优化生成的$connection成员属性——当生成的模型类$connection属性值与父类一致时,不再生成该属性。 -
移除项:#402 移除已弃用的
AsyncQueue::delay方法;#563 移除ServerInterface::SERVER_TCP常量,改用SERVER_BASE;#602 移除Concurrent的timeout参数。
二、v1.1.1 ~ v1.1.5:验证器、NSQ、计划任务与 RPC 补强
v1.1.1 - 2019-10-08(验证器与模型生成修正)
- #664 调整
gen:request生成的 FormRequest 中authorize方法的默认返回值; - #665 修复启动时永远自动生成代理类的问题;
- #667、#672 修复
ValidationMiddleware在访问不存在路由、Action 参数为非对象类型时抛出未捕获异常的问题; - #674 修复
gen:model从数据库生成模型时表名错误的问题。
v1.1.2 - 2019-10-17(AMQP 速率限制)
- #722 为 AMQP Consumer 新增
concurrent.limit配置,对协程消费进行速率限制; - #678 为
gen:model增加ignore-tables参数,并默认屏蔽migrations表(不生成对应模型)。
v1.1.3 - 2019-10-24(模型注释与 AMQP 事件)
- #745 为
gen:model增加with-comments选项,控制是否生成字段注释; - #747 为 AMQP 消费者增加
AfterConsume、BeforeConsume、FailToConsume三个事件; - #762 为 Parallel 特性增加协程控制功能;
- #767 将
AbstractProcess的running属性更名为listening(破坏性变更)。
v1.1.4 - 2019-10-31(测试客户端与服务监控)
- #778
Hyperf\Testing\Client新增PUT和DELETE方法; - #784 新增服务监控组件(
metric); - #795
AbstractProcess增加restartInterval参数,允许子进程异常或正常退出后延迟重启; - #804
Command增加BeforeHandle、AfterHandle、FailToHandle事件; - #811 命令
di:init-proxy不再主动清理代理缓存,如需清理请使用vendor/bin/init-proxy.sh(行为变更)。
v1.1.5 - 2019-11-07(NSQ 与 Redis 集群)
- #812 计划任务支持集群下仅执行一次;
- #820 新增
hyperf/nats组件; - #832 新增
Hyperf\Utils\Codec\Json; - #833 新增
Hyperf\Utils\Backoff(指数退避工具); - #852 为
Hyperf\Utils\Parallel新增clear()方法清理所有已添加回调; - #854 新增
Hyperf\GraphQL\GraphQLMiddleware用于解析 GraphQL 请求; - #859 支持 Consul 集群,可从 Consul 集群拉取服务提供者节点信息;
- #873 新增 Redis 集群客户端支持;
- #840 使用
\Swoole\Timer::*替代swoole_timer_*函数。
三、v1.1.6 ~ v1.1.9:DB 组件、Session 与 DI 懒加载
v1.1.6 - 2019-11-14(轻量 DB 与 Session)
- #827 目录对应组件);
- #905、#933 视图组件新增
twig、plates模板引擎; - #911 定时任务支持多实例下仅执行单实例;
- #913 增加监听器
Hyperf\ExceptionHandler\Listener\ErrorExceptionHandler; - #921 新增 Session 组件;
- #931 Apollo 配置中心增加
strict_mode,自动将配置转换为对应数据类型; - #937 Nats 组件新增消费者消费和订阅事件;
- #941 新增 Zookeeper 配置中心;
- #934 修改
WaitGroup继承\Swoole\Coroutine\WaitGroup; - #928 模型缓存
Cacheable::query批量修改数据时可删除对应缓存; - #936 优化模型缓存
increment在并发情况下可能产生的数据错误。
v1.1.7 - 2019-11-21(Retry 组件与注册机制调整)
- #860 新增
hyperf/retry组件; - #952 新增 ThinkTemplate 视图引擎支持;
- #973 JSON RPC 在 TCP 协议下新增连接池支持,通过
Hyperf\JsonRpc\JsonRpcPoolTransporter使用连接池版本; - #976 为
hyperf/amqp新增close_on_destruct选项,控制代码执行析构函数时是否主动关闭连接; - #944 重要变更:将组件内所有通过
@Listener、@Process注解注册的方式改为通过ConfigProvider注册; - #977 调整
init-proxy.sh行为,改为只删除runtime/container目录; - #968 修复
classes与annotations两种 Aspect 切入模式同时存在于一个类时其中一个可能失效的问题。
v1.1.8 - 2019-11-28(Redis Lua 与 metric CUSTOM_MODE)
- #965 新增 Redis Lua 模块,用于管理 Lua 脚本;
- #1023 metric 组件 Prometheus 驱动新增
CUSTOM_MODE模式; - #1021 WebSocket 客户端新增默认端口支持,根据协议默认 80 和 443;
- #1034 去掉 AMQP
Builder的arguments参数 array 类型限制,允许AmqpTable等其他类型; - #1039 在 CoreMiddleware 中自动将最新 ServerRequest 对象设置到 Context。
v1.1.9 - 2019-12-05(DI 懒加载与 PHP 7.4)
- #948 为 DI Container 增加懒加载功能;
- #1044 为 AMQP Consumer 增加
basic_qos配置; - #1056、#1081 DI Container 增加
define()和set()方法,同时新增Hyperf\Contract\ContainerInterface; - #1059
job.stub模板增加构造函数; - #1084 支持 PHP 7.4,TravisCI 增加 PHP 7.4 运行支持。
四、v1.1.10 ~ v1.1.14:JSON-RPC、AMQP Keepalive 与新增组件
v1.1.10 - 2019-12-12
- #1108 重命名
TraceMiddeware为TraceMiddleware(拼写修正,破坏性变更); - #1111 将
ServiceRegisterListener类成员属性和方法等级提升为protected,便于重写; - 修复 Guzzle 重试中间件状态码识别范围(2xx)、Retry 组件重试前未还原管道堆栈、数据库
sticky模式连接回归连接池未重置状态、TCP 协议 JSONRPC Server 解析 JSON 失败无法返回预期 Error Response、Session 中间件保存 URL 时斜杠结尾被忽略等问题。
v1.1.11 - 2019-12-19
- #849 为 tracer 组件增加 span tag 配置功能;
- 修复
Register::resolveConnection返回 null、配置文件形式下服务限流失效、CoroutineMemoryDriver::delKey返回值错误、验证器alpha_num规则等问题。
v1.1.12 - 2019-12-26(新协议 jsonrpc-tcp-length-check)
- #1177 为 jsonrpc 组件新增
jsonrpc-tcp-length-check协议,并优化部分代码; - 修复
Collection::random不支持null、chunkById不支持数组元素、operatorForWhere的 operator 只能传 string 等 BUG; - #1186 日志配置只填写
formatter.class时,可使用默认formatter.constructor配置。
v1.1.13 - 2020-01-03(constants 国际化)
- #1137 constants 组件增加国际化支持;
- #1165
RequestInterface新增route方法; - #1195
Cacheable、CachePut注解增加最大超时时间偏移量配置; - #1204 database 组件新增
insertOrIgnore方法; - #1216
RenderInterface::render()的$data参数添加默认值; - #1217 将
zendframework/zend-mime替换为laminas/laminas-mine。
v1.1.14 - 2020-01-10(AMQP KeepaliveIO 与 super-globals)
- #1166 为 AMQP 增加 KeepaliveIO 功能;
- #1208 为 JSON-RPC 响应增加
error.data.code传递 Exception Code;为TransporterInterface增加recv方法;修复 JSON-RPC TCP Server 下 Exception/error 无法正确处理、未检查 Request ID 与 Response ID 是否一致的问题; - #1215 新增
hyperf/super-globals组件,适配不支持 PSR-7 的第三方包; - #1219 为 AMQP 消费者增加
enable属性,控制消费者是否跟随 Server 一同启动; - #1224 允许 Aliyun ACM 配置获取进程解析 UTF-8 字符,Worker 启动后自动获取一次配置,拉取的配置传递到自定义进程;
- #1235 AMQP 生产者执行 declare 后释放对应连接。
五、v1.1.15 ~ v1.1.19:命令工具链与配置中心完善
- v1.1.15(2020-01-10):修复 AMQP 心跳失败导致子进程 Socket 通信不可用、JSONRPC 同一协程内连接混淆复用的问题。
- v1.1.16(2020-01-16):async-queue 组件增加
QueueLength事件;Consul 客户端增加 ACL token 支持;metric 组件增加 NoOp 驱动用于临时关闭功能;修复 keepaliveIO 下 socket 被消耗光、自定义进程存在 Timer 时无法重启、JSONRPC Request ID 为 null 时检查失败等问题;优化 gRPC 客户端断线自动重连、GC 时自动关闭连接、channel pool 非空、构造器与容器注入可用性等问题。 - v1.1.17(2020-01-24):Apollo 组件增加 BootProcessListener 实现启动时拉取配置;crontab 组件增加 Command 模式支持;新增 hyperf/nsq 组件(NSQ 是实时分布式消息平台);修复服务注册在同名不同协议下被覆盖、
ConsumerProcess缺失$config变量等问题。 - v1.1.18(2020-02-27):metric 组件新增预制 Grafana 面板;新增
ModelRewriteInheritanceVisitor重写gen:model生成的模型类继承;LoadBalancerInterface新增getNodes();command 新增AfterExecute事件;logger 组件新增processors配置;HTTP Server 自动处理 HEAD 请求且不返回 Response body。 - v1.1.19(2020-03-05):新增
describe:routes命令显示路由细节;config-aliyun-acm组件新增 ECS RAM authorization;PoolFactory增加getPoolNames();Hyperf\DB\DB新增connection()方法指定连接;gen:model新增property-case选项设置成员属性命名风格。
gen:model 命令的选项体系在这一时期逐步成型。当前仓库中 src/database/src/Commands/ModelCommand.php 定义了完整选项,对应关系如下:
| 选项 | 简写 | 类型 | 说明 |
|---|---|---|---|
refresh-fillable |
-R |
VALUE_NONE | 是否生成模型的 fillable 属性 |
table-mapping |
-M |
VALUE_OPTIONAL | VALUE_IS_ARRAY | 表名映射,用于将表映射到指定类名 |
ignore-tables |
无 | VALUE_OPTIONAL | VALUE_IS_ARRAY | 忽略指定表,不生成模型 |
with-comments |
无 | VALUE_NONE | 是否生成字段注释 |
property-case |
无 | VALUE_OPTIONAL | 属性命名风格,0:snake_case,1:camelCase |
六、v1.1.20 ~ v1.1.25:事务注解、模型缓存与命令事件
v1.1.20 - 2020-03-12(@Transactional 注解)
- #1402,并有对应测试 src/db-connection/tests/TransactionalTest.php 验证其行为;
- #1412 增加
Hyperf\View\RenderInterface::getContents()直接获取 View Render 渲染内容; - #1416 增加 Swoole 事件常量
ON_WORKER_ERROR; - #1405 修复模型存在
hidden属性时模型缓存缓存字段数据不正确的问题。
v1.1.21 - 2020-03-19
- #1393 为
SwooleStream实现更多方法; - #1419 允许 ConfigFetcher 通过一个协程启动而无需额外启动一个进程;
- #1424 允许通过配置文件修改
session_name配置; - #1435 模型缓存增加
use_default_value属性,自动修正缓存数据与数据库数据的差异; - #1436 NSQ 消费者增加
isEnable()方法控制消费者进程自启。
v1.1.22 - 2020-03-26(Filesystem 组件)
- #1440 NSQ 每个连接新增
enable配置项控制该连接下所有消费者自启; - #1451);
- #1459 模型 Collection 新增 macroable 支持;
- #1463 Guzzle Handler 增加
on_stats选项支持; - #1452 变更建议:注入 Redis 客户端时推荐使用
\Hyperf\Redis\Redis替代\Redis(原因见 #938); - #1449 修复高基数请求路径的内存溢出问题。
v1.1.23 - 2020-04-02
- #1467 为 filesystem 组件新增默认配置;
- #1469 为
HandlerStackFactory新增getHandler()方法,并尽可能使用make()创建 handler; - #1480 RPC client 自动代理父接口的方法定义;
- #1481 异步队列创建消息时使用
make方法创建; - 修复 NSQ 数据量超过
max-output-buffer-size接收失败、消费者中发布消息导致无法消费、requeue消息时消费者意外重启等 BUG。
v1.1.24 - 2020-04-09
- #1501 新增 Symfony 命令行事件触发器,可与
hyperf/event组件结合使用; - #1502 为
@AsyncQueueMessage注解新增maxAttempts参数,控制消息失败时重复消费次数(该参数当前保留在 src/async-queue/src/Annotation/AsyncQueueMessage.php 中,默认0表示不限制); - #1510 新增
CoordinatorManager,提供更优雅的启动/停止服务:启动前不响应请求,停止前保证循环逻辑正常结束; - #1517 DI 容器懒加载支持接口继承和抽象方法继承;
- #1529 处理 response cookies 的
SameSite属性; - 修复单独使用 Redis 组件时
@mixin注释被当成注解、引入 translation 后 constants 动态参数不生效、RPC 代理客户端无法处理nullable返回值、consul 组件catalog注册方法调用失败等问题。
v1.1.25 - 2020-04-09
- #1532 修复
--no-dev条件下安装找不到EventDispatcherInterface接口的问题。
七、v1.1.26 ~ v1.1.32:快照与巅峰(含模型自定义类型转换)
v1.1.26 - 2020-04-16
- #1578
UploadedFile支持getStream方法; - #1563 修复服务关停后定时器
onOneServer配置不重置; - #1565 DB 组件重连 MySQL 时重置事务等级为 0;
- #1572 修复 gRPC Server CoreMiddleware 自定义类父类找不到报错;
- #1560 变更:cache 组件文件缓存引擎原生文件操作改为 Filesystem;
- #1568 变更:async-queue 组件 Redis 引擎中
\Redis改为RedisProxy。
v1.1.27 - 2020-04-23
- #1575
gen:model生成的模型自动添加relation、scope、attributes变量注释; - #1586 为
symfony/event-dispatcher小于 4.3 时增加conflict配置,解决SymfonyDispatcher实现冲突 BUG; - #1597 中
maxConsumption默认值为0,消费逻辑位于 src/amqp/src/Consumer.php,当maxConsumption > 0且累计消费次数达到该值时停止消费; - #1603 为 WebSocket 服务新增基于
fd存储的 Context; - #1589 修复协程下文件锁可能造成死锁的问题;
- #1607 修复重写后的
go方法返回值与 Swoole 原生方法不符。
v1.1.28 - 2020-04-30
- #1645 匿名函数路由支持参数注入;
- #1647,并配有 src/model-cache/tests/Handler/RedisStringHandlerTest.php 测试;
- #1654 新增
RenderException统一捕获 view 组件抛出的异常; - #1639 修复 rpc-client 从 consul 获取到不健康节点、结果为空时抛出
RequestException等问题; - #1650、#1624 修复
describe:routes列表展示有误、路由 Handler 为匿名函数时执行失败等问题; - #1655 修复
MysqlProcessor::processColumns在 MySQL Server 8.0 无法正常工作。
v1.1.29(版本记录跳转说明)
按仓库记录,v1.1.29 未单独列出条目(changelog 中 v1.1.28 之后直接进入 v1.1.30),1.1 系列版本节奏以实际发布为准。
v1.1.30 - 2020-05-07
- #1616 新增 ORM 方法
morphWith和whereHasMorph(多态关联预加载与查询); - #1651 新增
socket.io-server组件; - #1666、#1669 新增 AMQP RPC 客户端;
- #1682 修复
RpcPoolTransporter连接池配置不生效; - #1683 修复
RpcConnection连接失败后同一协程内无法重置连接。
v1.1.31 - 2020-05-14
- #1723 异常处理器集成
filp/whoops; - #1730 为
gen:model的--refresh-fillable选项新增简写-R; - #1696 修复
Context::copy传入keys后无法使用; - #1708、#1718 修复 socketio-server 内存溢出等 BUG;
- #1710 MAC 系统下不再使用
cli_set_process_title设置进程名。
v1.1.32 - 2020-05-21(1.1 系列收官:模型自定义类型转换)
1.1 系列的最后一个版本,重点交付了 ORM 层多态查询补全与自定义类型转换能力:
- #1724 新增模型方法
Model::orWhereHasMorph、Model::whereDoesntHaveMorph、Model::orWhereDoesntHaveMorph,补全多态关联查询的否定与 or 组合能力; - #1741 新增
Hyperf\Command\Command::choiceMultiple(): array方法——因为choice()返回类型为string,即使设置了$multiple参数也无法处理多选结果,新方法解决了命令行多选交互问题; - #1742 新增模型自定义类型转换器功能:
- 新增 interface
Castable、CastsAttributes、CastsInboundAttributes; - 新增方法
Model\Builder::withCasts; - 新增方法
Model::loadMorph、Model::loadMorphCount、Model::syncAttributes。
- 新增 interface
这些接口与能力在当仓库均有完整实现:Castable、CastsAttributes、CastsInboundAttributes 位于 src/database/src/Model/Casts 目录(含 AsCollection、AsArrayObject 等内置转换类),withCasts 定义于 src/database/src/Model/Builder.php,loadMorph 等定义于 src/database/src/Model/Concerns/QueriesRelationships.php,属性同步逻辑集中在 src/database/src/Model/Concerns/HasAttributes.php,并有专门测试 src/database/tests/DatabaseModelCustomCastingTest.php 覆盖。此外 src/database/src/Model/CastsValue.php 提供了可同步回模型的抽象转换值基类,通过 syncAttributes() 在属性修改时通知模型。
- v1.1.32 修复项:模型多态查询关联为空时仍查询 SQL(#1734);filesystem 组件 OSS HOOK 位运算错误导致 resource 判断不准确(#1739);
grafana.json错误的refId字段值(#1743);AMQP 组件使用其他连接池时concurrent.limit配置不生效(#1748);连接池组件连接关闭失败时计数错误(#1750);BASE Server 启动提示未考虑 UDP 服务(#1754);时间为 null 时 datetime 验证器失败(#1764);socketio-server 客户端初始化断开连接时报 Notice(#1769)。
八、1.1 系列演进规律与升级要点
版本节奏与主题分布
从 2019-10-08 到 2020-05-21,1.1 系列共发布 32 个版本,平均每 7 天一个版本,呈现「高频迭代、小步快跑」的节奏。演进主题大致分为三个阶段:
- 框架能力奠基期(v1.1.0 ~ v1.1.5):路由/中间件、注解异步队列、验证器、模型事件、服务监控、NSQ/NATS、Redis 集群;
- 组件生态扩张期(v1.1.6 ~ v1.1.14):轻量 DB、Session、Retry、super-globals、gRPC 客户端优化、AMQP KeepaliveIO、jsonrpc-tcp-length-check 协议;
- 稳定与精细化期(v1.1.15 ~ v1.1.32):命令工具链完善(
describe:routes、gen:model选项丰富)、配置中心完善、Filesystem、事务注解、模型自定义类型转换。
值得关注的破坏性变更清单
| 版本 | 变更内容 | 影响 |
|---|---|---|
| v1.1.0 | ConfigProvider 的 scan 增加 annotations 层;config/dependencies.php 移至 config/autoload/dependencies.php 且去掉 dependencies 层 |
组件与项目配置结构调整 |
| v1.1.0 | db:model 更名为 gen:model |
命令名变更 |
| v1.1.0 | 移除 SERVER_TCP、AsyncQueue::delay、Concurrent::timeout |
删除 API |
| v1.1.3 | AbstractProcess::running 更名为 listening |
属性更名 |
| v1.1.7 | @Listener/@Process 注解注册改为 ConfigProvider 注册 |
组件注册机制变更 |
| v1.1.10 | TraceMiddeware 更名为 TraceMiddleware |
类名拼写修正 |
| v1.1.22 | 推荐 \Hyperf\Redis\Redis 替代 \Redis 注入 |
最佳实践变更 |
升级与查阅建议
- 若从 1.0 升级到 1.1,优先核对上表破坏性变更,尤其是容器配置结构与命令名变化;
- 若使用异步队列,
@AsyncQueueMessage的maxAttempts(v1.1.24 引入)与消费者Concurrent速率控制(v1.1.0 引入)配合使用可构建健壮的消费链路; - 若使用 AMQP,注意
concurrent.limit(v1.1.2)、basic_qos(v1.1.9)、maxConsumption(v1.1.27)、enable(v1.1.14)等消费端参数的组合语义; - 模型层的多态查询与自定义类型转换能力集中在 v1.1.30 ~ v1.1.32 引入,相关实现可在 src/database/src/Model 目录中对照源码深入研读;
- 本文对应原文记录位于 docs/zh-tw/changelog/1.1.md,同系列其他版本可参考 docs/zh-tw/changelog/2.0.md、docs/zh-tw/changelog/3.0.md 等,英文版见 docs/en/changelog/1.1.md。
结语
Hyperf 1.1 系列的 32 个版本,完成了从框架基础能力到组件生态、再到精细化打磨的完整闭环。它确立了注解驱动异步队列、ConfigProvider 组件注册、轻量 DB、模型自定义类型转换等至今仍在演进的设计基因;同时,通过高频修复连接池、RPC、协程安全等底层问题,为 2.x 的稳定性打下了坚实基础。理解 1.1 的演进脉络,有助于开发者在使用新版 Hyperf 时,准确判断某项能力从哪个版本开始可用、哪些变更属于破坏性调整,从而在升级与选型中做出更稳妥的决策。