protected override void ConfigureSubscriptions(SubscriptionBusServiceConfigurator configurator)
 {
     configurator.StateMachineSaga(_machine, _repository, x =>
     {
         x.RemoveWhenFinalized();
     });
 }
Beispiel #2
0
        protected override void ConfigureSubscriptions(SubscriptionBusServiceConfigurator configurator)
        {
            _machine    = new TestStateMachine();
            _repository = new InMemorySagaRepository <Instance>();

            configurator.StateMachineSaga(_machine, _repository);
        }
Beispiel #3
0
        public static void LoadFrom(this SubscriptionBusServiceConfigurator configurator, ILifetimeScope scope)
        {
            IList <Type> concreteTypes = FindTypes <IConsumer>(scope, r => !r.Implements <ISaga>());

            if (concreteTypes.Count != 0)
            {
                var consumerConfigurator = new AutofacConsumerFactoryConfigurator(configurator, scope);

                foreach (Type concreteType in concreteTypes)
                {
                    consumerConfigurator.ConfigureConsumer(concreteType);
                }
            }

            IList <Type> sagaTypes = FindTypes <ISaga>(scope, x => true);

            if (sagaTypes.Count > 0)
            {
                var sagaConfigurator = new AutofacSagaRepositoryFactoryConfigurator(configurator, scope);

                foreach (Type type in sagaTypes)
                {
                    sagaConfigurator.ConfigureSaga(type);
                }
            }
        }
        public static void LoadFrom([NotNull] this SubscriptionBusServiceConfigurator configurator, [NotNull] Container container)
        {
            if (configurator == null)
            {
                throw new ArgumentNullException("configurator");
            }
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }

            IList <Type> consumerTypes = FindTypes <IConsumer>(container, x => !x.Implements <ISaga>());

            if (consumerTypes.Count > 0)
            {
                var consumerFactoryConfigurator = new SimpleInjectorConsumerFactoryConfigurator(configurator, container);
                foreach (Type consumerType in consumerTypes)
                {
                    consumerFactoryConfigurator.ConfigureConsumer(consumerType);
                }
            }

            IList <Type> sagaTypes = FindTypes <ISaga>(container, x => true);

            if (sagaTypes.Count <= 0)
            {
                return;
            }
            var sagaFactoryConfigurator = new SimpleInjectorSagaFactoryConfigurator(configurator, container);

            foreach (Type sagaType in sagaTypes)
            {
                sagaFactoryConfigurator.ConfigureSaga(sagaType);
            }
        }
Beispiel #5
0
 public static InstanceSubscriptionConfigurator CompensateActivityHost <TActivity, TLog>(
     this SubscriptionBusServiceConfigurator configurator, Func <TActivity> controllerFactory)
     where TActivity : CompensateActivity <TLog>
     where TLog : class
 {
     return(CompensateActivityHost <TActivity, TLog>(configurator, _ => controllerFactory()));
 }
Beispiel #6
0
        public static void LoadFrom(this SubscriptionBusServiceConfigurator configurator, IUnityContainer container)
        {
            IList <Type> concreteTypes = FindTypes <IConsumer>(container, x => !x.Implements <ISaga>());

            if (concreteTypes.Count > 0)
            {
                var consumerConfigurator = new UnityConsumerFactoryConfigurator(configurator, container);

                foreach (Type concreteType in concreteTypes)
                {
                    consumerConfigurator.ConfigureConsumer(concreteType);
                }
            }

            IList <Type> sagaTypes = FindTypes <ISaga>(container, x => true);

            if (sagaTypes.Count > 0)
            {
                var sagaConfigurator = new UnitySagaFactoryConfigurator(configurator, container);

                foreach (Type type in sagaTypes)
                {
                    sagaConfigurator.ConfigureSaga(type);
                }
            }
        }
        /// <summary>
        /// Specify that the service bus should load its subscribers from the container passed as an argument.
        /// </summary>
        /// <param name="configurator">The configurator the extension method works on.</param>
        /// <param name="context">The Ninject kernel.</param>
        public static void LoadFrom(this SubscriptionBusServiceConfigurator configurator, IKernel context)
        {
            IList <Type> consumerTypes = FindTypes <IConsumer>(context, x => !x.Implements <ISaga>());

            if (consumerTypes.Count > 0)
            {
                var consumerConfigurator = new NinjectConsumerFactoryConfigurator(configurator, context);

                foreach (Type type in consumerTypes)
                {
                    consumerConfigurator.ConfigureConsumer(type);
                }
            }

            IList <Type> sagaTypes = FindTypes <ISaga>(context, x => true);

            if (sagaTypes.Count > 0)
            {
                var sagaConfigurator = new NinjectSagaFactoryConfigurator(configurator, context);

                foreach (Type type in sagaTypes)
                {
                    sagaConfigurator.ConfigureSaga(type);
                }
            }
        }
