Example #1
0
 public InMemoryEventBusSubManager(string name, IAppEventsManager manager)
 {
     dic       = new ConcurrentDictionary <string, string>();
     _manager  = manager;
     _subInfos = new List <SubscriptionInfo>();
     _sub_keys = new HashSet <string>();
     QueueName = name;
 }
Example #2
0
        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();
        }
Example #3
0
 /// <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));
 }
Example #4
0
 public InMemorySubFactory(IAppEventsManager manager)
 {
     _manager = manager;
 }
Example #5
0
        /// <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);
        }