private Task<Bus> BuildMeABus()
        {
            return Task.Run(() =>
                            {
                                // Filter types we care about to only our own test's namespace. It's a performance optimisation because creating and
                                // deleting queues and topics is slow.
                                var typeProvider = new TestHarnessTypeProvider(new[] {GetType().Assembly}, new[] {GetType().Namespace});
                                var messageBroker = new DefaultMessageHandlerFactory(typeProvider);

                                var logger = new ConsoleLogger();

                                var bus = new BusBuilder().Configure()
                                                          .WithNames("IntegrationTestHarness", Environment.MachineName)
                                                          .WithConnectionString(CommonResources.ConnectionString)
                                                          .WithTypesFrom(typeProvider)
                                                          .WithCommandHandlerFactory(messageBroker)
                                                          .WithRequestHandlerFactory(messageBroker)
                                                          .WithMulticastEventHandlerFactory(messageBroker)
                                                          .WithCompetingEventHandlerFactory(messageBroker)
                                                          .WithMulticastRequestHandlerFactory(messageBroker)
                                                          .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                                                          .WithLogger(logger)
                                                          .Build();
                                bus.ShouldNotBe(null);
                                bus.Start();
                                return bus;
                            });
        }
示例#2
0
            public IBus Create()
            {
                var messageBroker = new DefaultMessageHandlerFactory(_typeProvider);

                var bus = TestHarnessBusFactory.CreateAndStart(_typeProvider, messageBroker);
                return bus;
            }
        private void ClearMeABus()
        {
            // Filter types we care about to only our own test's namespace. It's a performance optimisation because creating and
            // deleting queues and topics is slow.
            var typeProvider = new TestHarnessTypeProvider(new[] {GetType().Assembly}, new[] {"Some.Namespace.That.Does.Not.Exist"});
            var messageBroker = new DefaultMessageHandlerFactory(typeProvider);

            var logger = new ConsoleLogger();

            var busBuilder = new BusBuilder().Configure()
                                             .WithNames("IntegrationTestHarness", Environment.MachineName)
                                             .WithConnectionString(CommonResources.ConnectionString)
                                             .WithTypesFrom(typeProvider)
                                             .WithCommandHandlerFactory(messageBroker)
                                             .WithRequestHandlerFactory(messageBroker)
                                             .WithMulticastEventHandlerFactory(messageBroker)
                                             .WithCompetingEventHandlerFactory(messageBroker)
                                             .WithMulticastRequestHandlerFactory(messageBroker)
                                             .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                                             .WithLogger(logger)
                                             .WithDebugOptions(
                                                 dc =>
                                                     dc.RemoveAllExistingNamespaceElementsOnStartup(
                                                         "I understand this will delete EVERYTHING in my namespace. I promise to only use this for test suites."))
                ;

            using (var bus = busBuilder.Build())
            {
                bus.Start();
            }
        }
        public override ITunnel Create(string hostName, string virtualHost, string username, string password, IRabbitWatcher watcher)
        {
            if (RabbitTunnel.Factory is DependencyInjectionTunnelFactory)
            {
                return RabbitTunnel.Factory.Create(hostName, virtualHost, username, password, watcher);
            }

            var rabbitWatcher = watcher ?? Global.DefaultWatcher;
            var connectionFactory = new RabbitMQ.Client.ConnectionFactory
                                        {
                                            HostName = hostName,
                                            VirtualHost = virtualHost,
                                            UserName = username,
                                            Password = password
                                        };

            var durableConnection = new DurableConnection(new DefaultRetryPolicy(), rabbitWatcher, connectionFactory);
            var errorHandler = new ConsumerErrorHandler(connectionFactory, Global.DefaultSerializer, rabbitWatcher);
            
            var msgHandlerFactory = new DefaultMessageHandlerFactory(errorHandler, rabbitWatcher);
            var consumerManager = new ConsumerManager(rabbitWatcher, msgHandlerFactory, Global.DefaultSerializer);

            return new RabbitTunnelWithPriorityQueuesSupport(consumerManager,
                                                             rabbitWatcher, 
                                                             new DefaultRouteFinder(), 
                                                             durableConnection,
                                                             Global.DefaultSerializer,
                                                             Global.DefaultCorrelationIdGenerator,
                                                             Global.DefaultPersistentMode);
        }
