hyperf/CHANGELOG-3.0.md
2023-04-26 11:48:38 +08:00

34 KiB

v3.0.19 - TBD

v3.0.18 - 2023-04-26

Added

  • #5672 Added some helper functions in hyperf/support.

Fixed

  • #5662 Fixed bug that pgsql-swoole cannot throw exceptions when statement execution failed.

Optimized

  • #5660 Split hyperf/codec from hyperf/utils.
  • #5663 Split hyperf/serializer from hyperf/utils.
  • #5666 Split Packers to hyperf/codec.
  • #5668 Split hyperf/support from hyperf/utils.
  • #5670 Split hyperf/code-parser from hyperf/utils.
  • #5671 Use Hyperf\Coroutine\Channel\Pool instead of Hyperf\Utils\ChannelPool.
  • #5674 Instead of classes and functions of Hyperf\Utils.

v3.0.17 - 2023-04-19

Fixed

  • #5642 Fixed bug that the model cache cannot be created when using find many to get non-exists models.
  • #5643 Fixed bug that the empty caches cannot be used for Model::findManyFromCache().
  • #5649 Fixed bug init table collector cannot work for coroutine style server.

Added

  • #5634 Added Hyperf\Stringable\str() helper function.
  • #5639 Added Redis::pipeline() and Redis::transaction() support.
  • #5641 Support deeply nested cache relations for model-cache.
  • #5646 Added PriorityDefinition to sort dependencies.

Optimized

  • #5634 Use Hyperf\Stringable\Str instead of Hyperf\Utils\Str.
  • #5636 Reduce kafka first start time and handle stop consumer logic
  • #5648 Removed requirement hyperf/utils from hyperf/guzzle.

v3.0.16 - 2023-04-12

Fixed

  • #5627 Fixed issue where coroutine context was not destroyed in Hyperf\Context\Context::destroy method.

Optimized

  • #5616 Split ApplicationContext from hyperf/utils to hyperf/context.
  • #5617 Removed the requirement hyperf/guzzle from hyperf/consul.
  • #5618 Support to set the default router for swagger.
  • #5619 #5620 Split hyperf/coroutine from hyperf/utils.
  • #5621 Use Hyperf\Context\ApplicationContext instead of Hyperf\Utils\ApplicationContext.
  • #5622 Split CoroutineProxy from hyperf/utils to hyperf/context.
  • #5623 Use Hyperf\Coroutine\Coroutine instead of Hyperf\Utils\Coroutine.
  • #5624 Split Channel utils from hyperf/utils to hyperf/coroutine.
  • #5629 Refactor Hyperf\Utils\Arr that let it extends Hyperf\Collection\Arr.

v3.0.15 - 2023-04-07

Added

  • #5606 Added server.options.send_channel_capacity to control whether to use safe socket.

Optimized

  • #5593 #5598 Use Hyperf\Collection\Collection instead of Hyperf\Utils\Collection.
  • #5594 Use Hyperf\Collection\Arr instead of Hyperf\Utils\Arr.
  • #5596 Split hyperf/pipeline from hyperf/utils.
  • #5599 Use Hyperf\Pipeline\Pipeline instead of Hyperf\Utils\Pipeline。

v3.0.14 - 2023-04-01

Fixed

  • #5578 Fixed bug that unable to serialize Channel in Crontab.
  • #5579 Fixed bug that crontab:run cannot work.

Optimized

  • #5572 Update Http Server to use new WritableConnection implementation.
  • #5577 Split hyperf/collection from hyperf/utils.
  • #5580 Split hyperf/conditionable and hyperf/tappable from hyperf/utils.
  • #5585 Removed the requirement consul from service-governance.

v3.0.13 - 2023-03-26

Added

  • #5561 Added setTimer support for hyperf/kafka.
  • #5562 Added method Query\Builder::upsert().
  • #5563 Added running channel to make sure all crontab tasks handled successfully.

