private void ConfigureIoC() { Container = new WindsorContainer(); var documentStore = new EmbeddableDocumentStore { DataDirectory = "../data" }; documentStore.Initialize(); var connectionLookup = new ConnectionLookup(); var taskNotifier = new TaskNotifier(connectionLookup); var queueFactory = new DefaultQueueFactory(taskNotifier, documentStore); var userAccountService = new DummyUserAccountService(); var taskDistributor = new TaskDistributor(queueFactory, userAccountService); sessionTimeoutEventSink = taskDistributor; Container.Register(Component.For <IDocumentStore>().Instance(documentStore).LifestyleSingleton()); Container.Register(Component.For <INotifyUsersOfTasks>().Instance(taskNotifier).LifestyleSingleton()); Container.Register(Component.For <TaskDistributor, IReactToUserLoggedIn, IReactToUserLoggedOff>().Instance(taskDistributor).LifestyleSingleton()); Container.Register(Component.For <IControllerFactory>() .Instance(new MyControllerFactory(Container)) .LifeStyle.Is(Castle.Core.LifestyleType.Singleton)); Container.Register(AllTypes.FromThisAssembly().BasedOn <IController>().LifestyleTransient()); GlobalHost.DependencyResolver.Register(typeof(TaskDistributor), () => taskDistributor); GlobalHost.DependencyResolver.Register(typeof(ConnectionLookup), () => connectionLookup); GlobalHost.DependencyResolver.Register(typeof(IBus), () => Bus); GlobalHost.DependencyResolver.Register(typeof(UserTaskEndpoint), () => new UserTaskEndpoint(taskDistributor, connectionLookup, Bus)); }
/// <summary> /// Default library entry point /// </summary> /// <param name="connectionFactory"></param> /// <param name="consumerContainer"></param> /// <param name="exchangeResolver"></param> /// <param name="serializer"></param> /// <param name="idGenerator"></param> /// <param name="sequenceGenerator"></param> /// <param name="options"> </param> public RogerBus(IConnectionFactory connectionFactory, IConsumerContainer consumerContainer = null, IExchangeResolver exchangeResolver = null, IMessageSerializer serializer = null, IIdGenerator idGenerator = null, ISequenceGenerator sequenceGenerator = null, RogerOptions options = null) { aggregator = new Aggregator(); reconnectionTimer = new SystemThreadingTimer(); connection = new ReliableConnection(connectionFactory, reconnectionTimer, aggregator); consumerContainer = consumerContainer.Or(new EmptyConsumerContainer()); exchangeResolver = exchangeResolver.Or(new AttributeExchangeResolver()); serializer = serializer.Or(new ProtoBufNetSerializer()); idGenerator = idGenerator.Or(new RandomIdGenerator()); sequenceGenerator = sequenceGenerator.Or(new ByMessageHirarchyRootSequenceGenerator()); options = options.Or(new RogerOptions()); publishModules.Add(new BasicReturnModule()); if (options.UsePublisherConfirms) { publishModules.AddFirst(new PublisherConfirmsModule(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10))); } var queueFactory = new DefaultQueueFactory(true, false, false, options.QueueUnusedTimeout, options.MessageTimeToLiveOnQueue, options.QueueName); Filters.Add(new ResequencingDeduplicationFilter()); consumer = new DefaultConsumingProcess(idGenerator, exchangeResolver, serializer, new DefaultMessageTypeResolver(), consumerContainer, Filters, queueFactory, new AlwaysSuccessConsumerInvoker(), options, aggregator); publisher = new QueueingPublishingProcess(idGenerator, sequenceGenerator, exchangeResolver, serializer, new DefaultMessageTypeResolver(), publishModules, aggregator); aggregator.Subscribe(this); }
public void Should_respect_message_ttl() { var factory = new DefaultQueueFactory(false, false, false, null, TimeSpan.FromSeconds(1), _ => ""); using (var connection = Helpers.CreateSafeShutdownConnection()) using (var model = connection.CreateModel()) { var queue = factory.Create(model); model.BasicPublish("", queue, null, BitConverter.GetBytes(1)); Thread.Sleep(1500); Assert.IsNull(model.BasicGet(queue, true)); } }
public void Should_respect_queue_lease() { var factory = new DefaultQueueFactory(false, false, false, TimeSpan.FromSeconds(2), null, _ => ""); using (var connection = Helpers.CreateSafeShutdownConnection()) using (var model = connection.CreateModel()) { var queue = factory.Create(model); Assert.AreEqual(queue, BrokerHttp.GetQueue(queue).name); Thread.Sleep(3000); Assert.Throws <WebException>(() => BrokerHttp.GetQueue(queue)); } }
private void ConfigureIoC() { Container = new WindsorContainer(); var documentStore = new EmbeddableDocumentStore { DataDirectory = "../data" }; documentStore.Initialize(); var connectionLookup = new ConnectionLookup(); var taskNotifier = new TaskNotifier(connectionLookup); var queueFactory = new DefaultQueueFactory(taskNotifier, documentStore); var userAccountService = new DummyUserAccountService(); var taskDistributor = new TaskDistributor(queueFactory, userAccountService); sessionTimeoutEventSink = taskDistributor; Container.Register(Component.For<IDocumentStore>().Instance(documentStore).LifestyleSingleton()); Container.Register(Component.For<INotifyUsersOfTasks>().Instance(taskNotifier).LifestyleSingleton()); Container.Register(Component.For<TaskDistributor, IReactToUserLoggedIn, IReactToUserLoggedOff>().Instance(taskDistributor).LifestyleSingleton()); Container.Register(Component.For<IControllerFactory>() .Instance(new MyControllerFactory(Container)) .LifeStyle.Is(Castle.Core.LifestyleType.Singleton)); Container.Register(AllTypes.FromThisAssembly().BasedOn<IController>().LifestyleTransient()); GlobalHost.DependencyResolver.Register(typeof(TaskDistributor), () => taskDistributor); GlobalHost.DependencyResolver.Register(typeof(ConnectionLookup), () => connectionLookup); GlobalHost.DependencyResolver.Register(typeof(IBus), () => Bus); GlobalHost.DependencyResolver.Register(typeof(UserTaskEndpoint), () => new UserTaskEndpoint(taskDistributor, connectionLookup, Bus)); }