Beispiel #8
0
 /// <summary>
 /// 添加consumer
 /// 消费者停止消费消息后,将异常抛出,让消息回滚至原队列中
 /// 等待下次处理
 /// </summary>
 /// <typeparam name="TEvent">consumer的接收事件参数</typeparam>
 /// <typeparam name="TConsumer">consumer类型</typeparam>
 /// <param name="cfg">配置对象</param>
 /// <param name="handlerType">处理类型</param>
 protected void ConsumerTo <TEvent, TConsumer>(SubscriptionBusServiceConfigurator cfg, Type handlerType)
     where TConsumer : IEventConsumer <TEvent>
     where TEvent : Event
 {
     cfg.Handler <TEvent>(evnt =>
     {
         try
         {
             if (_beforeConsumer != null)
             {
                 _beforeConsumer.Execute(evnt);
             }
             _locator.GetInstance <TConsumer>().Consume(evnt);
             if (_afterConsumer != null)
             {
                 _afterConsumer.Execute(evnt);
             }
         }
         catch (StopedConsumeException)
         {
             throw;
         }
         catch (Exception ex)
         {
             Log.Write(string.Format("执行{0}错误", typeof(TConsumer)), MessageType.Error, this.GetType(), ex);
         }
     }).Permanent();
 }
Beispiel #9
0
 public static InstanceSubscriptionConfigurator CompensateActivityHost <TActivity, TLog>(
     this SubscriptionBusServiceConfigurator configurator)
     where TActivity : CompensateActivity <TLog>, new()
     where TLog : class
 {
     return(CompensateActivityHost <TActivity, TLog>(configurator,
                                                     DefaultConstructorCompensateActivityFactory <TActivity, TLog> .CompensateFactory));
 }
Beispiel #10
0
        public static ConsumerSubscriptionConfigurator <TConsumer> Consumer <TConsumer>(
            this SubscriptionBusServiceConfigurator configurator, IUnityContainer container)
            where TConsumer : class, IConsumer
        {
            var consumerFactory = new UnityConsumerFactory <TConsumer>(container);

            return(configurator.Consumer(consumerFactory));
        }
Beispiel #11
0
        public static ConsumerSubscriptionConfigurator <TConsumer> Consumer <TConsumer>(
            this SubscriptionBusServiceConfigurator configurator, ILifetimeScope scope)
            where TConsumer : class, IConsumer
        {
            var consumerFactory = new AutofacConsumerFactory <TConsumer>(scope);

            return(configurator.Consumer(consumerFactory));
        }
        public static ConsumerSubscriptionConfigurator <TConsumer> Consumer <TConsumer>(
            this SubscriptionBusServiceConfigurator configurator, IContainer kernel)
            where TConsumer : class
        {
            var consumerFactory = new StructureMapConsumerFactory <TConsumer>(kernel);

            return(configurator.Consumer(consumerFactory));
        }
        public static ConsumerSubscriptionConfigurator <TConsumer> Consumer <TConsumer>(
            this SubscriptionBusServiceConfigurator configurator, IKernel kernel)
            where TConsumer : class, IConsumer
        {
            var consumerFactory = new NinjectConsumerFactory <TConsumer>(kernel);

            return(configurator.Consumer(consumerFactory));
        }
Beispiel #14
0
        public static void LoadFrom(this SubscriptionBusServiceConfigurator configurator, IKernel kernel)
        {
            var ex = new NotImplementedByNinjectException("Ninject does not support this option. See https://github.com/ninject/ninject/issues/35");

            ex.HelpLink = "https://github.com/ninject/ninject/issues/35";

            throw ex;
        }
Beispiel #15
0
        /// <summary>
        /// Subscribe an observer to a message on the service bus
        /// </summary>
        /// <typeparam name="T">The message type</typeparam>
        /// <param name="configurator"></param>
        /// <param name="observer">The observer to subscribe</param>
        /// <returns>The subscription configurator</returns>
        public static InstanceSubscriptionConfigurator Observe <T>(this SubscriptionBusServiceConfigurator configurator,
                                                                   IObserver <T> observer)
            where T : class
        {
            var consumer = new ObserverInstanceConsumer <T>(observer);

            return(configurator.Instance(consumer));
        }