Optimized

  • #5544 Cancel grpc-server's dependency on hyperf/rpc.
  • #5550 Optimized code for crontab parser and coordinator timer.
  • #5566 Optimized the type hint to nullable for schemas which generated by cmd.
  • #5569 Simplify RunCommand's dependencies.

v3.0.12 - 2023-03-20

Added

  • #4112 Added kafka.default.enable to control the consumer start or not.
  • #5533 #5535 Added client & socket config for kafka.
  • #5536 Added hyperf/http2-client.
  • #5538 Support stream call for http2 client.
  • #5511 Support GRPC services which can easily to registry and discovery.
  • #5543 Support nacos grpc which used to listen config changed event.
  • #5545 Added streaming test cases for http2 client.
  • #5546 Support grpc streaming for config-nacos.

Optimized

  • #5539 Optimized code for AMQPConnection to support the latest php-amqplib.
  • #5528 Optimized hot reload for aspects.
  • #5541 Improve FactoryResolver.

v3.0.11 - 2023-03-15

Added

  • #5499 Support enum for hyperf/constants.
  • #5508 Added Hyperf\Rpc\Protocol::getNormalizer.
  • #5509 Auto register normalizer for json-rpc.
  • #5513 Use default normalizer for rpc-multiplex and use protocol.normalizer for rpc-server.
  • #5518 Added SwooleConnection::getSocket to get swoole response.
  • #5520 Added Coroutine::stats() and Coroutine::exists().
  • #5525 Added kafka.default.consume_timeout to control the consumer for consuming messages.
  • #5526 Added Hyperf\Kafka\AbstractConsumer::isEnable() to control the kafka consumer start or not.

Fixed

  • #5519 Fixed bug that worker cannot exit caused by kafka producer->loop().
  • #5523 Fixed bug that process stopped when kafka rebalance.

Optimized

  • #5510 Allow developers to replace the normalizer of RPC Client themselves.
  • #5525 Running in an independent coroutine when consume kafka message.

v3.0.10 - 2023-03-11

Fixed

  • #5497 Fixed bug that ConfigChanged cannot dispatched when using apollo.

Added

  • #5491 Added charAt method to both Str and Stringable.
  • #5503 Added Hyperf\Contract\JsonDeSerializable.
  • #5504 Added Hyperf\Utils\Serializer\JsonDeNormalizer.

Optimized

  • #5493 Optimized code for service registration which support nacos 1.x and 2.x.
  • #5494 #5501 Do not replace Handler when native-curl is supported.

Changed

  • #5492 Renamed Hyperf\DbConnection\Listener\CreatingListener to Hyperf\DbConnection\Listener\InitUidOnCreatingListener.

v3.0.9 - 2023-03-05

Added

  • #5467 Support Google\Rpc\Status for GRPC.
  • #5472 Support ulid and uuid for Model.
  • #5476 Added ArrayAccess to Stringable.
  • #5478 Added isMatch method to Str and Stringable helpers.

Optimized

  • #5469 Ensure that the connection must be reset the next time after broken.

v3.0.8 - 2023-02-26

Fixed

  • #5433 #5438 Fixed bug that the persistent service no need to send heartbeat.
  • #5464 Fixed bug that swagger server cannot work when using async style server.

Added

  • #5434 Support UDP Server for Swow.
  • #5444 Added GenSchemaCommand to generate schemas for swagger.
  • #5451 Added method appends($attributes) to model collections.
  • #5453 Added missing methods put() and patch() to testing HTTP client.
  • #5454 Added method Hyperf\Grpc\Parser::statusFromResponse.
  • #5459 Added some methods of uuid and ulid for Str and Stringable.

Optimized

  • #5437 Remove unnecessary if statement in Str::length.
  • #5439 Improve Arr::shuffle.

v3.0.7 - 2023-02-18