示例#5
0
        public override ITunnel Create(string hostName, string virtualHost, string username, string password, IRabbitWatcher watcher)
        {
            if (RabbitTunnel.Factory is DependencyInjectionTunnelFactory)
            {
                return(RabbitTunnel.Factory.Create(hostName, virtualHost, username, password, watcher));
            }

            var rabbitWatcher     = watcher ?? Global.DefaultWatcher;
            var connectionFactory = new RabbitMQ.Client.ConnectionFactory
            {
                HostName    = hostName,
                VirtualHost = virtualHost,
                UserName    = username,
                Password    = password
            };

            var durableConnection = new DurableConnection(new DefaultRetryPolicy(), rabbitWatcher, connectionFactory);
            var errorHandler      = new ConsumerErrorHandler(connectionFactory, Global.DefaultSerializer, rabbitWatcher);

            var msgHandlerFactory = new DefaultMessageHandlerFactory(errorHandler, Global.DefaultSerializer, rabbitWatcher);
            var consumerManager   = new ConsumerManager(rabbitWatcher, msgHandlerFactory, Global.DefaultSerializer);

            var tunnel = new RabbitTunnelWithPriorityQueuesSupport(consumerManager,
                                                                   rabbitWatcher,
                                                                   new DefaultRouteFinder(),
                                                                   durableConnection,
                                                                   Global.DefaultSerializer,
                                                                   Global.DefaultCorrelationIdGenerator,
                                                                   Global.DefaultPersistentMode);

            tunnel.AddSerializerObserver(errorHandler);
            tunnel.AddSerializerObserver(msgHandlerFactory);
            tunnel.AddSerializerObserver(consumerManager);
            return(tunnel);
        }
 public static BusBuilderConfiguration WithDefaultHandlerFactory(this BusBuilderConfiguration configuration, DefaultMessageHandlerFactory messageHandlerFactory)
 {
     configuration
         .WithCommandHandlerFactory(messageHandlerFactory)
         .WithRequestHandlerFactory(messageHandlerFactory)
         .WithMulticastRequestHandlerFactory(messageHandlerFactory)
         .WithCompetingEventHandlerFactory(messageHandlerFactory)
         .WithMulticastEventHandlerFactory(messageHandlerFactory);
     return configuration;
 }
        public override ITunnel Create(string hostName, string virtualHost, string username, string password, IRabbitWatcher watcher)
        {
            var rabbitWatcher     = watcher ?? _burrowResolver.Resolve <IRabbitWatcher>() ?? Global.DefaultWatcher;
            var serializer        = _burrowResolver.Resolve <ISerializer>() ?? Global.DefaultSerializer;
            var connectionFactory = new RabbitMQ.Client.ConnectionFactory
            {
                HostName    = hostName,
                VirtualHost = virtualHost,
                UserName    = username,
                Password    = password
            };
            var durableConnection = new DurableConnection(_burrowResolver.Resolve <IRetryPolicy>() ?? new DefaultRetryPolicy(),
                                                          rabbitWatcher,
                                                          connectionFactory);

            var abc = new ObjectObserver <IObserver <ISerializer> >();

            Func <IConsumerErrorHandler> errorHandler = () =>
            {
                var handdler = new ConsumerErrorHandler(connectionFactory, serializer, rabbitWatcher);
                abc.FireEvent(handdler);
                return(handdler);
            };

            Func <IMessageHandlerFactory> handlerFactory = () =>
            {
                var factory = new DefaultMessageHandlerFactory(_burrowResolver.Resolve <IConsumerErrorHandler>() ?? errorHandler(),
                                                               serializer,
                                                               rabbitWatcher);
                abc.FireEvent(factory);
                return(factory);
            };


            Func <IConsumerManager> consumerManager = () =>
            {
                var manager = new ConsumerManager(rabbitWatcher,
                                                  _burrowResolver.Resolve <IMessageHandlerFactory>() ?? handlerFactory(),
                                                  serializer);
                abc.FireEvent(manager);
                return(manager);
            };

            var tunnel = new RabbitTunnel(_burrowResolver.Resolve <IConsumerManager>() ?? consumerManager(),
                                          rabbitWatcher,
                                          _burrowResolver.Resolve <IRouteFinder>() ?? new DefaultRouteFinder(),
                                          durableConnection,
                                          serializer,
                                          _burrowResolver.Resolve <ICorrelationIdGenerator>() ?? Global.DefaultCorrelationIdGenerator,
                                          Global.DefaultPersistentMode);

            abc.ObjectCreated += tunnel.AddSerializerObserver;

            return(tunnel);
        }
        public void DoFoo()
        {
            var typeProvider = new AssemblyScanningTypeProvider(Assembly.GetExecutingAssembly());
            IMulticastEventHandlerFactory multicastEventHandlerFactory = new DefaultMessageHandlerFactory(typeProvider);

            var bus = new BusBuilder().Configure()
                                      .WithConnectionString("foo")
                                      .WithNames("MyApp", Environment.MachineName)
                                      .WithTypesFrom(typeProvider)
                                      .WithMulticastEventHandlerFactory(multicastEventHandlerFactory)
                                      .Build();
        }
示例#9
0
        public static Bus CreateAndStart(ITypeProvider typeProvider, DefaultMessageHandlerFactory messageHandlerFactory)
        {
            var logger = new ConsoleLogger();

            var bus = new BusBuilder().Configure()
                                      .WithNames("MyTestSuite", Environment.MachineName)
                                      .WithConnectionString(CommonResources.ConnectionString)
                                      .WithTypesFrom(typeProvider)
                                      .WithDefaultHandlerFactory(messageHandlerFactory)
                                      .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                                      .WithLogger(logger)
                                      .WithDebugOptions(
                                          dc =>
                                              dc.RemoveAllExistingNamespaceElementsOnStartup(
                                                  "I understand this will delete EVERYTHING in my namespace. I promise to only use this for test suites."))
                                      .Build();
            bus.Start();
            return bus;
        }
