public void EventBusFactory_RegisterEventBus_UnequalPipelineId() { var bus = new EventBus(() => null, "one"); var factory = new EventBusFactory(); Assert.Throws <Exception>(() => factory.Register("two", bus)); }
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); }
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); }
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" }); }
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); }
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); }
/// <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); }
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); }