安装
composer require hyperf/config
配置文件结构
config
├── autoload // 此文件夹内的配置文件会被配置组件自己加载,并以文件夹内的文件名作为第一个键值
│ ├── amqp.php // 用于管理 AMQP 组件
│ ├── annotations.php // 用于管理注解
│ ├── apollo.php // 用于管理基于 Apollo 实现的配置中心
│ ├── aspects.php // 用于管理 AOP 切面
│ ├── async_queue.php // 用于管理基于 Redis 实现的简易队列服务
│ ├── cache.php // 用于管理缓存组件
│ ├── commands.php // 用于管理自定义命令
│ ├── consul.php // 用于管理 Consul 客户端
│ ├── databases.php // 用于管理数据库客户端
│ ├── dependencies.php // 用于管理 DI 的依赖关系和类对应关系
│ ├── devtool.php // 用于管理开发者工具
│ ├── exceptions.php // 用于管理异常处理器
│ ├── listeners.php // 用于管理事件监听者
│ ├── logger.php // 用于管理日志
│ ├── middlewares.php // 用于管理中间件
│ ├── opentracing.php // 用于管理调用链追踪
│ ├── processes.php // 用于管理自定义进程
│ ├── redis.php // 用于管理 Redis 客户端
│ └── server.php // 用于管理 Server 服务
├── config.php // 用于管理用户或框架的配置,如配置相对独立亦可放于 autoload 文件夹内
├── container.php // 负责容器的初始化,作为一个配置文件运行并最终返回一个 Psr\Container\ContainerInterface 对象
└── routes.php // 用于管理路由
server.php 配置说明
<?php
declare(strict_types=1);
use Hyperf\Server\Server;
use Hyperf\Server\Event;
return [
// 这里省略了该文件的其它配置
'settings' => [
'enable_coroutine' => true, // 开启内置协程
'worker_num' => swoole_cpu_num(), // 设置启动的 Worker 进程数
'pid_file' => BASE_PATH . '/runtime/hyperf.pid', // master 进程的 PID
'open_tcp_nodelay' => true, // TCP 连接发送数据时会关闭 Nagle 合并算法,立即发往客户端连接
'max_coroutine' => 100000, // 设置当前工作进程最大协程数量
'open_http2_protocol' => true, // 启用 HTTP2 协议解析
'max_request' => 100000, // 设置 worker 进程的最大任务数
'socket_buffer_size' => 2 * 1024 * 1024, // 配置客户端连接的缓存区长度
],
];
此配置文件用于管理 Server
服务,其中的 settings
选项可以直接使用由 Swoole Server
提供的选项
设置守护进程 :
可在 settings
中增加 'daemonize' => true
,执行 php bin/hyperf.php start
后,程序将转入后台作为守护进程运行
单独的 Server 配置
单独的 Server 配置需要添加在对应 servers 的 settings 当中,如 jsonrpc 协议的 TCP Server 配置启用 EOF 自动分包和设置 EOF 字符串
<?php
use Hyperf\Server\Server;
use Hyperf\Server\Event;
return [
// 这里省略了该文件的其它配置
'servers' => [
[
'name' => 'jsonrpc',
'type' => Server::SERVER_BASE,
'host' => '0.0.0.0',
'port' => 9503,
'sock_type' => SWOOLE_SOCK_TCP,
'callbacks' => [
Event::ON_RECEIVE => [\Hyperf\JsonRpc\TcpServer::class, 'onReceive'],
],
'settings' => [
'open_eof_split' => true, // 启用 EOF 自动分包
'package_eof' => "\r\n", // 设置 EOF 字符串
],
],
],
];
获取配置
config.php
与 autoload
文件夹内的配置文件的关系
1. config()函数
-
config.php
与autoload
文件夹内的配置文件在服务启动时都会被扫描并注入到Hyperf\Contract\ConfigInterface
对应的对象中 -
config.php
与autoload
调用方式不同
config.php
config('app_name')
config('databases.default.host')
2.初始化注入
<?php
declare(strict_types=1);
namespace App\Controller;
use Hyperf\Di\Annotation\AnnotationCollector;
use Hyperf\HttpServer\Annotation\AutoController;
use Hyperf\Contract\ConfigInterface;
/**
* @AutoController(prefix="user")
*/
class UserController extends AbstractController
{
/**
* @var ConfigInterface
*/
protected $config;
public function __construct(ConfigInterface $config)
{
$this->config = $config;
}
public function configs()
{
echo("========begin============ \n");
$app_name = $this->config->get('app_name');
var_dump($app_name);
echo("========end============ \n");
return 'configs';
}
}
@Inject() 注入
use Hyperf\Di\Annotation\Inject;
/**
* @Inject()
* @var \Hyperf\Contract\ConfigInterface
*/
private $configValue;
public function demo1()
{
echo("========begin======== \n");
var_dump($this->configValue->get('app_name'));
echo("========end========== \n");
return 'demo1';
}
@Value() 获取配置
use Hyperf\Config\Annotation\Value;
/**
* @Value("databases.default.host")
*/
private $configs;
public function demo2()
{
echo("========begin======== \n");
var_dump($this->configs);
echo("========end========== \n");
return 'demo1';
}
判断配置是否存在
/**
* @Inject()
* @var \Hyperf\Contract\ConfigInterface
*/
private $configValue;
$this->configValue->has('databases.default.host')
配置中心
Hyperf 为您提供了分布式系统的外部化配置支持,目前支持由携程开源的 Apollo、阿里云 ACM 应用配置管理、ETCD、Nacos 以及 Zookeeper 作为配置中心的支持。 关于配置中心的使用细节我们由 配置中心 章节来阐述。