Beispiel #16
0
 public static InstanceSubscriptionConfigurator ExecuteActivityHost <TActivity, TArguments>(
     this SubscriptionBusServiceConfigurator configurator,
     Uri compensateAddress)
     where TActivity : ExecuteActivity <TArguments>, new()
     where TArguments : class
 {
     return(ExecuteActivityHost <TActivity, TArguments>(configurator, compensateAddress,
                                                        DefaultConstructorExecuteActivityFactory <TActivity, TArguments> .ExecuteFactory));
 }
Beispiel #17
0
 public static InstanceSubscriptionConfigurator ExecuteActivityHost <TActivity, TArguments>(
     this SubscriptionBusServiceConfigurator configurator,
     Uri compensateAddress, Func <TActivity> controllerFactory)
     where TActivity : ExecuteActivity <TArguments>
     where TArguments : class
 {
     return(ExecuteActivityHost <TActivity, TArguments>(configurator, compensateAddress,
                                                        _ => controllerFactory()));
 }
Beispiel #18
0
        public static InstanceSubscriptionConfigurator CompensateActivityHost <TActivity, TLog>(
            this SubscriptionBusServiceConfigurator configurator, CompensateActivityFactory <TLog> factory)
            where TActivity : CompensateActivity <TLog>
            where TLog : class
        {
            var host = new CompensateActivityHost <TActivity, TLog>(factory);

            return(configurator.Instance(host));
        }
        public static SagaSubscriptionConfigurator <TSaga> Saga <TSaga>(
            this SubscriptionBusServiceConfigurator configurator, IKernel kernel)
            where TSaga : class, ISaga
        {
            var sagaRepository = kernel.Get <ISagaRepository <TSaga> >();

            var ninjectSagaRepository = new NinjectSagaRepository <TSaga>(sagaRepository, kernel);

            return(configurator.Saga(ninjectSagaRepository));
        }
Beispiel #20
0
        public static SagaSubscriptionConfigurator <TSaga> Saga <TSaga>(
            this SubscriptionBusServiceConfigurator configurator, IContainer container)
            where TSaga : class, ISaga
        {
            var sagaRepository = container.GetInstance <ISagaRepository <TSaga> >();

            var structureMapSagaRepository = new StructureMapSagaRepository <TSaga>(sagaRepository, container);

            return(configurator.Saga(structureMapSagaRepository));
        }
Beispiel #21
0
        public static InstanceSubscriptionConfigurator ExecuteActivityHost <TActivity, TArguments>(
            this SubscriptionBusServiceConfigurator configurator,
            Uri compensateAddress, ExecuteActivityFactory <TArguments> factory)
            where TActivity : ExecuteActivity <TArguments>
            where TArguments : class
        {
            var host = new ExecuteActivityHost <TActivity, TArguments>(compensateAddress, factory);

            return(configurator.Instance(host));
        }
Beispiel #22
0
        public static InstanceSubscriptionConfigurator CompensateActivityHost <TActivity, TLog>(
            this SubscriptionBusServiceConfigurator configurator, Func <TLog, TActivity> controllerFactory)
            where TActivity : CompensateActivity <TLog>
            where TLog : class
        {
            var factory = new FactoryMethodCompensateActivityFactory <TActivity, TLog>(controllerFactory);
            var host    = new CompensateActivityHost <TActivity, TLog>(factory);

            return(configurator.Instance(host));
        }
        /// <summary>
        /// Registers a saga using the container that has the repository resolved from the container
        /// </summary>
        /// <typeparam name="TSaga"></typeparam>
        /// <param name="configurator"></param>
        /// <param name="scope"></param>
        /// <returns></returns>
        public static SagaSubscriptionConfigurator <TSaga> Saga <TSaga>(
            this SubscriptionBusServiceConfigurator configurator, ILifetimeScope scope, string name = "message")
            where TSaga : class, ISaga
        {
            var sagaRepository = scope.Resolve <ISagaRepository <TSaga> >();

            var autofacSagaRepository = new AutofacSagaRepository <TSaga>(sagaRepository, scope, name);

            return(configurator.Saga(autofacSagaRepository));
        }
Beispiel #24
0
        public static SagaSubscriptionConfigurator <TSaga> Saga <TSaga>(
            this SubscriptionBusServiceConfigurator configurator, IUnityContainer container)
            where TSaga : class, ISaga
        {
            var sagaRepository = container.Resolve <ISagaRepository <TSaga> >();

            var unitySagaRepository = new UnitySagaRepository <TSaga>(sagaRepository, container);

            return(configurator.Saga(unitySagaRepository));
        }
