Exemple #1
0
            public void should_receive()
            {
                string producerConfig = string.Format(
                    @"<endpoints>
                            <endpoint name=""producer"" connectionString=""{0}{1}"">
                                <outgoing>
                                    <route key=""a"" label=""msg.a"" />
                                </outgoing>
                            </endpoint>
                        </endpoints>",
                    this.AmqpConnection,
                    this.VhostName);

                string consumerConfig = string.Format(
                    @"<endpoints>
                            <endpoint name=""consumer"" connectionString=""{0}{1}"">
                                <incoming>
                                    <on key=""a"" label=""msg.a"" react=""BooTransformer"" type=""BooMessage"" />
                                </incoming>
                            </endpoint>
                        </endpoints>",
                    this.AmqpConnection,
                    this.VhostName);

                var handler = new ConcreteTransformerOf <BooMessage>();

                IKernel kernel = new StandardKernel();

                kernel.Bind <IMessageOperator>().ToConstant(handler);

                kernel.Bind <IConsumerOf <BooMessage> >().To <OperatorConsumerOf <BooMessage> >()
                .InTransientScope()
                .Named("BooTransformer");


                DependencyResolverFunc dependencyResolver = (name, type) => kernel.Get(type, name);

                this.StartBus(
                    "consumer",
                    cfg =>
                {
                    var section = new XmlEndpointsSection(consumerConfig);
                    new AppConfigConfigurator(section, dependencyResolver).Configure("consumer", cfg);
                });

                IBus producer = this.StartBus(
                    "producer",
                    cfg =>
                {
                    var section = new XmlEndpointsSection(producerConfig);
                    new AppConfigConfigurator(section, dependencyResolver).Configure("producer", cfg);
                });

                producer.Emit("msg.a", new { Num = 13 });

                handler.Received.WaitOne(5.Seconds())
                .Should()
                .BeTrue();
            }
Exemple #2
0
            public void should_validate()
            {
                const string producerConfig =
                    @"<endpoints>
                            <endpoint name=""producer"" connectionString=""amqp://localhost/integration"">
                                <outgoing>
                                    <route key=""a"" label=""msg.a"" />
                                </outgoing>
                            </endpoint>
                        </endpoints>";

                const string consumerConfig =
                    @"<endpoints>
                            <endpoint name=""consumer"" connectionString=""amqp://localhost/integration"">
                                <incoming>
                                    <on key=""a"" label=""msg.a"" react=""BooHandler"" type=""BooMessage"" validate=""BooValidator"" />
                                </incoming>
                            </endpoint>
                        </endpoints>";

                var handler = new ConcreteHandlerOf <BooMessage>();

                IKernel kernel = new StandardKernel();

                kernel.Bind <IConsumerOf <BooMessage> >()
                .ToConstant(handler)
                .InSingletonScope()
                .Named("BooHandler");
                kernel.Bind <IMessageValidatorOf <BooMessage> >()
                .To <BooPayloadValidator>()
                .InSingletonScope()
                .Named("BooValidator");

                DependencyResolverFunc dependencyResolver = (name, type) => kernel.Get(type, name);

                this.StartBus(
                    "consumer",
                    cfg =>
                {
                    var section = new XmlEndpointsSection(consumerConfig);
                    new AppConfigConfigurator(section, dependencyResolver).Configure("consumer", cfg);
                });

                IBus producer = this.StartBus(
                    "producer",
                    cfg =>
                {
                    var section = new XmlEndpointsSection(producerConfig);
                    new AppConfigConfigurator(section, dependencyResolver).Configure("producer", cfg);
                });

                producer.Emit("msg.a", new { Num = 13 });

                handler.Received.WaitOne(3.Seconds())
                .Should()
                .BeFalse();
            }
