/// <summary> /// 执行回调函数 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="func"></param> /// <returns></returns> async Task <T> DoSync <T>(string key, Func <ISyncServiceFlowControlConfigureGrain, Task <T> > func) { try { var grain = (await OrleanClientProvider.GetGrain(key)); if (grain != null) { return(await func(grain)); } return(default);
public async Task RegisterConfigureObserver(string key) { if (!observers.Value.TryGetValue(key, out FlowControlConfigureObserver observer)) { await DoSync(key, true, async (grain) => { observer = new FlowControlConfigureObserver(); var reference = await(await OrleanClientProvider.GetClient()).CreateObjectReference <IFlowControlConfigureObserver>(observer); if (await grain.RegisterObserver(reference)) { observers.Value.TryAdd(key, observer); } }); } }
/// <summary> /// 获取服务配置节 /// </summary> /// <param name="pathName"></param> /// <returns></returns> public async Task <ServiceConfigureInfo> GetBreakerConfigure(string flowControlCfgKey, bool readLocalCache = true) { var cacheKey = $"{OxygenSetting.BreakerSettingKey}{ flowControlCfgKey}"; ServiceConfigureInfo result = null; if (readLocalCache) { if (!OrleanClientProvider.GetConfigureCache().TryGetValue(cacheKey, out result)) { result = await _syncConfigureProvider.GetConfigure(cacheKey); _ = Task.Run(() => RegisterConfigureObserver(cacheKey)); } } else { result = await _syncConfigureProvider.GetConfigure(cacheKey); } return(result); }