# 版本更新记录

# v3.0.49 - 2024-05-16

## Added

- [#6764](https://github.com/hyperf/hyperf/pull/6764) 当遇到 `Premature end of data` 错误时，则认为当前数据库连接不可用，下次从连接池中取出来时，会被重连。

# v3.0.48 - 2024-04-17

## 修复

- [#6693](https://github.com/hyperf/hyperf/pull/6693) 修复使用 `socket-io` 时，如果没有传入 `query` 会在 `data` 中存在 `?` 的情况下解析出错的问题。

# v3.0.47 - 2024-01-11

## 优化

- [#6455](https://github.com/hyperf/hyperf/pull/6455) 优化 `Hyperf\SocketIOServer\Parser\Decoder::decode()` 的代码实现。

# v3.0.46 - 2023-11-30

## 修复

- [#6321](https://github.com/hyperf/hyperf/pull/6321) 修复使用 `tracer` 组件时，`jaeger` 无法正确展示 `HTTP` 状态码的问题。

# v3.0.45 - 2023-11-24

## 新增

- [#6297](https://github.com/hyperf/hyperf/pull/6297) 新增接口 `Hyperf\Crontab\Mutex\ServerNodeInterface` 用于使用 `Crontab` 的 `onOneServer` 功能时，自定义唯一键。
- [#6300](https://github.com/hyperf/hyperf/pull/6300) 新增配置 `rate_limit.storage.options.pool` 用于使用限流器时，设置 `Redis` 连接池。
- [#6306](https://github.com/hyperf/hyperf/pull/6306) 为 `RPC` 服务增加请求级别生命周期。

## 修复

- [#6298](https://github.com/hyperf/hyperf/pull/6298) 修复 `Hyperf\Framework\Logger\StdoutLogger` 中的 `context` 参数不支持复杂对象的问题。
- [#6303](https://github.com/hyperf/hyperf/pull/6303) 修复 `PDO` 链接在超时时，不会被重试的问题。

## 优化

- [#6302](https://github.com/hyperf/hyperf/pull/6302) 使用 `command` 模式调用定时任务时，设置 `setCatchExceptions` 为 false。
- [#6315](https://github.com/hyperf/hyperf/pull/6315) 优化链路追踪组件从上下文读取 `Tracer` 时，不会多一次实例化的问题。

# v3.0.44 - 2023-11-17

## 新增

- [#6283](https://github.com/hyperf/hyperf/pull/6283) 为 `GRPC` 服务增加请求周期事件支持。
- [#6292](https://github.com/hyperf/hyperf/pull/6292) 增加 `Validator::setValue` 方法，并设置 `Validator::getValue` 为公共方法。

## 修复

- [#6284](https://github.com/hyperf/hyperf/pull/6284) 修复使用命令行启动 `Crontab` 时，当抛出异常后，脚本无法正常关闭的问题。
- [#6291](https://github.com/hyperf/hyperf/pull/6291) 修复 `Crontab` 启动锁机制时，偶发无法正常结束的问题。

## 优化

- [#6293](https://github.com/hyperf/hyperf/pull/6293) 优化方法 `Arr::flatten`，使其比之前运行效率更高。

# v3.0.43 - 2023-11-10

## 新增

- [#6272](https://github.com/hyperf/hyperf/pull/6272) 新增开关 `metric.enable_command_metric`。
- [#6273](https://github.com/hyperf/hyperf/pull/6273) 为 `Hyperf\HttpServer\Router\Dispatched` 增加 `serverName` 参数。

## 优化

- [#6261](https://github.com/hyperf/hyperf/pull/6261) 避免使用 `class_uses_recursive` 时，因为 `class_parents` 返回 `false` 导致报错的问题。
- [#6271](https://github.com/hyperf/hyperf/pull/6271) 使用 `Crontab` 时，限制匿名函数方式在 `WorkerStrategy` 策略中使用。

# v3.0.42 - 2023-11-03

## 新增

- [#6236](https://github.com/hyperf/hyperf/pull/6236) 为 `GenerateModelIDEVisitor` 增加 `unionType` 支持。
- [#6246](https://github.com/hyperf/hyperf/pull/6246) [#6252](https://github.com/hyperf/hyperf/pull/6252) 增加 `Crontab` 生命周期事件。
- [#6249](https://github.com/hyperf/hyperf/pull/6249) 为 `Crontab` 增加 `closure` 执行类型。

## 优化

- [#6239](https://github.com/hyperf/hyperf/pull/6239) 优化 `AMQP` 代码，替换一些即将废弃的方法，并增加 `BeforeConsume` 事件。
- [#6250](https://github.com/hyperf/hyperf/pull/6250) 优化 `generateModelIdeVisitor` 注释的生成。
- [#6253](https://github.com/hyperf/hyperf/pull/6253) 当收集类反射数据失败时，输出错误信息到终端。
- [#6256](https://github.com/hyperf/hyperf/pull/6256) 优化 `hyperf/translation` 部分代码，为成员变量增加类型限制。

# v3.0.41 - 2023-10-27

## 新增

- [#6224](https://github.com/hyperf/hyperf/pull/6224) 为 `Response::xml()` 等方法，增加 `charset` 参数。
- [#6232](https://github.com/hyperf/hyperf/pull/6232) 为 `Hyperf\HttpServer\Router\Dispatched` 增加 `isNotFound` 方法。
- [#6233](https://github.com/hyperf/hyperf/pull/6233) 为 `hyperf/command` 组件的 `AfterExecute` 事件，增加 `exception` 入参。

## 优化

- [#6226](https://github.com/hyperf/hyperf/pull/6226) 当 `grpc` 连接关闭时，不再发送数据。
- [#6228](https://github.com/hyperf/hyperf/pull/6228) [#6229](https://github.com/hyperf/hyperf/pull/6229) `FormRequest` 中的 `rules` 方法不再必填。

# v3.0.40 - 2023-10-20

## 修复

- [#6217](https://github.com/hyperf/hyperf/pull/6217) 修复 `Str::replaceLast` 方法，在被替换内容为空时，无法正常使用的问题。

## 优化

- [#6209](https://github.com/hyperf/hyperf/pull/6209) 为 `Redis` [哨兵模式](https://github.com/phpredis/phpredis/blob/develop/sentinel.md#examples-for-version-60-or-later) 增加 `v6` 版本的支持。

# v3.0.39 - 2023-10-13

## 新增

- [#6188](https://github.com/hyperf/hyperf/pull/6188) 为 `Redis` 的 options 配置增加 string 类型 key 支持。
- [#6193](https://github.com/hyperf/hyperf/pull/6193) 为 `Swow` 服务增加 HTTP 和 WebSocket 双协议端口支持。
- [#6198](https://github.com/hyperf/hyperf/pull/6198) 为 `hyperf/tracer` 组件增加 `RpcAspect` 用以替代 `JsonRpcAspect`。
- [#6200](https://github.com/hyperf/hyperf/pull/6200) 为 `hyperf/tracer` 组件增加 `ElasticserachAspect` 和 `CoroutineAspect` 的开关。
- [#6203](https://github.com/hyperf/hyperf/pull/6203) 为 `hyperf/tracer` 组件增加 `Hyperf\Tracer\Aspect\GrpcAspect`。
- [#6207](https://github.com/hyperf/hyperf/pull/6207) 为 `kafka` 组件增加 `exception_callback` 配置。

# v3.0.38 - 2023-10-05

## 修复

- [#6183](https://github.com/hyperf/hyperf/pull/6183) 修复使用单测组件时，中间件权重无法正常使用的问题。
- [#6185](https://github.com/hyperf/hyperf/pull/6185) 修复使用 `socketio-server` 时，`cleanUpExpiredOnce` 当 `sids` 为空时，无法正常使用的问题。

## 优化

- [#6177](https://github.com/hyperf/hyperf/pull/6177) 使 `hyperf/codec` 组件 `Base62` 工具类，可以更加便捷的被继承重写。

# v3.0.37 - 2023-09-22

## 新增

- [#6156](https://github.com/hyperf/hyperf/pull/6156) 为 `stringable` 组件增加了 `Str::replaceStart()` 等方法。

## 优化

- [#6154](https://github.com/hyperf/hyperf/pull/6154) 在使用验证器组件时，如果原生方法 `json_validate` 存在，则使用其进行 `Json` 格式验证。
- [#6157](https://github.com/hyperf/hyperf/pull/6157) 在使用 `trace` 组件时，只记录打开记录异常开关，并且不在忽略列表中的信息。

## 修复

- [#6160](https://github.com/hyperf/hyperf/pull/6160) 修复当设置配置 `services.enable.register` 为 `false` 时，仍然会发布服务到服务中心的问题。
- [#6162](https://github.com/hyperf/hyperf/pull/6162) 修复使用 `Crontab` 的时，当执行任务超过默认超时时间后，则不能很好的进行控制任务运行时机的问题。

# v3.0.36 - 2023-09-15

# 新增

- [#6062](https://github.com/hyperf/hyperf/pull/6057) 为 `hyperf/tracer` 新增 `RequestTraceListener` 监听器。
- [#6143](https://github.com/hyperf/hyperf/pull/6143) 为 `hyperf/tracer` 增加 `ignore_exceptions` 配置。

## 优化

- [#6151](https://github.com/hyperf/hyperf/pull/6151) 优化 `hyperf/kafka` 组件中 `FailToConsume` 的触发时机。

## 修复

- [#6117](https://github.com/hyperf/hyperf/pull/6117) 修复 `GRPC` 客户端无法被复用的问题。
- [#6146](https://github.com/hyperf/hyperf/pull/6146) 修复 `validateJson` 验证规则在高于 PHP 8.0 版本后，无法正常使用的问题。

# v3.0.35 - 2023-09-01

## 修复

- [#6097](https://github.com/hyperf/hyperf/pull/6097) 修复使用非 `zipkin` 的 `tracer` 组件时，会出现报错的问题。
- [#6099](https://github.com/hyperf/hyperf/pull/6099) 修复使用 `Redis` 时，恒定频率释放链接模式无法正常使用的问题。
- [#6110](https://github.com/hyperf/hyperf/pull/6110) 修复使用 `Nacos GRPC` 的配置中心时，多进程模式无法正常工作的问题。

## 新增

- [#6096](https://github.com/hyperf/hyperf/pull/6096) 为 `Crontab` 组件中的事件增加 `getThrowable` 方法。
- [#6094](https://github.com/hyperf/hyperf/pull/6094) 新增验证器规则 `ExcludeIf` `File` `ImageFile` 和 `ProhibitedIf`。
- [#6112](https://github.com/hyperf/hyperf/pull/6112) 为 `Hyperf\Kafka\Producer` 增加 `sendAsync` 和 `sendBatchAsync` 两个新方法。

## 优化

- [#6098](https://github.com/hyperf/hyperf/pull/6098) 优化 `hyperf/tracer` `kafka` 上报器，增加其稳定性。
- [#6100](https://github.com/hyperf/hyperf/pull/6100) 优化 `hyperf/tracer` `HTTP` 上报器，增加其性能和稳定性。
- [#6108](https://github.com/hyperf/hyperf/pull/6108) 优化命令 `describe:routes`，展示排序后的中间件。
- [#6111](https://github.com/hyperf/hyperf/pull/6111) 为 `tracer` 上报器，增加日志输出能力。

# v3.0.34 - 2023-08-25

## 新增

- [#6060](https://github.com/hyperf/hyperf/pull/6060) 为 `tracer` 组件增加 `request.uri` 标签。
- [#6063](https://github.com/hyperf/hyperf/pull/6063) 为 `Request` 相关事件，增加服务名参数 `$server`。
- [#6070](https://github.com/hyperf/hyperf/pull/6070) 为组件 `hyperf/rpc-multilex` 增加 `php_serialize` 协议。
- [#6069](https://github.com/hyperf/hyperf/pull/6069) [#6075](https://github.com/hyperf/hyperf/pull/6075) 为组件 `hyperf/tracer` 增加 `kafka` 上报器。
- [#6078](https://github.com/hyperf/hyperf/pull/6078) 新增方法 `Hyperf\Support\Composer::hasPackage()`。
- [#6083](https://github.com/hyperf/hyperf/pull/6083) [#6084](https://github.com/hyperf/hyperf/pull/6084) 支持中间件排序功能。

## 修复

- [#6065](https://github.com/hyperf/hyperf/pull/6065) 修复方法 `Context::override` 和 `Context::getOrSet` 没法对指定协程 ID 使用的问题。

## 优化

- [#6046](https://github.com/hyperf/hyperf/pull/6046) 从协程上线文中读取 `tracer` 实例。
- [#6061](https://github.com/hyperf/hyperf/pull/6061) 为 `server` 配置，增加 `key-value` 模式的支持。
- [#6077](https://github.com/hyperf/hyperf/pull/6077) 当使用 `#[Hyperf\Constants\Annotation\Constants]` 时，避免 `IDE` 触发 `deprecated` 警告。

# v3.0.33 - 2023-08-18

## 修复

- [#6011](https://github.com/hyperf/hyperf/pull/6011) 修复 `invocable` 控制器路由无法正常使用验证器的 BUG。
- [#6013](https://github.com/hyperf/hyperf/pull/6013) 修复 `no_aspect` 会被覆盖的问题。
- [#6053](https://github.com/hyperf/hyperf/pull/6053) 修复方法 `Arr::has` 时，`Interger` 类型参数会导致报错的问题。

## 优化

- [#6023](https://github.com/hyperf/hyperf/pull/6023) 使用 `Tracer` 实例时，优先从协程上下文中获取。
- [#6027](https://github.com/hyperf/hyperf/pull/6027) 优化协程下 `Tracer` 的使用逻辑。

## 即将废弃

- [#6044](https://github.com/hyperf/hyperf/pull/6044) 设置 `Hyperf\Coroutine\Traits\Container` 为即将废弃。

# v3.0.32 - 2023-08-09

## 新增

- [#5996](https://github.com/hyperf/hyperf/pull/5996) 允许 `tracer` 切入 `GuzzleHttp\Client::request()` 方法，进行数据记录。

## 修复

- [#6004](https://github.com/hyperf/hyperf/pull/6004) 修复在使用 `Command` 时，抛出异常后，命令行退出码不合规的问题。

# v3.0.31 - 2023-07-27

## 修复

- [#5969](https://github.com/hyperf/hyperf/pull/5969) 修复使用 `Str::contains` 时，如果 `$needles` 为 `[null]` 则会导致判断错误的问题。
- [#5970](https://github.com/hyperf/hyperf/pull/5970) 修复使用 `Str::startsWith` 和 `Str::endsWith` 时，如果 `$needles` 为 `[null]` 则会导致判断错误的问题。

## 新增

- [#5971](https://github.com/hyperf/hyperf/pull/5971) 新增方法 `Str::containsIgnoreCase()` 可以在不区分大小写的情况下，用来判断是否是包含关系。

# v3.0.30 - 2023-07-21

## 修复

- [#5947](https://github.com/hyperf/hyperf/pull/5947) 修复使用 `amqp` 时，存在多个配置时，协程锁失效的问题。

## 优化

- [#5954](https://github.com/hyperf/hyperf/pull/5954) 优化模型生成器，使其生成正确的参数注释。

## 新增

- [#5951](https://github.com/hyperf/hyperf/pull/5951) 为 `Session` 的 `Cookies` 功能增加 `SameSite` 支持。
- [#5955](https://github.com/hyperf/hyperf/pull/5955) 为 `Nacos` 服务注册与发现，增加 `access_key` 和 `access_secret` 的支持。
- [#5957](https://github.com/hyperf/hyperf/pull/5957) 新增 `Hyperf\Codec\Packer\IgbinarySerializerPacker`。
- [#5962](https://github.com/hyperf/hyperf/pull/5962) 当使用测试组件时，增加支持修改子协程上下文的能力。

# v3.0.29 - 2023-07-14

## 修复

- [#5921](https://github.com/hyperf/hyperf/pull/5921) 修复 `http2-client` 在没有开启心跳时，无法正常关闭的问题。
- [#5923](https://github.com/hyperf/hyperf/pull/5923) 修复 `nacos grpc client` 当进程退出时，无法友好关闭的问题。
- [#5922](https://github.com/hyperf/hyperf/pull/5922) 修复使用 `grpc-client` 时，会找不到 `ApplicationContext` 的问题。

## 优化

- [#5924](https://github.com/hyperf/hyperf/pull/5924) 当进程退出时，隐藏 `nacos grpc client` 相关的正常的错误信息。

# v3.0.28 - 2023-07-08

## 修复

- [#5909](https://github.com/hyperf/hyperf/pull/5909) 修复 `ACM` 配置中心因 `client::$servers` 没有进行初始化而报错的问题。
- [#5911](https://github.com/hyperf/hyperf/pull/5911) 修复 `Nacos Grpc 客户端` 权限验证失败的问题。
- [#5912](https://github.com/hyperf/hyperf/pull/5912) 修复 `Nacos Grpc 客户端` 在 `Nacos 服务` 重启后，重连失败的问题。

## 新增

- [#5895](https://github.com/hyperf/hyperf/pull/5895) 为验证器规则 `Integer` 和 `Boolean` 增加严格模式。

## 优化

- [#5910](https://github.com/hyperf/hyperf/pull/5910) 优化工厂类 `NacosClientFactory`，使其实例化 `NacosClient` 而非 `Nacos Application` 对象。

# v3.0.27 - 2023-06-30

## 修复

- [#5880](https://github.com/hyperf/hyperf/pull/5880) 修复因 `Swagger` 服务名随机成为数字时，导致服务无法正常启动的问题。
- [#5890](https://github.com/hyperf/hyperf/pull/5890) 增加了部分，需要重连 `PDO` 的错误信息，避免 `PDO` 链接无法重连的问题。

## 优化

- [#5886](https://github.com/hyperf/hyperf/pull/5886) 当使用 `hyperf/db` 连接 `clickhouse` 时，如果 `SQL` 执行错误，则会抛出异常。

# v3.0.26 - 2023-06-24

## 修复

- [#5861](https://github.com/hyperf/hyperf/pull/5861) 修复缓存组件中，使用 `CoroutineMemory` 时，`CoroutineMemory::clearPrefix()` 无法正常工作的问题。

## 优化

- [#5858](https://github.com/hyperf/hyperf/pull/5858) 当调用数据库组件中 `chunkById` 时，如果 `Id` 为 `Null`，则抛出异常。

# v3.0.25 - 2023-06-19

## 修复

- [#5829](https://github.com/hyperf/hyperf/pull/5829) 修复 `Hyperf\Database\Model\Builder::value()` 当使用形如 `table.column` 的字段时，无法正常使用的问题。
- [#5831](https://github.com/hyperf/hyperf/pull/5831) 修复在特殊场景下 `socket.io` 组件在解析 `namespace` 时，会造成死循环的问题。

# v3.0.24 - 2023-06-10

## 修复

- [#5794](https://github.com/hyperf/hyperf/pull/5794) 修复代理类中 `__FILE__` 和 `__DIR__` 定位错误的问题。
- [#5803](https://github.com/hyperf/hyperf/pull/5803) 修复组件 `hyperf/http-server` 不适配新版本 `Psr7` 的问题。
- [#5808](https://github.com/hyperf/hyperf/pull/5808) 修复验证器规则 `le`、`lte`、`gt`、`gte` 不会正常比较 `numeric` 和 `string`。

## 优化

- [#5789](https://github.com/hyperf/hyperf/pull/5789) 支持高版本 `psr/http-message`。
- [#5806](https://github.com/hyperf/hyperf/pull/5806) 优化 Swow 服务，默认情况下合并通用配置。
- [#5814](https://github.com/hyperf/hyperf/pull/5814) 增加方法 `build_sql`，在抛出异常 `QueryException` 时，可以快速的构建 `SQL` .

# v3.0.23 - 2023-06-02

## 新增

- [#5757](https://github.com/hyperf/hyperf/pull/5757) 支持 `Nacos` 服务注册与发现签名机制。
- [#5765](https://github.com/hyperf/hyperf/pull/5765) 为 `database` 组件增加全文检索的功能。

## 修复

- [#5782](https://github.com/hyperf/hyperf/pull/5782) 修复 `prometheus` 无法正常收集 `histograms` 的问题。

## 优化

- [#5768](https://github.com/hyperf/hyperf/pull/5768) 为 `Hyperf\Command\Annotation\Command` 组件增加参数支持。
- [#5780](https://github.com/hyperf/hyperf/pull/5780) 修复 `Zipkin\Propagation\Map` 中 `String` 类型检测错误的问题。

# v3.0.22 - 2023-05-27

## 新增

- [#5760](https://github.com/hyperf/hyperf/pull/5760) 为组件 `hyperf/translation` 组件的助手函数增加命名空间。
- [#5761](https://github.com/hyperf/hyperf/pull/5761) 新增方法 `Hyperf\Coordinator\Timer::until()`.

## 优化

- [#5741](https://github.com/hyperf/hyperf/pull/5741) 为 `Hyperf\DB\MySQLConnection` 增加即将过期的标签。
- [#5702](https://github.com/hyperf/hyperf/pull/5702) 优化了 `Hyperf\Metric\Adapter\Prometheus\Redis` 的代码，使其允许被重写 `KEY` 键前缀。
- [#5762](https://github.com/hyperf/hyperf/pull/5762) 自定义进程默认使用非阻塞模式。

# v3.0.21 - 2023-05-18

## 新增

- [#5721](https://github.com/hyperf/hyperf/pull/5721) 为 `Request` 生命周期事件，增加 `exception` 参数。
- [#5723](https://github.com/hyperf/hyperf/pull/5723) 为 `hyperf/db` 组件增加 `Swoole5.x` 的 `PgSQL` 支持。
- [#5725](https://github.com/hyperf/hyperf/pull/5725) 为 `hyperf/db` 组件增加 `Swoole4.x` 的 `PgSQL` 支持。
- [#5731](https://github.com/hyperf/hyperf/pull/5731) 新增方法 `Arr::hasAny()`。

## 修复

- [#5726](https://github.com/hyperf/hyperf/pull/5726) [#5730](https://github.com/hyperf/hyperf/pull/5730) 修复使用 `pgsql-swoole` 类型的 `ORM` 时，`PgSQL` 链接不会自动初始化的问题。

## 优化

- [#5718](https://github.com/hyperf/hyperf/pull/5718) 优化了 `view-engine` 组件的代码，并增加了一些单元测试。
- [#5719](https://github.com/hyperf/hyperf/pull/5719) 优化了 `metric` 组件的代码，并增加了一些单元测试。
- [#5720](https://github.com/hyperf/hyperf/pull/5720) 优化了 `Hyperf\Metric\Listener\OnPipeMessage` 的代码，来避免消息阻塞的问题。

# v3.0.20 - 2023-05-12

## 新增

- [#5707](https://github.com/hyperf/hyperf/pull/5707) 新增助手函数 `Hyperf\Config\config`。
- [#5711](https://github.com/hyperf/hyperf/pull/5711) 新增方法 `Arr::mapWithKeys()`。
- [#5715](https://github.com/hyperf/hyperf/pull/5715) 增加请求级别生命周期事件。

## 修复

- [#5709](https://github.com/hyperf/hyperf/pull/5709) 当日志组不存在时，修复错误日志记录有误的问题。
- [#5713](https://github.com/hyperf/hyperf/pull/5713) 为 `Hyperf\SuperGlobals\Proxy\Server` 增加通过自身进行实例化的能力。

## 优化

- [#5716](https://github.com/hyperf/hyperf/pull/5716) 为协程风格服务增加超全局变量的支持。

# v3.0.19 - 2023-05-06

## 修复

- [#5679](https://github.com/hyperf/hyperf/pull/5679) 修复 `#[Task]` 注解的 `$timeout` 类型与 `TaskAspect` 不一致的问题。
- [#5684](https://github.com/hyperf/hyperf/pull/5684) 修复使用了 `break` 语法后，`blade` 视图模板无法正常使用的问题。

## 新增

- [#5680](https://github.com/hyperf/hyperf/pull/5680) 为 `rpc-multiplex` 增加存储 `RPC` 上下文的能力。
- [#5695](https://github.com/hyperf/hyperf/pull/5695) 为数据库迁移组件，增加设置 `datetime` 类型的创建时间和修改时间的功能。
- [#5699](https://github.com/hyperf/hyperf/pull/5699) 增加 `Model::resolveRelationUsing()`，用来动态创建模型关系。

## 优化

- [#5694](https://github.com/hyperf/hyperf/pull/5694) 将 `hyperf/utils` 从 `hyperf/rpc` 组件中移除。
- [#5696](https://github.com/hyperf/hyperf/pull/5694) 使用 `Hyperf\Coroutine\Coroutine::sleep()` 替代 `Swoole\Coroutine::sleep()`。

# v3.0.18 - 2023-04-26

## 新增

- [#5672](https://github.com/hyperf/hyperf/pull/5672) 将部分 `utils` 中的方法，复制到 `hyperf/support` 组件中，并增加对应的命名空间。

## 修复

- [#5662](https://github.com/hyperf/hyperf/pull/5662) 修复 `pgsql-swoole` 执行失败时，无法抛出异常的问题。

## 优化

- [#5660](https://github.com/hyperf/hyperf/pull/5660) 将 `hyperf/codec` 从 `hyperf/utils` 分离出来。
- [#5663](https://github.com/hyperf/hyperf/pull/5663) 将 `hyperf/serializer` 从 `hyperf/utils` 分离出来。
- [#5666](https://github.com/hyperf/hyperf/pull/5666) 将 `Packers` 从 `hyperf/utils` 分离到 `hyperf/codec` 中。
- [#5668](https://github.com/hyperf/hyperf/pull/5668) 将 `hyperf/support` 从 `hyperf/utils` 分离出来。
- [#5670](https://github.com/hyperf/hyperf/pull/5670) 将 `hyperf/code-parser` 从 `hyperf/utils` 分离出来。
- [#5671](https://github.com/hyperf/hyperf/pull/5671) 使用 `Hyperf\Coroutine\Channel\Pool` 代替 `Hyperf\Utils\ChannelPool` 。
- [#5674](https://github.com/hyperf/hyperf/pull/5674) 将 `Hyperf\Utils` 命名空间的类和方法，使用新组件进行替换。

# v3.0.17 - 2023-04-19

## 修复

- [#5642](https://github.com/hyperf/hyperf/pull/5642) 修复使用批量读取模型缓存时，遇到不存在的数据时，无法初始化空缓存的问题。
- [#5643](https://github.com/hyperf/hyperf/pull/5643) 修复使用批量读取模型缓存时，空缓存无法正常使用的问题。
- [#5649](https://github.com/hyperf/hyperf/pull/5649) 修复协程风格下，无法初始化数据库字段收集器的问题。

## 新增

- [#5634](https://github.com/hyperf/hyperf/pull/5634) 新增助手函数 `Hyperf\Stringable\str()`。
- [#5639](https://github.com/hyperf/hyperf/pull/5639) 新增方法 `Redis::pipeline()` 和 `Redis::transaction()`。
- [#5641](https://github.com/hyperf/hyperf/pull/5641) 为模型缓存 `loadCache` 增加嵌套初始化缓存的能力。
- [#5646](https://github.com/hyperf/hyperf/pull/5646) 增加 `PriorityDefinition` 类，来处理容器 `dependencies` 优先级的问题。

## 优化

- [#5634](https://github.com/hyperf/hyperf/pull/5634) 使用 `Hyperf\Stringable\Str` 替代 `Hyperf\Utils\Str`。
- [#5636](https://github.com/hyperf/hyperf/pull/5636) 优化 `kafka` 消费者，启动时等待消费过长的问题。
- [#5648](https://github.com/hyperf/hyperf/pull/5648) 将依赖 `hyperf/utils` 从 `hyperf/guzzle` 中移除。

# v3.0.16 - 2023-04-12

## 修复

- [#5627](https://github.com/hyperf/hyperf/pull/5627) 修复方法 `Hyperf\Context\Context::destroy` 支持协程下调用。

## 优化

- [#5616](https://github.com/hyperf/hyperf/pull/5616) 将 `ApplicationContext` 从 `hyperf/utils` 分离到 `hyperf/context`。
- [#5617](https://github.com/hyperf/hyperf/pull/5617) 将 `hyperf/guzzle` 从 `hyperf/consul` 依赖中移除。
- [#5618](https://github.com/hyperf/hyperf/pull/5618) 支持在 Swagger 面板中设置默认路由。
- [#5619](https://github.com/hyperf/hyperf/pull/5619) [#5620](https://github.com/hyperf/hyperf/pull/5620) 将 `hyperf/coroutine` 从 `hyperf/utils` 分离出来。
- [#5621](https://github.com/hyperf/hyperf/pull/5621) 使用 `Hyperf\Context\ApplicationContext` 代替 `Hyperf\Utils\ApplicationContext`。
- [#5622](https://github.com/hyperf/hyperf/pull/5622) 将 `CoroutineProxy` 从 `hyperf/utils` 分离到 `hyperf/context`。
- [#5623](https://github.com/hyperf/hyperf/pull/5623) 使用 `Hyperf\Coroutine\Coroutine` 替代 `Hyperf\Utils\Coroutine`。
- [#5624](https://github.com/hyperf/hyperf/pull/5624) 将 `Channel` 相关方法从 `hyperf/utils` 分离到 `hyperf/coroutine`。
- [#5629](https://github.com/hyperf/hyperf/pull/5629) 将 `Hyperf\Utils\Arr` 继承 `Hyperf\Collection\Arr`。

# v3.0.15 - 2023-04-07

## 新增

- [#5606](https://github.com/hyperf/hyperf/pull/5606) 新增配置 `server.options.send_channel_capacity` 用来控制使用 `协程风格` 服务时，是否使用 `SafeSocket` 来返回数据。

## 优化

- [#5593](https://github.com/hyperf/hyperf/pull/5593) [#5598](https://github.com/hyperf/hyperf/pull/5598) 使用 `Hyperf\Collection\Collection` 替代 `Hyperf\Utils\Collection`。
- [#5594](https://github.com/hyperf/hyperf/pull/5594) 使用 `Hyperf\Collection\Arr` 替代 `Hyperf\Utils\Arr`。
- [#5596](https://github.com/hyperf/hyperf/pull/5596) 将 `hyperf/pipeline` 从 `hyperf/utils` 分离出来。
- [#5599](https://github.com/hyperf/hyperf/pull/5599) 使用 `Hyperf\Pipeline\Pipeline` 替代 `Hyperf\Utils\Pipeline`。

# v3.0.14 - 2023-04-01

## 修复

- [#5578](https://github.com/hyperf/hyperf/pull/5578) 修复了无法序列化 `Crontab` 的问题。
- [#5579](https://github.com/hyperf/hyperf/pull/5579) 修复 `crontab:run` 无法正常工作的问题。

## 优化

- [#5572](https://github.com/hyperf/hyperf/pull/5572) 优化了 `HTTP` 服务，使用 `WritableConnection` 实现，支持 `Swow`。
- [#5577](https://github.com/hyperf/hyperf/pull/5577) 将组件 `hyperf/collection` 从 `hyperf/utils` 分离。
- [#5580](https://github.com/hyperf/hyperf/pull/5580) 将组件 `hyperf/conditionable` 和 `hyperf/tappable` 从 `hyperf/utils` 分离。
- [#5585](https://github.com/hyperf/hyperf/pull/5585) 优化 `service-governance` 组件，去除了 `consul` 的依赖关系。

# v3.0.13 - 2023-03-26

## 新增

- [#5561](https://github.com/hyperf/hyperf/pull/5561) 为 `hyperf/kafka` 增加自定义定时器的配置。
- [#5562](https://github.com/hyperf/hyperf/pull/5562) 为 `MySQL` 数据库组件，增加 `upsert()` 支持。
- [#5563](https://github.com/hyperf/hyperf/pull/5563) 为 `Crontab` 任务增加是否执行完的逻辑。

## 优化

- [#5544](https://github.com/hyperf/hyperf/pull/5554) 为 `grpc-server` 组件取消 `hyperf/rpc` 的依赖。
- [#5550](https://github.com/hyperf/hyperf/pull/5550) 优化了 `Coordinator Timer` 和 `Crontab Parser` 的代码。
- [#5566](https://github.com/hyperf/hyperf/pull/5566) 基于模型生成 `Swagger Schemas` 时，优化变量类型可以为 `Null`。
- [#5569](https://github.com/hyperf/hyperf/pull/5569) 优化了 `Crontab RunCommand` 的依赖关系。

# v3.0.12 - 2023-03-20

## 新增

- [#4112](https://github.com/hyperf/hyperf/pull/4112) 新增配置项 `kafka.default.enable` 用来控制消费者是否启动。
- [#5533](https://github.com/hyperf/hyperf/pull/5533) [#5535](https://github.com/hyperf/hyperf/pull/5535) 为 `kafka` 组件增加 `client` 和 `socket` 配置，允许开发者自定义。
- [#5536](https://github.com/hyperf/hyperf/pull/5536) 新增组件 `hyperf/http2-client`。
- [#5538](https://github.com/hyperf/hyperf/pull/5538) 为 `hyperf/http2-client` 增加双向流支持。
- [#5511](https://github.com/hyperf/hyperf/pull/5511) 将 `GRPC` 服务统一到 `RPC` 服务中，可以更加方便的进行服务注册与发现。
- [#5543](https://github.com/hyperf/hyperf/pull/5543) 增加 `Nacos` 双向流支持，可以监听到配置中心实时更新的事件。
- [#5545](https://github.com/hyperf/hyperf/pull/5545) 为组件 `hyperf/http2-client` 增加双向流相关的测试。
- [#5546](https://github.com/hyperf/hyperf/pull/5546) 为 `Nacos` 配置中心增加 `GRPC` 功能，可以实时监听配置的变化。

## 优化

- [#5539](https://github.com/hyperf/hyperf/pull/5539) 优化了 `AMQPConnection` 的代码，以支持最新版本的 `php-amqplib` 组件。
- [#5528](https://github.com/hyperf/hyperf/pull/5528) 优化了 `aspects` 的配置，对热重启有更好的支持。
- [#5541](https://github.com/hyperf/hyperf/pull/5541) 提升了 `FactoryResolver` 基于 `XXXFactory` 实例化对象的能力，增加了可选参数配置。

# v3.0.11 - 2023-03-15

## 新增

- [#5499](https://github.com/hyperf/hyperf/pull/5499) 为 `hyperf/constants` 组件增加枚举(>=PHP8.1)类型支持。
- [#5508](https://github.com/hyperf/hyperf/pull/5508) 新增方法 `Hyperf\Rpc\Protocol::getNormalizer`。
- [#5509](https://github.com/hyperf/hyperf/pull/5509) 为 `json-rpc` 组件自动注册 `normalizer`。
- [#5513](https://github.com/hyperf/hyperf/pull/5513) 组件 `rpc-multiplex` 使用默认的 `normalizer` 并对 `rpc-server` 增加自定义 `protocol.normalizer` 的支持。
- [#5518](https://github.com/hyperf/hyperf/pull/5518) 增加方法 `SwooleConnection::getSocket` 用来获取 `Swoole` 的 `Response`。
- [#5520](https://github.com/hyperf/hyperf/pull/5520) 新增方法 `Coroutine::stats()` 和 `Coroutine::exists()`。
- [#5525](https://github.com/hyperf/hyperf/pull/5525) 新增配置 `kafka.default.consume_timeout` 用来控制消费者消费数据的超时时间。
- [#5526](https://github.com/hyperf/hyperf/pull/5526) 新增方法 `Hyperf\Kafka\AbstractConsumer::isEnable()` 用来控制 `kafka` 消费者是否启动。

## 修复

- [#5519](https://github.com/hyperf/hyperf/pull/5519) 修复因 `kafka` 生产者 `loop` 方法导致进程无法正常退出的问题。
- [#5523](https://github.com/hyperf/hyperf/pull/5523) 修复在发生 `kafka rebalance` 的时候，进程无故停止的问题。

## 优化

- [#5510](https://github.com/hyperf/hyperf/pull/5510) 允许开发者自定义 `RPC 客户端` 的 `normalizer` 的实现。
- [#5525](https://github.com/hyperf/hyperf/pull/5525) 当消费 `kafka` 消息时，每个消息会在独立的协程中进行处理。

# v3.0.10 - 2023-03-11

## 修复

- [#5497](https://github.com/hyperf/hyperf/pull/5497) 修复 `apollo` 配置中心，无法正常触发 `ConfigChanged` 事件的问题。

## 新增

- [#5491](https://github.com/hyperf/hyperf/pull/5491) 为 `Str` 和 `Stringable` 新增 `charAt` 方法。
- [#5503](https://github.com/hyperf/hyperf/pull/5503) 新增 `Hyperf\Contract\JsonDeSerializable`。
- [#5504](https://github.com/hyperf/hyperf/pull/5504) 新增 `Hyperf\Utils\Serializer\JsonDeNormalizer`。

## 优化

- [#5493](https://github.com/hyperf/hyperf/pull/5493) 优化 `Nacos` 服务注册器的代码，使其支持 `1.x` 和 `2.x` 版本。
- [#5494](https://github.com/hyperf/hyperf/pull/5494) [#5501](https://github.com/hyperf/hyperf/pull/5501) 优化 `hyperf/guzzle` 组件，当使用 `Swoole` 且不支持 `native-curl` 时，才会默认替换 `Handler`。

## 变更

- [#5492](https://github.com/hyperf/hyperf/pull/5492) 将 `Hyperf\DbConnection\Listener\CreatingListener` 重命名为 `Hyperf\DbConnection\Listener\InitUidOnCreatingListener`.

# v3.0.9 - 2023-03-05

## 新增

- [#5467](https://github.com/hyperf/hyperf/pull/5467) 为 `GRPC` 增加 `Google\Rpc\Status` 的支持。
- [#5472](https://github.com/hyperf/hyperf/pull/5472) 为模型增加 `ulid` 和 `uuid` 的支持。
- [#5476](https://github.com/hyperf/hyperf/pull/5476) 为 `Stringable` 增加 `ArrayAccess` 的支持。
- [#5478](https://github.com/hyperf/hyperf/pull/5478) 为 `Stringable` 和 `Str` 增加 `isMatch` 方法。

## 优化

- [#5469](https://github.com/hyperf/hyperf/pull/5469) 当数据库连接出现问题时，确保连接在归还到连接池前被重置。

# v3.0.8 - 2023-02-26

## 修复

- [#5433](https://github.com/hyperf/hyperf/pull/5433) [#5438](https://github.com/hyperf/hyperf/pull/5438) 修复 `Nacos` 临时实例，不需要发送心跳的问题。 
- [#5464](https://github.com/hyperf/hyperf/pull/5464) 修复 `Swagger` 服务无法在异步风格中，正常启动的问题。

## 新增

- [#5434](https://github.com/hyperf/hyperf/pull/5434) 为 `Swow` 增加 `UDP` 服务的支持。
- [#5444](https://github.com/hyperf/hyperf/pull/5444) 新增脚本 `GenSchemaCommand` 用来生成 `Swagger Schema`。
- [#5451](https://github.com/hyperf/hyperf/pull/5451) 为模型集合新增 `appends($attributes)` 方法。
- [#5453](https://github.com/hyperf/hyperf/pull/5453) 为测试组件增加 `put()` 和 `patch()` 方法。
- [#5454](https://github.com/hyperf/hyperf/pull/5454) 为 `GRPC` 组件新增方法 `Hyperf\Grpc\Parser::statusFromResponse`。
- [#5459](https://github.com/hyperf/hyperf/pull/5459) 为 `Str` 和 `Stringable` 新增方法 `uuid` 和 `ulid`。

## 优化

- [#5437](https://github.com/hyperf/hyperf/pull/5437) 为 `Str::length` 移除了没用的 `if` 判断。
- [#5439](https://github.com/hyperf/hyperf/pull/5439) 优化了 `Arr::shuffle` 的代码。

# v3.0.7 - 2023-02-18

## 新增

- [#5042](https://github.com/hyperf/hyperf/pull/5402) 为 `Swagger` 组件增加配置 `swagger.scan.paths` 可以用来重写默认的扫描目录。
- [#5403](https://github.com/hyperf/hyperf/pull/5403) 为 `Swow` 增加 `Swoole Server` 配置项的适配。
- [#5404](https://github.com/hyperf/hyperf/pull/5404) 为 `Swagger` 增加多端口服务的支持。
- [#5406](https://github.com/hyperf/hyperf/pull/5406) 为 `Hyperf\Database\Model\Builder` 增加 `mixin` 方法。
- [#5407](https://github.com/hyperf/hyperf/pull/5407) 为 `Swagger` 增加请求方法 `Delete` 和 `Options` 的支持。
- [#5409](https://github.com/hyperf/hyperf/pull/5409) 为数据库组件中 `Query\Builder` 和 `Paginator` 类增加了一部分方法。
- [#5414](https://github.com/hyperf/hyperf/pull/5414) 为 `Hyperf\Database\Model\Builder` 增加了 `clone` 方法。
- [#5418](https://github.com/hyperf/hyperf/pull/5418) 为配置中心增加了 `ConfigChanged` 事件。
- [#5429](https://github.com/hyperf/hyperf/pull/5429) 在连接 `Aliyun Nacos` 服务时，增加了配置项 `access_key` 和 `access_secret`。

## 修复

- [#5405](https://github.com/hyperf/hyperf/pull/5405) 修复了当系统支持 `IPv6` 时，`get local ip` 无法正常读取 ip 的问题。
- [#5417](https://github.com/hyperf/hyperf/pull/5417) 修复 `PgSQL` 无法正常使用数据库迁移功能的问题。
- [#5421](https://github.com/hyperf/hyperf/pull/5421) 修复数据库 `Json` 结构无法正常使用 `boolean` 类型的问题。
- [#5428](https://github.com/hyperf/hyperf/pull/5428) 修复 `Metric` 中间件遇到异常时，服务端参数统计有误的问题。
- [#5424](https://github.com/hyperf/hyperf/pull/5424) 修复数据库迁移组件，不支持 `PHP8.2` 的问题。

## 优化

- [#5411](https://github.com/hyperf/hyperf/pull/5411) 优化代码，异常 `WebSocketHandeShakeException` 应继承 `BadRequestHttpException`。
- [#5419](https://github.com/hyperf/hyperf/pull/5419) 优化 `RPN` 组件的实现逻辑，可以更好的进行自定义扩展。
- [#5422](https://github.com/hyperf/hyperf/pull/5422) 当安装 `Swagger` 组件后，默认启动 `Swagger` 的能力。

# v3.0.6 - 2023-02-12

## 修复

- [#5361](https://github.com/hyperf/hyperf/pull/5361) 修复 `Nacos` 注入临时实例失败的问题。
- [#5382](https://github.com/hyperf/hyperf/pull/5382) 修复 `SocketIO` 中使用 `mix-subscriber` 时，因为没有设置密码而报错的问题。
- [#5386](https://github.com/hyperf/hyperf/pull/5386) 修复 `SwoolePostgresqlClient` 会被执行到不存在的方法 `exec` 的问题。
- [#5394](https://github.com/hyperf/hyperf/pull/5394) 修复 `hyperf/config-apollo` 无法正常使用的问题。

## 新增

- [#5366](https://github.com/hyperf/hyperf/pull/5366) 为 `hyperf/database` 增加 `forceDeleting` 事件。
- [#5373](https://github.com/hyperf/hyperf/pull/5373) 为 `SwowServer` 增加 `settings` 配置。
- [#5376](https://github.com/hyperf/hyperf/pull/5376) 为 `hyperf/metric` 增加协程风格下服务状态收集的能力。
- [#5379](https://github.com/hyperf/hyperf/pull/5379) 当 `Nacos` 心跳失败时，增加日志记录。
- [#5389](https://github.com/hyperf/hyperf/pull/5389) 增加 `Swagger` 支持。
- [#5395](https://github.com/hyperf/hyperf/pull/5395) 为 `Swagger` 组件，增加验证器功能。
- [#5397](https://github.com/hyperf/hyperf/pull/5397) 支持所有已知的 `Swagger` 注解。

# v3.0.5 - 2023-02-06

## 新增

- [#5338](https://github.com/hyperf/hyperf/pull/5338) 为 `SoftDeletingScope` 新增了 `addRestoreOrCreate` 方法。
- [#5349](https://github.com/hyperf/hyperf/pull/5349) 新增监听器 `ResumeExitCoordinatorListener`。
- [#5355](https://github.com/hyperf/hyperf/pull/5355) 新增方法 `System::getCpuCoresNum()`。

## 修复

- [#5357](https://github.com/hyperf/hyperf/pull/5357) 修复在匿名函数中抛错时，`coordinator` 定时器无法正常停止的问题。

## 优化

- [#5342](https://github.com/hyperf/hyperf/pull/5342) 优化了 `Redis` 哨兵模式的地址读取方式。

# v3.0.4 - 2023-01-22

## 修复

- [#5332](https://github.com/hyperf/hyperf/pull/5332) 修复了 `PgSQLSwooleConnection::unprepared` 无法正常使用的问题。
- [#5333](https://github.com/hyperf/hyperf/pull/5333) 修复数据库组件在闲置时间过长，连接断开导致数据库读写报错的问题。

# v3.0.3 - 2023-01-16

## 修复

- [#5318](https://github.com/hyperf/hyperf/pull/5318) 修复在使用 PHP 8.1 版本时，限流器无法使用的问题。
- [#5324](https://github.com/hyperf/hyperf/pull/5324) 修复 MySQL 连接断开时，数据库组件无法使用的问题。
- [#5322](https://github.com/hyperf/hyperf/pull/5322) 修复 Kafka 消费者在没有设置 `memberId` 等参数时，无法使用的问题。
- [#5327](https://github.com/hyperf/hyperf/pull/5327) 修复 PgSQL 在创建连接失败时，导致类型错误的问题。

## 新增

- [#5314](https://github.com/hyperf/hyperf/pull/5314) 新增方法 `Hyperf\Coordinator\Timer::stats()`.
- [#5323](https://github.com/hyperf/hyperf/pull/5323) 新增方法 `Hyperf\Nacos\Provider\ConfigProvider::listener()`.

## 优化

- [#5308](https://github.com/hyperf/hyperf/pull/5308) [#5309](https://github.com/hyperf/hyperf/pull/5309) [#5310](https://github.com/hyperf/hyperf/pull/5310) [#5311](https://github.com/hyperf/hyperf/pull/5311) 为 `hyperf/metric` 增加协程服务的支持。
- [#5315](https://github.com/hyperf/hyperf/pull/5315) 增加 `hyperf/metric` 组件的监控指标。
- [#5326](https://github.com/hyperf/hyperf/pull/5326) 在循环中，收集服务当前的状态。

# v3.0.2 - 2023-01-09

# 修复

- [#5305](https://github.com/hyperf/hyperf/pull/5305) 使用 `PolarDB` 读写分离时，修复因没有修改数据的情况下，提交事务会导致此链接存在异常，但又被回收进连接池的问题。
- [#5307](https://github.com/hyperf/hyperf/pull/5307) 修复 `hyperf/metric` 组件中，`Timer::tick()` 的 `$timeout` 参数设置错误的问题。

## 优化

- [#5306](https://github.com/hyperf/hyperf/pull/5306) 当连接池回收连接失败时，记录日志。

# v3.0.1 - 2023-01-09

## 修复

- [#5289](https://github.com/hyperf/hyperf/pull/5289) 修复使用 `Swow` 引擎时，`Signal` 组件无法使用的问题。
- [#5303](https://github.com/hyperf/hyperf/pull/5303) 修复 `SocketIO` 的 `Redis NSQ 适配器`，当首次使用，`topics` 为 `null` 时，无法正常工作的问题。

## 优化

- [#5287](https://github.com/hyperf/hyperf/pull/5287) 当服务端响应数据时，如果出现异常，则记录对应日志。
- [#5292](https://github.com/hyperf/hyperf/pull/5292) 为组件 `hyperf/metric` 增加 `Swow` 引擎的支持。
- [#5301](https://github.com/hyperf/hyperf/pull/5301) 优化 `Hyperf\Rpc\PathGenerator\PathGenerator` 的代码实现。

# v3.0.0 - 2023-01-03

- [#4238](https://github.com/hyperf/hyperf/issues/4238) 更新所有组件 PHP 最低版本到 8.0
- [#5087](https://github.com/hyperf/hyperf/pull/5087) 支持 PHP 8.2

## BC breaks

- 框架移除了 `@Annotation` 的使用，全面使用 `PHP8` 的原生注解 `Attribute`。更新框架前，请确保已经全部替换到 PHP8 的原生注解。

我们提供了脚本，可以更加方便的将 `Doctrine Annotations` 替换为 `PHP8 Attributes`。

!> Note: 以下脚本只能在框架 2.2 版本下执行

```shell
composer require hyperf/code-generator
php bin/hyperf.php code:generate -D app
```

- 模型升级脚本

> 因为模型基类，增加了类型限制，所以你需要使用以下脚本，将所有模型更新到新的写法。

```shell
composer require hyperf/code-generator
php vendor/bin/regenerate-models.php $PWD/app/Model
```

- 框架增加了很多类型限制，所以当你从 `2.2` 升级到 `3.0`版本时，你需要调用静态检测脚本，检查并确保其可以正常工作。

```shell
composer analysis
```

- 框架基于 `gRPC` 标准修改了 `gRPC` 服务的 HTTP 返回码。
