public InMemoryEventBusSubManager(string name, IAppEventsManager manager) { dic = new ConcurrentDictionary <string, string>(); _manager = manager; _subInfos = new List <SubscriptionInfo>(); _sub_keys = new HashSet <string>(); QueueName = name; }
public void Run(ISoaServiceHost host, string name, string[] args) { var scope = host.ServicesProvider.CreateScope(); //--loadevents -app history,userapi -path /data/his _eventsManager = scope.ServiceProvider.GetService <IAppEventsManager>(); _logger = scope.ServiceProvider.GetService <ILogger <MqEventsLocalBuild> >(); Name = name; for (var i = 0; i < args.Length; i++) { if (args[i].ToLower() == "--loadevents") { string appname = ""; string path = ""; var n1 = args[i + 1]; var n2 = args[i + 3]; var v1 = args[i + 2]; var v2 = args[i + 4]; var arr1 = new string[] { n1, v1 }; var arr2 = new string[] { n2, v2 }; var arr = new string[2][] { arr1, arr2 }; foreach (var n in arr) { if (n[0] == "-app") { appname = n[1]; } else if (n[0] == "-path") { path = n[1]; } } var sp = host.ServicesProvider; var appnames = appname.Split(','); foreach (var app in appnames) { _logger.LogInformation($"begin create event files of {app} "); var version = ""; var res = _eventsManager.GetVersion(app); if (res.IsVaild) { version = res.InvaildMessage; if (version == "0.0") { continue; } res = _eventsManager.VaildityTest(app, version); } if (!res.IsVaild) { _logger.LogError("EventModel vaild-test failed with err-msg:" + res.InvaildMessage + ",app=" + app + ",version=" + version); return; } var app_path = Path.Combine(path, "EventModels", app); if (!Directory.Exists(app_path)) { Directory.CreateDirectory(app_path); } var versionFile = Path.Combine(app_path, version + ".v"); if (File.Exists(versionFile)) { continue; } var meta = _eventsManager.ListEvents(app); LocalBuildEvents(meta, app_path); } break; } } scope.Dispose(); }
/// <summary> /// 使用字符串地址创建RabbitMq /// </summary> /// <param name="builder">构造器</param> /// <param name="mqConnstr">MQ地址</param> /// <param name="enven_mgr_api">事件名称管理器地址</param> /// <returns></returns> public static SoaServiceContainerBuilder UseRabbitMq(this SoaServiceContainerBuilder builder, string mqConnstr, IAppEventsManager enven_mgr_api) { return(UseRabbitMq(builder, x => x.Create(mqConnstr), enven_mgr_api)); }
public InMemorySubFactory(IAppEventsManager manager) { _manager = manager; }
/// <summary> /// 注册MQ连接字符串 /// <para>格式:server=ip:port;user=username;password=pwd;vhost=vhostname;name=zs</para> /// eventsmgr=inmemory /// </summary> /// <param name="builder"></param> /// <param name="action">创建MQ连接,可通过此方法创建多个连接;不同的连接通过name来区分</param> /// <param name="eventsManager">消息名称管理器</param> /// <param name="retryConnect">MQ断线重连尝试次数</param> /// <returns></returns> public static SoaServiceContainerBuilder UseRabbitMq(this SoaServiceContainerBuilder builder, Action <DefaultMqConnectSource> action, IAppEventsManager eventsManager = null, int retryConnect = 5) { lock (builder) { var obj = builder.GetTag(mqsettings); if (obj != null) { throw new ArgumentException("can not repeat register the rabbit-mq depend items"); } builder.SetTag(mqsettings, new object()); } var service = builder.Services; eventsManager ??= new DefaultEventsManager(); service.AddSingleton(eventsManager); builder.Services.AddSingleton(sp => { var subfact = sp.GetService <IEventBusSubManagerFactory>(); var connSource = new DefaultMqConnectSource(retryConnect, subfact); action.Invoke(connSource); return(connSource); }); builder.Services.AddSingleton <IEventBusSubManagerFactory, InMemorySubFactory>(sp => { var subfact = new InMemorySubFactory(eventsManager); return(subfact); }); builder.Services.AddSingleton(sp => { var source = sp.GetService <DefaultMqConnectSource>(); var l1 = sp.GetService <ILogger <IDirectEventBus> >(); var l2 = sp.GetService <ILogger <ITopicEventBus> >(); var l3 = sp.GetService <ILogger <IFanoutEventBus> >(); var busfact = new EventBusFactory(source, sp, l1, l2, l3); return(busfact); }); return(builder); }