public static IUnityContainer ConfigureUnity(this IUnityContainer container, MockMessageReceiver receiver, MessageProcessingStage[] stages) { var settings = new PerformedOperationsPrimaryFlowProcessorSettings { AppropriatedStages = stages }; var metadataProvider = new MetadataProvider(new IMetadataSource[] { new PerformedOperationsMessageFlowsMetadataSource() }, new IMetadataProcessor[] { new ReferencesEvaluatorProcessor() }); return(container .RegisterContexts() .RegisterInstance(Mock.Of <ITelemetryPublisher>()) .RegisterType <ITracer, NullTracer>() .RegisterInstance <IMetadataProvider>(metadataProvider) .RegisterInstance <IPerformedOperationsFlowProcessorSettings>(settings) .RegisterInstance(receiver) .RegisterType <IMessageReceiverFactory, UnityMessageReceiverFactory>(Lifetime.Singleton) .RegisterType <IMessageFlowProcessorResolveStrategy, Mocks.Processor.PrimaryProcessorResolveStrategy>("primary", Lifetime.Singleton) .RegisterType <IMessageFlowReceiverResolveStrategy, MockReceiverResolveStrategy>("primary", Lifetime.Singleton) .RegisterType <IMessageProcessingStagesFactory, UnityMessageProcessingStagesFactory>(Lifetime.Singleton) .RegisterType <IMessageTransformerFactory, UnityMessageTransformerFactory>(Lifetime.Singleton) .RegisterType <IMessageFlowProcessorFactory, UnityMessageFlowProcessorFactory>(Lifetime.Singleton) .RegisterType <IParentContainerUsedRegistrationsContainer, ParentContainerUsedRegistrationsContainer>(Lifetime.Singleton) .RegisterType <IMessageProcessingHandlerFactory, UnityMessageProcessingHandlerFactory>(Lifetime.PerScope) .RegisterType <IMessageProcessingContextAccumulatorFactory, UnityMessageProcessingContextAccumulatorFactory>(Lifetime.PerScope)); }
private void ProcessFlow() { if (!_metadataProvider.TryGetMetadata(Flow.AsPrimaryProcessingFlowId(), out MessageFlowMetadata messageFlowMetadata)) { var msg = "Unsupported flow specified for processing: " + Flow; throw new InvalidOperationException(msg); } var processorSettings = new PerformedOperationsPrimaryFlowProcessorSettings { MessageBatchSize = BatchSizeAccordingFailures, AppropriatedStages = new[] { MessageProcessingStage.Transformation, MessageProcessingStage.Accumulation, MessageProcessingStage.Handling }, FirstFaultTolerantStage = MessageProcessingStage.None }; var messageFlowProcessor = _messageFlowProcessorFactory.CreateSync <IPerformedOperationsFlowProcessorSettings>(messageFlowMetadata, processorSettings); try { messageFlowProcessor.Process(); } finally { messageFlowProcessor?.Dispose(); } }
public static IUnityContainer ConfigureUnity(this IUnityContainer container, MockMessageReceiver receiver, MessageProcessingStage[] stages) { var settings = new PerformedOperationsPrimaryFlowProcessorSettings { AppropriatedStages = stages }; var metadataProvider = new MetadataProvider(new IMetadataSource[] { new PerformedOperationsMessageFlowsMetadataSource() }, new IMetadataProcessor[] { new ReferencesEvaluatorProcessor() }); return container .RegisterContexts() .RegisterInstance(Mock.Of<ITelemetryPublisher>()) .RegisterType<ITracer, NullTracer>() .RegisterInstance<IMetadataProvider>(metadataProvider) .RegisterInstance<IPerformedOperationsFlowProcessorSettings>(settings) .RegisterInstance(receiver) .RegisterType<IMessageReceiverFactory, UnityMessageReceiverFactory>(Lifetime.Singleton) .RegisterType<IMessageFlowProcessorResolveStrategy, Mocks.Processor.PrimaryProcessorResolveStrategy>("primary", Lifetime.Singleton) .RegisterType<IMessageFlowReceiverResolveStrategy, MockReceiverResolveStrategy>("primary", Lifetime.Singleton) .RegisterType<IMessageProcessingStagesFactory, UnityMessageProcessingStagesFactory>(Lifetime.Singleton) .RegisterType<IMessageTransformerFactory, UnityMessageTransformerFactory>(Lifetime.Singleton) .RegisterType<IMessageFlowProcessorFactory, UnityMessageFlowProcessorFactory>(Lifetime.Singleton) .RegisterType<IParentContainerUsedRegistrationsContainer, ParentContainerUsedRegistrationsContainer>(Lifetime.Singleton) .RegisterType<IMessageProcessingHandlerFactory, UnityMessageProcessingHandlerFactory>(Lifetime.PerScope) .RegisterType<IMessageProcessingContextAccumulatorFactory, UnityMessageProcessingContextAccumulatorFactory>(Lifetime.PerScope); }
private void ProcessFlow() { MessageFlowMetadata messageFlowMetadata; if (!_metadataProvider.TryGetMetadata(Flow.AsPrimaryProcessingFlowId(), out messageFlowMetadata)) { string msg = "Unsupported flow specified for processing: " + Flow; Tracer.Fatal(msg); throw new InvalidOperationException(msg); } Tracer.Debug("Launching message flow processing. Target message flow: " + messageFlowMetadata); ISyncMessageFlowProcessor messageFlowProcessor; try { var processorSettings = new PerformedOperationsPrimaryFlowProcessorSettings { MessageBatchSize = BatchSize, AppropriatedStages = new[] { MessageProcessingStage.Transformation, MessageProcessingStage.Accumulation, MessageProcessingStage.Handling }, FirstFaultTolerantStage = MessageProcessingStage.None }; messageFlowProcessor = _messageFlowProcessorFactory.CreateSync <IPerformedOperationsFlowProcessorSettings>(messageFlowMetadata, processorSettings); } catch (Exception ex) { Tracer.Error(ex, "Can't create processor for specified flow " + messageFlowMetadata); throw; } try { Tracer.Debug("Message flow processor starting. Target message flow: " + messageFlowMetadata); messageFlowProcessor.Process(); Tracer.Debug("Message flow processor finished. Target message flow: " + messageFlowMetadata); } catch (Exception ex) { Tracer.Fatal(ex, "Message flow processor unexpectedly interrupted. Target message flow: " + messageFlowMetadata); throw; } finally { if (messageFlowProcessor != null) { messageFlowProcessor.Dispose(); } } }
private void ProcessFlow() { MessageFlowMetadata messageFlowMetadata; if (!_metadataProvider.TryGetMetadata(Flow.AsPrimaryProcessingFlowId(), out messageFlowMetadata)) { string msg = "Unsupported flow specified for processing: " + Flow; Tracer.Fatal(msg); throw new InvalidOperationException(msg); } Tracer.Debug("Launching message flow processing. Target message flow: " + messageFlowMetadata); ISyncMessageFlowProcessor messageFlowProcessor; try { var processorSettings = new PerformedOperationsPrimaryFlowProcessorSettings { MessageBatchSize = BatchSize, AppropriatedStages = new[] { MessageProcessingStage.Transformation, MessageProcessingStage.Accumulation, MessageProcessingStage.Handling }, FirstFaultTolerantStage = MessageProcessingStage.None }; messageFlowProcessor = _messageFlowProcessorFactory.CreateSync<IPerformedOperationsFlowProcessorSettings>(messageFlowMetadata, processorSettings); } catch (Exception ex) { Tracer.Error(ex, "Can't create processor for specified flow " + messageFlowMetadata); throw; } try { Tracer.Debug("Message flow processor starting. Target message flow: " + messageFlowMetadata); messageFlowProcessor.Process(); Tracer.Debug("Message flow processor finished. Target message flow: " + messageFlowMetadata); } catch (Exception ex) { Tracer.Fatal(ex, "Message flow processor unexpectedly interrupted. Target message flow: " + messageFlowMetadata); throw; } finally { if (messageFlowProcessor != null) { messageFlowProcessor.Dispose(); } } }