startClusterServers static method
dynamic
startClusterServers({
- bool machineBind = false,
- String machineFile = '/etc/hostname',
- required String environment,
- required Map<
String, Map< envClusterServerConfig,String, List< >EasyClusterNodeConfig> > - Map<
String, Map< ? envClusterServerEntryPoint,String, EasyServerEntryPoint> > - Map<
String, EasyClusterNodeConfig> ? envDefaultServerConfig, - Map<
String, EasyServerEntryPoint> ? envDefaultServerEntryPoint, - String? defaultLogFolder,
- bool runErrorsZone = true,
- bool errorsAreFatal = false,
启动服务器集群
machineBind
是否只启动与机器名称对应的进程machineFile
机器名称文件的绝对路径environment
当前启动的环境envClusterServerConfig
环境集群配置信息envClusterServerEntryPoint
环境集群入口函数envDefaultServerConfig
环境默认配置信息envDefaultServerEntryPoint
环境默认入口函数defaultLogFolder
默认日志文件输出文件夹runErrorsZone
在runZonedGuarded函数中运行子线程逻辑errorsAreFatal
为true时若在子线程中产生未捕获的异常,将终止子线程的运行
Implementation
static startClusterServers({
bool machineBind = false,
String machineFile = '/etc/hostname',
required String environment,
required Map<String, Map<String, List<EasyClusterNodeConfig>>> envClusterServerConfig,
Map<String, Map<String, EasyServerEntryPoint>>? envClusterServerEntryPoint,
Map<String, EasyClusterNodeConfig>? envDefaultServerConfig,
Map<String, EasyServerEntryPoint>? envDefaultServerEntryPoint,
String? defaultLogFolder,
bool runErrorsZone = true,
bool errorsAreFatal = false,
}) async {
final clusterServerConfig = envClusterServerConfig[environment];
final clusterServerEntryPoint = envClusterServerEntryPoint?[environment];
final defaultServerConfig = envDefaultServerConfig?[environment];
final defaultServerEntryPoint = envDefaultServerEntryPoint?[environment];
final finalServerConfig = <String, List<EasyServerConfig>>{}; //解析后的服务器集群配置信息
final finalLogFileFolder = defaultLogFolder ?? '${Directory.current.path}/logs'; //日志文件输出文件夹
clusterServerConfig?.forEach((cluster, serverConfigList) {
finalServerConfig[cluster] = [];
for (var serverConfig in serverConfigList) {
final isolateInstances = serverConfig.isolateInstances ?? defaultServerConfig?.isolateInstances ?? 1;
for (var i = 0; i < isolateInstances; i++) {
finalServerConfig[cluster]?.add(
EasyServerConfig.fromClusterNodeConfig(
serverConfig: serverConfig,
globalConfig: defaultServerConfig,
defaultLogTag: '$environment-$cluster-${serverConfig.host}:${serverConfig.port}${isolateInstances > 1 ? '-$i' : ''}',
defaultLogFilePath: '$finalLogFileFolder/$environment-$cluster-${serverConfig.port}${isolateInstances > 1 ? '-$i' : ''}',
),
);
}
}
});
finalServerConfig.forEach((cluster, serverConfigList) {
for (var serverConfig in serverConfigList) {
serverConfig.initClusterLinksConfigs(finalServerConfig); //初始化需要远程连接的集群分组配置信息
if (machineBind && serverConfig.host != File(machineFile).readAsStringSync().trim()) {
continue; //不匹配主机名
}
final serverEntryPoint = clusterServerEntryPoint?[cluster] ?? defaultServerEntryPoint;
_workerList.add(worker.create(WkConfig(
serviceConfig: {
'environment': environment,
'cluster': cluster,
'serverConfig': serverConfig,
'serverEntryPoint': serverEntryPoint,
},
serviceHandler: _serviceHandler,
messageHandler: _messageHandler,
)));
}
});
for (var wk in _workerList) {
await wk.start(runErrorsZone: runErrorsZone, errorsAreFatal: errorsAreFatal);
}
}