Beispiel #25
0
        protected override void ConfigureSubscriptions(SubscriptionBusServiceConfigurator configurator)
        {
            _machine    = new TestStateMachine();
            _repository = new InMemorySagaRepository <Instance>();

            configurator.StateMachineSaga(_machine, _repository, x =>
            {
                x.Correlate(_machine.Started, (i, d) => i.ServiceName == d.ServiceName)
                .SelectCorrelationId(msg => msg.ServiceId);
            });
        }
        public static IServiceBusConfigurator Subscribe(this IServiceBusConfigurator configurator,
                                                        Action <ISubscriptionBusServiceConfigurator> configure)
        {
            var subscriptionConfigurator = new SubscriptionBusServiceConfigurator();

            configure(subscriptionConfigurator);

            configurator.AddBusConfigurator(subscriptionConfigurator);

            return(configurator);
        }
        /// <summary>
        /// Subscribes an object instance to the bus
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="instance"></param>
        /// <returns></returns>
        public static InstanceSubscriptionConfigurator Instance(
            [NotNull] this SubscriptionBusServiceConfigurator configurator,
            [NotNull] object instance)
        {
            var instanceConfigurator = new InstanceSubscriptionConfiguratorImpl(instance);

            var busServiceConfigurator = new SubscriptionBusServiceBuilderConfiguratorImpl(instanceConfigurator);

            configurator.AddConfigurator(busServiceConfigurator);

            return(instanceConfigurator);
        }
        public static HandlerSubscriptionConfigurator <T> Handler <T>(this SubscriptionBusServiceConfigurator configurator,
                                                                      Action <IConsumeContext <T>, T> handler)
            where T : class
        {
            var handlerConfigurator = new HandlerSubscriptionConfiguratorImpl <T>(handler);

            var busServiceConfigurator = new SubscriptionBusServiceBuilderConfiguratorImpl(handlerConfigurator);

            configurator.AddConfigurator(busServiceConfigurator);

            return(handlerConfigurator);
        }
        public static ConsumerSubscriptionConfigurator <TConsumer> InterceptingConsumer <TConsumer>(
            [NotNull] this SubscriptionBusServiceConfigurator configurator,
            [NotNull] IConsumerFactory <TConsumer> consumerFactory, [NotNull] Action <Action> interceptor)
            where TConsumer : class, IConsumer
        {
            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Subscribing Intercepting Consumer: {0} (using supplied consumer factory)",
                                 typeof(TConsumer));
            }

            var interceptingConsumerFactory = new InterceptingConsumerFactory <TConsumer>(consumerFactory, interceptor);

            return(configurator.Consumer(interceptingConsumerFactory));
        }
Beispiel #30
0
 /// <summary>
 /// Load the saga of the generic type from the windsor container,
 /// by loading it directly from the container.
 /// </summary>
 /// <typeparam name="TSaga">The type of the saga</typeparam>
 /// <param name="configurator">The configurator</param>
 /// <param name="container">The windsor container</param>
 /// <returns>The configurator</returns>
 public static SagaSubscriptionConfigurator <TSaga> Saga <TSaga>(
     [NotNull] this SubscriptionBusServiceConfigurator configurator,
     [NotNull] IWindsorContainer container)
     where TSaga : class, ISaga
 {
     if (configurator == null)
     {
         throw new ArgumentNullException("configurator");
     }
     if (container == null)
     {
         throw new ArgumentNullException("container");
     }
     return(configurator.Saga(container.Resolve <ISagaRepository <TSaga> >()));
 }
Beispiel #31
0
 protected override void SubscribeLocalBus(SubscriptionBusServiceConfigurator subscriptionBusServiceConfigurator)
 {
     subscriptionBusServiceConfigurator.LoadFrom(_container);
 }
 protected virtual void ConfigureSubscriptions(SubscriptionBusServiceConfigurator configurator)
 {
 }
 protected abstract void SubscribeLocalBus(SubscriptionBusServiceConfigurator subscriptionBusServiceConfigurator);
Beispiel #34
0
 protected override void SubscribeLocalBus(SubscriptionBusServiceConfigurator subscriptionBusServiceConfigurator)
 {
     // we have to do this explicitly, since the metadata is not exposed by Ninject
     subscriptionBusServiceConfigurator.Saga<SimpleSaga>(_container);
 }