Пример #1
0
        public void EventBusFactory_RegisterEventBus_UnequalPipelineId()
        {
            var bus     = new EventBus(() => null, "one");
            var factory = new EventBusFactory();

            Assert.Throws <Exception>(() => factory.Register("two", bus));
        }
Пример #2
0
        public void EventBusFactory_UpdatePipeline()
        {
            var factory = new EventBusFactory();

            factory.Register("test", () =>
            {
                var pipeline = new EventPipeline();
                pipeline.AddHandler(new ConsoleOutputHandler());

                return(pipeline);
            });

            var first  = factory.GetEventBus("test");
            var second = factory.GetEventBus("test");

            Assert.AreSame(first, second);

            factory.Register("test", () =>
            {
                var pipeline = new EventPipeline();
                pipeline.AddHandler(new ConsoleOutputHandler());

                return(pipeline);
            });

            var third = factory.GetEventBus("test");

            Assert.AreNotSame(first, third);
        }
Пример #3
0
        public static IEventBusBuilder AddEventListeners(this IEventBusBuilder builder, Action <EventServiceCollectionConfigurator> configure)
        {
            if (configure == null)
            {
                throw new ArgumentNullException(nameof(configure));
            }

            var configurator = new ServiceCollectionConfigurator(builder.Services);
            var wrapper      = new EventServiceCollectionConfigurator(configurator);

            configure(wrapper);

            builder.Services.AddSingleton(configurator);
            builder.Services.AddSingleton(provider => EventBusFactory.Build(cfg =>
            {
                var host = cfg.Host(new Uri(builder.Settings.ConnectionString), h =>
                {
                    h.Username(builder.Settings.UserName);
                    h.Password(builder.Settings.Password);
                });

                cfg.ReceiveEndpoint(host, wrapper.EventQueueName, e =>
                {
                    e.LoadFrom(provider);
                });
            }));

            builder.Services.AddSingleton <IHostedService, ServiceBusEventHost>();
            return(builder);
        }
Пример #4
0
        public void InstanceServer_FactorySetEventBus()
        {
            var pipelineId = Guid.NewGuid().ToString();

            var factory = new EventBusFactory();

            factory.Register(pipelineId, () =>
            {
                var pipeline = new EventPipeline();
                pipeline.AddHandler(new ConsoleOutputHandler());

                return(pipeline);
            });
            factory.Register(pipelineId, new EventBus(() => null, pipelineId));

            var server = new ProcessingServer(factory);

            server.Register(pipelineId, new LogInputHandler());

            var client = new EventDispatcher(server);

            client.Process(pipelineId, new LogMessage {
                Message = "InstanceServer"
            });
        }
Пример #5
0
        public void ProcessingServer_PipelineOptions()
        {
            var factory = new EventBusFactory();
            var server  = new ProcessingServer(factory);


            var config = new PipelineConfiguration
            {
                Id           = "test",
                InputHandler = new HandlerNode
                {
                    Type = typeof(LogInputHandler)
                },
                OutputHandlers = new List <HandlerNode>
                {
                    new HandlerNode
                    {
                        Type = typeof(ConsoleOutputHandler)
                    }
                },
                Options = new PipelineOptions
                {
                    MinProcessors   = 1,
                    MaxItemsInQueue = 100,
                    MaxProcessors   = 1
                }
            };


            server.SetupPipeline("test", config);

            var bus = factory.GetEventBus("test");

            Assert.AreSame(bus.PipelineFactory.Options, config.Options);
        }
Пример #6
0
        public void ProcessingServer_Heartbeat_NoRegistration()
        {
            var storage = new Mock <IStorage>();

            GlobalConfiguration.Setup(s => s.Register <IStorage>(storage.Object));

            var factory = new EventBusFactory();
            var server  = new ProcessingServer(factory);

            // give the hearbeat some time to execute
            Task.Delay(500).Wait();

            storage.Verify(exp => exp.Set <ServerModel>(It.IsAny <StorageKey>(), It.IsAny <ServerModel>()), Times.Never);

            // cleanup
            GlobalConfiguration.Setup(s => { });
        }
        /// <summary>
        /// Add EventBus related stuff to IoC
        /// </summary>
        /// <param name="services">The services</param>
        /// <param name="configureSettings">Action to be able to configure the event bus</param>
        /// <returns></returns>
        public static IEventBusBuilder AddEventBus(this IServiceCollection services, Action <ServiceBusSettings> configureSettings = null)
        {
            var settings = new ServiceBusSettings();

            configureSettings?.Invoke(settings);

            var builder = new EventBusBuilder(services, settings);

            services.AddSingleton(settings);
            services.AddMassTransit();
            services.AddSingleton(provider => EventBusFactory.Build(cfg =>
            {
                cfg.Host(new Uri(settings.ConnectionString), h =>
                {
                    h.Username(settings.UserName);
                    h.Password(settings.Password);
                });
            }));

            builder.AddEventPublisher();
            return(builder);
        }
Пример #8
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);
        }
Пример #9
0
        public void ProcessingServer_UpdatePipeline()
        {
            var factory = new EventBusFactory();
            var server  = new ProcessingServer(factory);


            var config = new PipelineConfiguration
            {
                Id           = "test",
                InputHandler = new HandlerNode
                {
                    Type = typeof(LogInputHandler)
                },
                OutputHandlers = new List <HandlerNode>
                {
                    new HandlerNode
                    {
                        Type = typeof(ConsoleOutputHandler)
                    }
                }
            };


            server.SetupPipeline("test", config);

            var first  = factory.GetEventBus("test");
            var second = factory.GetEventBus("test");

            Assert.AreSame(first, second);

            // update
            server.SetupPipeline("test", config);

            var third = factory.GetEventBus("test");

            Assert.AreNotSame(first, third);
        }