Added

  • #5042 Added swagger.scan.paths to rewrite scan paths for swagger.
  • #5403 Support swoole server settings for swow server.
  • #5404 Support multiport server for swagger.
  • #5406 Added mixin method to Hyperf\Database\Model\Builder.
  • #5407 Support HTTP methods Delete and Options for swagger.
  • #5409 Adds methods for Query\Builder and Paginator.
  • #5414 Added clone method to Hyperf\Database\Model\Builder.
  • #5418 Added ConfigChanged event to config-center.
  • #5429 Added access_key and access_secret which used to connect aliyun nacos.

Fixed

  • #5405 Fixed get local ip error when IPv6 exists.
  • #5417 Fixed bug that database-pgsql does not support migration.
  • #5421 Fixed database about boolean types for where in the json type.
  • #5428 Fixed bug that metric middleware cannot work well when encountered an exception.
  • #5424 Fixed bug that migrator cannot work when using PHP8.2.

Optimized

  • #5411 Optimized the code of WebSocketHandeShakeException which should inheritance BadRequestHttpException.
  • #5419 Optimized the code of RPN.
  • #5422 Enable swagger by default when installed swagger component.

v3.0.6 - 2023-02-12

Fixed

  • #5361 Fixed bug that the current service XXX is persistent service, can't register ephemeral instance.
  • #5382 Fixed bug that mix-subscriber cannot work caused by the empty auth.
  • #5386 Fixed bug that non-existing method exec called by SwoolePostgresqlClient.
  • #5394 Fixed bug that hyperf/config-apollo cannot work.

Added

  • #5366 Added forceDeleting event to hyperf/database.
  • #5373 Support server settings for SwowServer.
  • #5376 Support coroutine server stats for hyperf/metric.
  • #5379 Added log records when nacos heartbeat failed.
  • #5389 Added swagger support.
  • #5395 Support validation for swagger.
  • #5397 Support all swagger annotations.

v3.0.5 - 2023-02-05

Added

  • #5338 Added addRestoreOrCreate extension to SoftDeletingScope.
  • #5349 Added ResumeExitCoordinatorListener.
  • #5355 Added System::getCpuCoresNum().

Fixed

  • #5357 Fixed bug that the coordinator timer can't stop when an exception occurs inside $closure.

Optimized

  • #5342 Compatible with tcp://host:port configuration redis sentry address.

v3.0.4 - 2023-01-22

Fixed

  • #5332 Fixed bug that PgSQLSwooleConnection::unprepared cannot work.
  • #5333 Fixed bug that database cannot work when disconnect failed.

v3.0.3 - 2023-01-16

Fixed

  • #5318 Fixed bug that rate-limit cannot work when using php 8.1.
  • #5324 Fixed bug that database cannot work when disconnect caused by connection reset by mysql.
  • #5322 Fixed bug that kafka consumer cannot work when don't set memberId and so on.
  • #5327 Fixed bug that PostgresSQL can't work when create connection timed out.

Added

  • #5314 Added method Hyperf\Coordinator\Timer::stats().
  • #5323 Added method Hyperf\Nacos\Provider\ConfigProvider::listener().

Optimized

  • #5308 #5309 #5310 #5311 Added CoroutineServer Support for hyperf/metric.
  • #5315 Improve hyperf/metric.
  • #5326 Collect the metric of Server::stats() by loop.

v3.0.2 - 2023-01-09

Fixed

  • #5305 Fixed bug that commit failed when has no active transaction for polardb.
  • #5307 Fixed the parameter $timeout of Timer::tick() in hyperf/metric.

Optimized

  • #5306 Log records when release to pool failed.

v3.0.1 - 2023-01-09

Fixed

  • #5289 Fixed bug that signal cannot work when using swow.
  • #5303 Fixed bug that redis nsq adapter cannot work when topics is null.

Optimized

  • #5287 Added log records about the exception message when emit failed.
  • #5292 Support Swow for hyperf/metric.
  • #5301 Optimized code for Hyperf\Rpc\PathGenerator\PathGenerator.

