Skip to content

Latest commit

 

History

History
49 lines (42 loc) · 2.21 KB

sentinel.md

File metadata and controls

49 lines (42 loc) · 2.21 KB

什么是哨兵

框架提供了哨兵,用于实现诸如队列监控等功能。哨兵在单独的自定义进程中执行,可以设置只在某一台服务器上执行(通过配置指定服务器ip),也可以指定在所有服务器上执行。 默认是只在一台上执行,必须配置服务器ip才会启动。

可以设置多个哨兵,如其中一个仅在主服上执行(如监控队列健康),另一个在所有服务器上执行(如需执行清空目录的任务)。

用法

  1. EasySwooleEvent::mainServerCreate()中添加哨兵:
public static function mainServerCreate(EventRegister $register)
{
    ...
    $sentinel = new Sentinel('哨兵1');
    // onlyOnMaster默认是true(表示仅在主服一台上面执行),可以不调
    // addTask可以进行链式调用添加多个任务,其第一个参数表示多长时间执行一次(秒)
    $sentinel->onlyOnMaster(true)->addTask(4, function () {
        // 添加队列监控的哨兵任务
        QueueMonitor::watch('下单中台', ['trans_order_fin']);
    });
    ServerManager::getInstance()->getSwooleServer()->addProcess($sentinel->getProcess());
}
  1. 如果哨兵是 onlyOnMaster 的,则有两种方式启动哨兵:

    1. 命令行启动时加 --master 参数,如 php easyswoole start --env=test --master
    2. 设置系统环境变量:export WECARSWOOLE_MASTER=1
  2. 哨兵启动后,会在 storage/temp/ 下面生成 sentinel.txt 文件;

框架提供了QueueMonitor哨兵供监控队列,项目根据需要使用。

注意: 旧版本中是通过在配置中心配置用于执行哨兵的服务器ip(针对 onlyOnMaster 的哨兵):

...
return [
    'sentinel_server' => apollo('application', 'sentinel_server') ?: '',// 执行哨兵的服务器
];

框架对此仍然做了兼容,但新版本程序不要再使用此配置,该模式在容器下无效。

旧版本代码如果想要使用命令行模式,需要更新 wecarswoole 框架后,在入口文件 easyswoole 中加入如下一段代码:

  // 是否master server
  if (in_array('--master', $args)) {
      define('WECARSWOOLE_MASTER', 1);
  }