Exemple #3
0
            public void should_receive()
            {
                const string producerConfig = @"<endpoints>
                            <endpoint name=""producer"" connectionString=""amqp://localhost/integration"">
                                <outgoing>
                                    <route key=""a"" label=""msg.a"" />
                                </outgoing>
                            </endpoint>
                        </endpoints>";

                const string consumerConfig =
                    @"<endpoints>
                            <endpoint name=""consumer"" connectionString=""amqp://localhost/integration"">
                                <incoming>
                                    <on key=""a"" label=""msg.a"" react=""DynamicHandler"" />
                                </incoming>
                            </endpoint>
                        </endpoints>";

                var handler = new ConcreteHandlerOf <ExpandoObject>();

                IKernel kernel = new StandardKernel();

                kernel.Bind <IConsumerOf <ExpandoObject> >().
                ToConstant(handler).
                Named("DynamicHandler");

                DependencyResolverFunc dependencyResolver = (name, type) => kernel.Get(type, name);

                this.StartBus(
                    "consumer",
                    cfg =>
                {
                    var section = new XmlEndpointsSection(consumerConfig);
                    new AppConfigConfigurator(section, dependencyResolver).Configure("consumer", cfg);
                });

                IBus producer = this.StartBus(
                    "producer",
                    cfg =>
                {
                    var section = new XmlEndpointsSection(producerConfig);
                    new AppConfigConfigurator(section, dependencyResolver).Configure("producer", cfg);
                });

                producer.Emit("msg.a", new { This = "That" });

                handler.Received.WaitOne(5.Seconds()).
                Should().
                BeTrue();
            }
Exemple #4
0
            public void should_handle_state_changes()
            {
                string producerConfig = string.Format(
                    @"<endpoints>
                        <endpoint name=""producer"" connectionString=""{0}{1}"" lifecycleHandler=""ProducerHandler"">
                            <outgoing>
                                <route key=""a"" label=""msg.a"" />
                            </outgoing>
                        </endpoint>
                    </endpoints>",
                    this.AmqpConnection,
                    this.VhostName);

                var handler = new Mock <IBusLifecycleHandler>();

                IKernel kernel = new StandardKernel();

                kernel.Bind <IBusLifecycleHandler>().
                ToConstant(handler.Object).
                Named("ProducerHandler");

                DependencyResolverFunc dependencyResolver = (name, type) => kernel.Get(type, name);

                IBus producer = this.StartBus(
                    "producer",
                    cfg =>
                {
                    var section = new XmlEndpointsSection(producerConfig);
                    new AppConfigConfigurator(section, dependencyResolver).Configure("producer", cfg);
                });

                handler.Verify(h => h.OnStarting(It.IsAny <IBus>(), It.IsAny <EventArgs>()), Times.Once);
                handler.Verify(h => h.OnStarted(It.IsAny <IBus>(), It.IsAny <EventArgs>()), Times.Once);
                handler.Verify(h => h.OnStopping(It.IsAny <IBus>(), It.IsAny <EventArgs>()), Times.Never);
                handler.Verify(h => h.OnStopped(It.IsAny <IBus>(), It.IsAny <EventArgs>()), Times.Never);

                producer.Stop();

                handler.Verify(h => h.OnStopping(It.IsAny <IBus>(), It.IsAny <EventArgs>()), Times.Once);
                handler.Verify(h => h.OnStopped(It.IsAny <IBus>(), It.IsAny <EventArgs>()), Times.Once);
            }