v3.0.0 - 2023-01-03

  • #4238 Upgraded the minimum php version to ^8.0 for all components;
  • #5087 Support PHP 8.2;

BC breaks

  • The framework removes @Annotation support, and uses PHP8 native annotation Attribute. Before updating, be sure to check whether the project has been replaced by Attribute.

The following script can be executed to convert Doctrine Annotations to PHP8 Attributes.

Note: This script can only be executed under version 2.2

composer require hyperf/code-generator
php bin/hyperf.php code:generate -D app
  • Database Model upgrade script

Because the model base class has added type support for member variables, you need to use the following script to upgrade it to a new version.

composer require hyperf/code-generator
php vendor/bin/regenerate-models.php $PWD/app/Model
  • The framework adds more type restrictions to the class library, so when updating from 2.2 to 3.0, you need to run a static check to make sure it is works.
composer analysis
  • The framework modifies the Http status returned by gRPC Server according to the gRPC specification. It is fixed at 200, and gRPC Server returns the corresponding status code. Service upgrade to version 3.x

Dependencies Upgrade

  • Upgraded php-amqplib/php-amqplib to ^3.1;
  • Upgraded phpstan/phpstan to ^1.0;
  • Upgraded mix/redis-subscribe to mix/redis-subscriber:^3.0
  • Upgraded psr/simple-cache to ^1.0|^2.0|^3.0
  • Upgraded monolog/monolog to ^2.7|^3.1
  • Upgraded league/flysystem to ^1.0|^2.0|^3.0

Added

  • #4196 Added Hyperf\Amqp\IO\IOFactory which used to create amqp io by yourself.
  • #4304 Support $suffix for trait Hyperf\Utils\Traits\StaticInstance.
  • #4400 Added $description which used to set command description easily for Hyperf\Command\Command.
  • #4277 Added Hyperf\Utils\IPReader to get local IP.
  • #4497 Added Hyperf\Coordinator\Timer which can be stopped safely.
  • #4523 Support callback conditions for Conditionable::when() and Conditionable::unless().
  • #4663 Make Hyperf\Utils\Stringable implements Stringable.
  • #4700 Support coroutine style server for socketio-server.
  • #4852 Added NullDisableEventDispatcher to disable event dispatcher by default.
  • #4866 #4869 Added Annotation Scene which use scene in FormRequest easily.
  • #4908 Added Db::beforeExecuting() to register a hook which to be run just before a database query is executed.
  • #4909 Added ConsumerMessageInterface::getNums() to change the number of amqp consumer by dynamically.
  • #4918 Added LoadBalancerInterface::afterRefreshed() to register a hook which to be run after refresh nodes.
  • #4992 Added config amqp.enable which used to control amqp consumer whether to start automatically and producer whether to declare automatically.
  • #4994 #5016 Added component hyperf/database-pgsql which you can be used to connect pgsql server.
  • #5007 Support for SSL encrypted connection to Redis.
  • #5046 Added Hyperf\Database\Model\Concerns\HasAttributes::getRawOriginal().
  • #5052 Support parsing IPv6 host.
  • #5061 Added config symfony.event.enable to control whether to use SymfonyEventDispatcher.
  • #5163 Added Pipeline::thenReturn() method to run pipes and return the result
  • #5160 Added $dictionary for Str::slug, your can rewrite some tags easily.
  • #5186 Added option config for command server:watch.
  • #5206 Support the transformation of object type to AST nodes.
  • #5211 Added Annotation CacheAhead which used to cache data ahead.
  • #5227 Added Hyperf\WebSocketServer\Sender::getResponses().
  • #5250 Added defer_release config in hyperf/db
  • #5261 Added requirement ext-posix for watcher.

