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(); }
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(); }
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(); }
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); }
/// <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)) { }
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); }
public static PlatformBusBuilder Create(DependencyResolverFunc func) { return(Create(new LambdaDependencyResolver(func))); }
/// <summary> /// Инициализирует новый экземпляр класса <see cref="LambdaDependencyResolver"/>. /// </summary> /// <param name="resolver"> /// The resolver. /// </param> public LambdaDependencyResolver(DependencyResolverFunc resolver) { this._resolver = resolver; }
/// <summary> /// »нициализирует новый экземпл¤р класса <see cref="LambdaDependencyResolver"/>. /// </summary> /// <param name="resolver"> /// The resolver. /// </param> public LambdaDependencyResolver(DependencyResolverFunc resolver) { this._resolver = resolver; }
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(); }