示例#10
0
        private ITunnel Create(DurableConnection durableConnection, ISerializer serializer, IRabbitWatcher rabbitWatcher)
        {
            var abc = new ObjectObserver <IObserver <ISerializer> >();

            Func <IConsumerErrorHandler> errorHandler = () =>
            {
                var handdler = new ConsumerErrorHandler(durableConnection, serializer, rabbitWatcher);
                abc.FireEvent(handdler);
                return(handdler);
            };

            Func <IMessageHandlerFactory> handlerFactory = () =>
            {
                var factory = new DefaultMessageHandlerFactory(_burrowResolver.Resolve <IConsumerErrorHandler>() ?? errorHandler(),
                                                               serializer,
                                                               rabbitWatcher);
                abc.FireEvent(factory);
                return(factory);
            };

            Func <IConsumerManager> consumerManager = () =>
            {
                var manager = new ConsumerManager(rabbitWatcher,
                                                  _burrowResolver.Resolve <IMessageHandlerFactory>() ?? handlerFactory(),
                                                  serializer);
                abc.FireEvent(manager);
                return(manager);
            };

            var tunnel = new RabbitTunnel(_burrowResolver.Resolve <IConsumerManager>() ?? consumerManager(),
                                          rabbitWatcher,
                                          _burrowResolver.Resolve <IRouteFinder>() ?? new DefaultRouteFinder(),
                                          durableConnection,
                                          serializer,
                                          _burrowResolver.Resolve <ICorrelationIdGenerator>() ?? Global.DefaultCorrelationIdGenerator,
                                          Global.DefaultPersistentMode);

            abc.ObjectCreated += tunnel.AddSerializerObserver;

            return(tunnel);
        }
        public async Task ItShouldGoBangQuickly()
        {
            var typeProvider = new TestHarnessTypeProvider(new[] {GetType().Assembly}, new[] {GetType().Namespace});
            var messageBroker = new DefaultMessageHandlerFactory(typeProvider);

            var logger = new ConsoleLogger();

            var bus = new BusBuilder().Configure()
                                      .WithNames("IntegrationTestHarness", Environment.MachineName)
                                      .WithConnectionString(@"Endpoint=sb://shouldnotexist.example.com/;SharedAccessKeyName=IntegrationTestHarness;SharedAccessKey=borkborkbork=")
                                      .WithTypesFrom(typeProvider)
                                      .WithCommandHandlerFactory(messageBroker)
                                      .WithRequestHandlerFactory(messageBroker)
                                      .WithMulticastEventHandlerFactory(messageBroker)
                                      .WithCompetingEventHandlerFactory(messageBroker)
                                      .WithMulticastRequestHandlerFactory(messageBroker)
                                      .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                                      .WithLogger(logger)
                                      .Build();

            Should.Throw<BusException>(bus.Start);
        }
示例#12
0
文件: Program.cs 项目: shingi/Nimbus
        private static void Main(string[] args)
        {
            // This is how you tell Nimbus where to find all your message types and handlers.
            var typeProvider = new AssemblyScanningTypeProvider(Assembly.GetExecutingAssembly(), typeof (NewOrderRecieved).Assembly, typeof (OrderPizzaCommand).Assembly);

            var messageBroker = new DefaultMessageHandlerFactory(typeProvider);

            var connectionString = ConfigurationManager.AppSettings["AzureConnectionString"];

            var bus = new BusBuilder().Configure()
                                      .WithNames("Ordering", Environment.MachineName)
                                      .WithConnectionString(connectionString)
                                      .WithTypesFrom(typeProvider)
                                      .WithDefaultHandlerFactory(messageBroker)
                                      .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                                      .Build();
            bus.Start();

            while (true)
            {
                Console.WriteLine();
                Console.WriteLine("Press 1 to get the current wait time.");
                Console.WriteLine("Press 2 to order a pizza.");
                Console.WriteLine("Press 3 to Quit.");
                var input = Console.ReadLine();

                switch (input)
                {
                    case "1":

                        HowLongDoesAPizzaTake(bus);

                        break;

                    case "2":

                        Console.WriteLine("What's the customer's name?");
                        var customerName = Console.ReadLine().Trim();

                        if (string.IsNullOrWhiteSpace(customerName))
                        {
                            Console.WriteLine("You need to enter a customer name.");
                            continue;
                        }

                        var command = new OrderPizzaCommand {CustomerName = customerName};

                        bus.Send(command);

                        Console.WriteLine("Pizza ordered for {0}", customerName);

                        break;

                    case "3":
                        bus.Stop();
                        return;

                    default:
                        continue;
                }
            }
        }