Optimized

  • #4147 Optimized code for nacos which you can use http://xxx.com/yyy/ instead of http://xxx.com:8848/ to connect nacos.
  • #4367 Optimized DataFormatterInterface which uses object instead of array as inputs.
  • #4547 Optimized code of Str::contains Str::startsWith and Str::endsWith based on PHP8.
  • #4596 Optimized Hyperf\Context\Context which support coroutineId for set() override() and getOrSet().
  • #4658 The method name is used as the routing path, when the path is null in route annotations.
  • #4668 Optimized class Hyperf\Utils\Str whose methods padBoth padLeft and padRight support multibyte.
  • #4678 Close all another servers when one of them closed.
  • #4688 Added SafeCaller to avoid server shutdown which caused by exceptions.
  • #4715 Adjust the order of injections for controllers to avoid inject null preferentially.
  • #4865 No need to check Redis::isConnected(), because it could be connected defer or reconnected after disconnected.
  • #4874 Use wait instead of parallel for coroutine style tcp server.
  • #4875 Use the original style when regenerating models.
  • #4880 Support ignoreAnnotations for Annotation Reader.
  • #4888 Removed useless Hyperf\Di\ClassLoader::$proxies, because merge it into Composer\Autoload\ClassLoader::$classMap.
  • #4905 Removed the redundant parameters of method Hyperf\Database\Model\Concerns\HasEvents::fireModelEvent().
  • #4949 Removed useless call() from Coroutine::create().
  • #4961 Removed proxy mode from Hyperf\Di\ClassLoader and Optimized Composer::getLoader().
  • #4981 Confirm before proceeding with the action when using ConfirmableTrait, such as migrate command.
  • #5017 Check validity of file descriptor before sending message to it when using socketio-server.
  • #5029 Removed useless method call() from callable function.
  • #5078 Optimized code about creating exception from another exception.
  • #5079 Catch exception for function defer by default.

Changed

  • #4199 Changed the public property $message to protected for Hyperf\AsyncQueue\Event\Event.
  • #4214 Renamed $circularDependences to $checkCircularDependencies for Dag.
  • #4225 Split hyperf/coordinator from hyperf/utils.
  • #4269 Changed the default priority of listener to 0 from 1.
  • #4345 Renamed Hyperf\Kafka\Exception\ConnectionCLosedException to Hyperf\Kafka\Exception\ConnectionClosedException.
  • #4434 The method Hyperf\Database\Model\Builder::insertOrIgnore will be return affected count.
  • #4495 Changed the default value to null for Hyperf\DbConnection\Db::__connection().
  • #4460 Use ?? instead of ?: for $callback when using Stringable::when().
  • #4502 Use Hyperf\Engine\Channel instead of Hyperf\Coroutine\Channel in hyperf/reactive-x.
  • #4611 Changed return type to void for Hyperf\Event\Contract\ListenerInterface::process().
  • #4669 Changed all annotations which only support PHP >= 8.0.
  • #4678 Support event dispatcher for command by default.
  • #4680 Stop processes which controlled by ProcessManager when server shutdown.
  • #4848 Changed $value.timeout to $options.timeout for CircuitBreaker.
  • #4930 Renamed method AnnotationManager::getFormatedKey() to AnnotationManager::getFormattedKey().
  • #4934 Throw NoNodesAvailableException when cannot select any node from load balancer.
  • #4952 Don't write pid when the settings.pid_file is null when using swow server.
  • #4979 Don't support database commands by default, please require hyperf/devtool or set them in autoload/commands.
  • #5008 Removed array type of Trace Annotation, because don't support array.
  • #5036 Changed grpc server StatsCode and serializeMessage.
  • #5601 Don't use Hyperf\Framework\SymfonyEventDispatcher by default, if you listen symfony events, you must open symfony.event.enable.
  • #5079 Use (string) $throwable instead of sprintf for Hyperf\ExceptionHandler\Formatter\FormatterInterface::format().
  • #5091 Move Jsonable and Xmlable to contract from utils.
  • #5092 Move MessageBag and MessageProvider to contract from utils.
  • #5204 Transform the type of param $server in Hyperf\WebSocketServer\Server::deferOnOpen() to mixed.
  • #5239 Throw exception when using chunkById but the column is not existed.

