Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        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));
                }
        }
Ejemplo n.º 4
0
        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));
                }
        }
Ejemplo n.º 5
0
        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));
        }