Exemple #5
0
        /// <summary>
        /// The main.
        /// </summary>
        /// <param name="args">
        /// The args.
        /// </param>
        private static void Main(string[] args)
        {
            LogManager.Adapter = new ConsoleOutLoggerFactoryAdapter();

            // super bad resolver
            DependencyResolverFunc dependencyResolver = (name, type) => new SomeHandler();

            var configurator = new AppConfigConfigurator(dependencyResolver);
            var busFactory   = new BusFactory();

            IBus consumer = busFactory.Create(cfg => configurator.Configure("Consumer", cfg));
            IBus producer = busFactory.Create(cfg => configurator.Configure("Producer", cfg));

            using (new Timer(_ => producer.Emit(":msg", new { }), null, 0, 1000))
            {
                Console.ReadKey(false);
            }

            producer.Dispose();
            consumer.Dispose();
        }
 /// <summary>
 /// Инициализирует новый экземпляр класса <see cref="AppConfigConfigurator"/>.
 /// </summary>
 /// <param name="endpointsConfig">
 /// The endpoints config.
 /// </param>
 /// <param name="dependencyResolverFunc">
 /// The dependency resolver func.
 /// </param>
 internal AppConfigConfigurator(EndpointsSection endpointsConfig, DependencyResolverFunc dependencyResolverFunc)
     : this(endpointsConfig, new LambdaDependencyResolver(dependencyResolverFunc))
 {
 }
 /// <summary>
 /// Инициализирует новый экземпляр класса <see cref="AppConfigConfigurator"/>.
 /// </summary>
 /// <param name="dependencyResolverFunc">
 /// The dependency resolver func.
 /// </param>
 public AppConfigConfigurator(DependencyResolverFunc dependencyResolverFunc)
     : this((EndpointsSection)ConfigurationManager.GetSection(ServiceBusSectionName), new LambdaDependencyResolver(dependencyResolverFunc))
 {
 }
Exemple #8
0
            public void should_build_consumer_once()
            {
                const string producerConfig =
                    @"<endpoints>
                            <endpoint name=""producer"" connectionString=""amqp://localhost/integration"">
                                <outgoing>
                                    <route key=""a"" label=""msg.a"" />
                                    <route key=""b"" label=""msg.b"" />
                                </outgoing>
                            </endpoint>
                        </endpoints>";

                const string consumerConfig =
                    @"<endpoints>
                            <endpoint name=""consumer"" connectionString=""amqp://localhost/integration"">
                                <incoming>
                                    <on key=""a"" label=""msg.a"" react=""BooHandler"" type=""BooMessage"" lifestyle=""Lazy"" />
                                    <on key=""b"" label=""msg.b"" react=""BooTransformer"" type=""BooMessage"" lifestyle=""Lazy"" />
                                </incoming>
                            </endpoint>
                        </endpoints>";

                BusDependentHandler.Reset();
                BusDependentTransformer.Reset();

                IKernel kernel = new StandardKernel();

                kernel.Bind <IConsumerOf <BooMessage> >().
                To <BusDependentHandler>().
                InTransientScope().
                Named("BooHandler");
                kernel.Bind <IMessageOperator>().To <BusDependentTransformer>();

                kernel.Bind <IConsumerOf <BooMessage> >().To <OperatorConsumerOf <BooMessage> >()
                .InTransientScope()
                .Named("BooTransformer");

                DependencyResolverFunc dependencyResolver = (name, type) => kernel.Get(type, name);

                IBus consumer = this.StartBus(
                    "consumer",
                    cfg =>
                {
                    var section = new XmlEndpointsSection(consumerConfig);
                    new AppConfigConfigurator(section, dependencyResolver).Configure("consumer", cfg);
                });

                IBus producer = this.StartBus(
                    "producer",
                    cfg =>
                {
                    var section = new XmlEndpointsSection(producerConfig);
                    new AppConfigConfigurator(section, dependencyResolver).Configure("producer", cfg);
                });

                kernel.Bind <IBus>().
                ToConstant(consumer);

                producer.Emit("msg.a", new { Num = 13 });
                producer.Emit("msg.a", new { Num = 13 });
                producer.Emit("msg.a", new { Num = 13 });

                BusDependentHandler.WaitEvent.Wait(5.Seconds()).
                Should().
                BeTrue();
                BusDependentHandler.BuildCount.Should().
                Be(1);

                producer.Emit("msg.b", new { Num = 13 });
                producer.Emit("msg.b", new { Num = 13 });
                producer.Emit("msg.b", new { Num = 13 });

                BusDependentTransformer.WaitEvent.Wait(5.Seconds()).
                Should().
                BeTrue();
                BusDependentTransformer.BuildCount.Should().
                Be(1);
            }
Exemple #9
0
 public static PlatformBusBuilder Create(DependencyResolverFunc func)
 {
     return(Create(new LambdaDependencyResolver(func)));
 }