Swow Supported

  • #4756 Support hyperf/amqp.
  • #4757 Support Hyperf\Utils\Coroutine\Locker.
  • #4804 Support Hyperf\Utils\WaitGroup.
  • #4808 Replaced Swoole\Coroutine\Channel by Hyperf\Engine\Channel for all components.
  • #4873 Support hyperf/websocket-server.
  • #4917 Support hyperf/load-balancer.
  • #4924 Support TcpServer for hyperf/server.
  • #4984 Support hyperf/retry.
  • #4988 Support hyperf/pool.
  • #4989 Support hyperf/crontab.
  • #4990 Support hyperf/nsq.
  • #5070 Support hyperf/signal.

Removed

  • #4199 Removed deprecated handler Hyperf\AsyncQueue\Signal\DriverStopHandler.
  • #4482 Removed deprecated Hyperf\Utils\Resource.
  • #4487 Removed log warning from cache component when the key is greater than 64 characters.
  • #4596 Removed Hyperf\Utils\Context, please use Hyperf\Context\Context instead.
  • #4623 Removed AliyunOssHook for hyperf/filesystem.
  • #4667 Removed doctrine/annotations, please use PHP8 Attributes.
  • #5226 Removed WARNING log message when amqp connection restart.

Deprecated

  • Hyperf\Utils\Contracts\Arrayable will be deprecated, please use Hyperf\Contract\Arrayable instead.
  • Hyperf\AsyncQueue\Message will be deprecated, please use Hyperf\AsyncQueue\JobMessage instead.
  • Hyperf\Di\Container::getDefinitionSource() will be deprecated.

Fixed

  • #4549 Fixed bug that PhpParser::getExprFromValue() does not support assoc array.
  • #4835 Fixed the lost description when using property $description and $signature for hyperf/command.
  • #4851 Fixed bug that prometheus server will not be closed automatically when using command which enable event dispatcher.
  • #4854 Fixed bug that the socket-io client always reconnect when using coroutine style server.
  • #4885 Fixed bug that ProxyTrait::__getParamsMap can not work when using trait alias.
  • #4892 #4895 Fixed bug that RedisAdapter::mixSubscribe cannot work cased by redis prefix when using socketio-server.
  • #4910 Fixed bug that method ComponentTagCompiler::escapeSingleQuotesOutsideOfPhpBlocks() cannot work.
  • #4912 Fixed bug that websocket connection will be closed after 10s when using Swow.
  • #4919 #4921 Fixed bug that rpc connections can't refresh themselves after nodes changed when using rpc-multiplex.
  • #4920 Fixed bug that the routing path is wrong (like //foo) when the routing prefix is end of '/'.
  • #4940 Fixed memory leak caused by an exception which occurred in Parallel.
  • #5100 Fixed bug that the tag continue cannot work when using view-engine.
  • #5121 Fixed bug that the SQL is not valid but the correct error message cannot be obtained when using pgsql.
  • #5132 Fixed bug that the exit code of command does not work when the exception code isn't int.
  • #5142 Fixed bug that the method Request::parseHost does not work when host is invalid.
  • #5199 Fixed bug that RedisSentinel can't support empty password.
  • #5221 Fixed bug that PGSqlSwooleConnection::affectingStatement() can't work when the sql is wrong.
  • #5223 Fixed bug that KeepaliveConnection::isTimeout() can't work when using swow.
  • #5229 Fixed bug that proxy class will be generated failed when using parameters who allow null in constructor.
  • #5252 Fixed bug that generate rpc-client failed when the interface has parent interfaces.
  • #5268 Fixed bug that abstract methods will be written by di.