Exemple #10
0
 /// <summary>
 /// Инициализирует новый экземпляр класса <see cref="LambdaDependencyResolver"/>.
 /// </summary>
 /// <param name="resolver">
 /// The resolver.
 /// </param>
 public LambdaDependencyResolver(DependencyResolverFunc resolver)
 {
     this._resolver = resolver;
 }
 /// <summary>
 /// Инициализирует новый экземпляр класса <see cref="AppConfigConfigurator"/>.
 /// </summary>
 /// <param name="endpointsConfig">
 /// The endpoints config.
 /// </param>
 /// <param name="dependencyResolverFunc">
 /// The dependency resolver func.
 /// </param>
 internal AppConfigConfigurator(EndpointsSection endpointsConfig, DependencyResolverFunc dependencyResolverFunc)
     : this(endpointsConfig, new LambdaDependencyResolver(dependencyResolverFunc))
 {
 }
 /// <summary>
 /// Инициализирует новый экземпляр класса <see cref="AppConfigConfigurator"/>.
 /// </summary>
 /// <param name="dependencyResolverFunc">
 /// The dependency resolver func.
 /// </param>
 public AppConfigConfigurator(DependencyResolverFunc dependencyResolverFunc)
     : this((EndpointsSection)ConfigurationManager.GetSection(ServiceBusSectionName), new LambdaDependencyResolver(dependencyResolverFunc))
 {
 }
 /// <summary>
 /// »нициализирует новый экземпл¤р класса <see cref="LambdaDependencyResolver"/>.
 /// </summary>
 /// <param name="resolver">
 /// The resolver.
 /// </param>
 public LambdaDependencyResolver(DependencyResolverFunc resolver)
 {
     this._resolver = resolver;
 }
Exemple #14
0
            public void should_validate()
            {
                string producerConfig = string.Format(
                    @"<endpoints>
                            <endpoint name=""producer"" connectionString=""{0}{1}"">
                                <outgoing>
                                    <route key=""a"" label=""msg.a"" />
                                </outgoing>
                            </endpoint>
                        </endpoints>",
                    this.AmqpConnection,
                    this.VhostName);

                string consumerConfig = string.Format(
                    @"<endpoints>
                            <endpoint name=""consumer"" connectionString=""{0}{1}"">
                                <validators>
                                    <add name=""ValidatorGroup"" group=""true"" />
                                </validators>
                                <incoming>
                                    <on key=""a"" label=""msg.a"" react=""BooHandler"" type=""BooMessage"" />
                                </incoming>
                            </endpoint>
                        </endpoints>",
                    this.AmqpConnection,
                    this.VhostName);

                var handler = new ConcreteHandlerOf <BooMessage>();

                IKernel kernel = new StandardKernel();

                kernel.Bind <IConsumerOf <BooMessage> >()
                .ToConstant(handler)
                .InSingletonScope()
                .Named("BooHandler");
                kernel.Bind <IMessageValidator>()
                .To <BooPayloadValidator>()
                .InSingletonScope();
                kernel.Bind <IMessageValidator>()
                .To <FooPayloadValidator>()
                .InSingletonScope();

                kernel.Bind <MessageValidatorGroup>()
                .ToSelf()
                .InSingletonScope()
                .Named("ValidatorGroup")
                .WithConstructorArgument("validators", ctx => ctx.Kernel.GetAll <IMessageValidator>());

                DependencyResolverFunc dependencyResolver = (name, type) => kernel.Get(type, name);

                this.StartBus(
                    "consumer",
                    cfg =>
                {
                    var section = new XmlEndpointsSection(consumerConfig);
                    new AppConfigConfigurator(section, dependencyResolver).Configure("consumer", cfg);
                });

                IBus producer = this.StartBus(
                    "producer",
                    cfg =>
                {
                    var section = new XmlEndpointsSection(producerConfig);
                    new AppConfigConfigurator(section, dependencyResolver).Configure("producer", cfg);
                });

                producer.Emit("msg.a", new { Num = 13 });

                handler.Received.WaitOne(3.Seconds()).
                Should().
                BeFalse();
            }