コード例 #1
0
        public BoundedContextListener(
            BoundedContextListenerConfiguration configuration,
            IEventConverter eventConverter,
            IUncommittedEventStreamCoordinator uncommittedEventStreamCoordinator,
            ILogger logger,
            IApplicationResourceIdentifierConverter applicationResourceIdentifierConverter,
            IImplementationsOf <IEvent> eventTypes,
            IEventStore eventStore,
            IEventEnvelopes eventEnvelopes,
            IEventSequenceNumbers eventSequenceNumbers,
            IEventSourceVersions eventSourceVersions,
            ICommittedEventStreamBridge committedEventStreamBridge,
            IConsumer consumer)
        {
            _eventConverter = eventConverter;
            _uncommittedEventStreamCoordinator = uncommittedEventStreamCoordinator;
            _logger = logger;
            _applicationResourceIdentifierConverter = applicationResourceIdentifierConverter;
            _eventTypes                 = eventTypes;
            _eventSequenceNumbers       = eventSequenceNumbers;
            _eventStore                 = eventStore;
            _eventEnvelopes             = eventEnvelopes;
            _eventSourceVersions        = eventSourceVersions;
            _committedEventStreamBridge = committedEventStreamBridge;
            _consumer = consumer;

            _serializer    = new JsonSerializer();
            _configuration = configuration;
        }
コード例 #2
0
ファイル: ReadModule.cs プロジェクト: RebeccaBushby/cbs
        public ReadModule(IImplementationsOf <IReadModel> readModels, ITypeFinder typeFinder)
        {
            _readModels = readModels;

            var customClassMapTypes        = typeFinder.FindMultiple(typeof(IBsonClassMapForReadModel <>));
            var readModelHasCustomClassMap = GetHasCustomClassMapDictionary(customClassMapTypes.ToList());

            RegisterBsonClassMaps(readModelHasCustomClassMap);
        }
コード例 #3
0
 public Bootstrapping(
     ILogger logger,
     IImplementationsOf <ICanHandleGitHubWebhooks> handlers,
     IWebhookCoordinator coordinator
     )
 {
     _logger      = logger;
     _handlers    = handlers;
     _coordinator = coordinator;
 }
コード例 #4
0
 /// <summary>
 /// Instantiates an instance of <see cref="Bootstrapping" />
 /// </summary>
 /// <param name="logger">A looger</param>
 /// <param name="handlers">A collection of implementations that can handle github webhook requests</param>
 /// <param name="registry">A registry of handler methods for associating requests with handlers</param>
 public Bootstrapping(
     ILogger logger,
     IImplementationsOf <ICanHandleGitHubWebhooks> handlers,
     IWebhookHandlerRegistry registry
     )
 {
     _logger   = logger;
     _handlers = handlers;
     _registry = registry;
 }
コード例 #5
0
ファイル: EventProcessors.cs プロジェクト: henriksen/cbs
        void PopulateProcessMethodsFrom(IImplementationsOf <IEventProcessor> eventProcessors)
        {
            eventProcessors.ForEach(eventProcessorType =>
            {
                var methods = eventProcessorType.GetMethods(BindingFlags.Instance | BindingFlags.Public).Where(method => {
                    var parameters = method.GetParameters();

                    return(method.Name == ProcessMethodName &&
                           parameters.Length == 1 &&
                           typeof(IEvent).GetTypeInfo().IsAssignableFrom(parameters[0].ParameterType.GetTypeInfo()));
                });

                methods.ForEach(RegisterProcessMethod);
            });
        }
コード例 #6
0
 /// <summary>
 /// Initializes a new instance of <see cref="ProcessMethodEventProcessors"/>
 /// </summary>
 /// <param name="artifactTypeMap"><see cref="IArtifactTypeMap"/> for identifying <see cref="IEvent">events</see> </param>
 /// <param name="objectFactory"><see cref="IObjectFactory"/> for going between <see cref="PropertyBag"/> and instances of types</param>
 /// <param name="processors"><see cref="IImplementationsOf{ICanProcessEvents}"/> for discovering implementations of <see cref="ICanProcessEvents"/></param>
 /// <param name="container"><see cref="IContainer"/> for the implementation <see cref="ProcessMethodEventProcessor"/> when acquiring instances of implementations of <see cref="ICanProcessEvents"/></param>
 /// <param name="systemClock"><see cref="ISystemClock"/> for timing <see cref="IEventProcessors"/></param>
 /// <param name="logger"><see cref="ILogger"/> for logging</param>
 public ProcessMethodEventProcessors(
     IArtifactTypeMap artifactTypeMap,
     IObjectFactory objectFactory,
     IImplementationsOf <ICanProcessEvents> processors,
     IContainer container,
     ISystemClock systemClock,
     ILogger logger)
 {
     _artifactTypeMap = artifactTypeMap;
     _processors      = processors;
     _container       = container;
     _systemClock     = systemClock;
     _logger          = logger;
     _objectFactory   = objectFactory;
 }
コード例 #7
0
ファイル: EventProcessors.cs プロジェクト: henriksen/cbs
 /// <summary>
 /// Initializes a new instance of <see cref="EventProcessors"/>
 /// </summary>
 /// <param name="eventProcessors"><see cref="IImplementationsOf{IEventProcessor}">Implementations of event processors - types</see></param>
 /// <param name="container"><see cref="IContainer"/></param>
 public EventProcessors(IImplementationsOf <IEventProcessor> eventProcessors, IContainer container)
 {
     PopulateProcessMethodsFrom(eventProcessors);
     _container = container;
 }
コード例 #8
0
        public BoundedContextListener(
            KafkaConnectionString connectionString,
            ListenerConfiguration configuration,
            IEventConverter eventConverter,
            IUncommittedEventStreamCoordinator uncommittedEventStreamCoordinator,
            ISerializer serializer,
            ILogger logger,
            IApplicationResourceIdentifierConverter applicationResourceIdentifierConverter,
            IImplementationsOf <IEvent> eventTypes,
            IEventStore eventStore,
            IEventEnvelopes eventEnvelopes,
            IEventSequenceNumbers eventSequenceNumbers,
            IEventSourceVersions eventSourceVersions,
            ICommittedEventStreamBridge committedEventStreamBridge)
        {
            _serializer     = serializer;
            _eventConverter = eventConverter;
            _uncommittedEventStreamCoordinator = uncommittedEventStreamCoordinator;
            _logger = logger;
            _applicationResourceIdentifierConverter = applicationResourceIdentifierConverter;
            _eventTypes                 = eventTypes;
            _eventSequenceNumbers       = eventSequenceNumbers;
            _eventStore                 = eventStore;
            _eventEnvelopes             = eventEnvelopes;
            _eventSourceVersions        = eventSourceVersions;
            _committedEventStreamBridge = committedEventStreamBridge;



            logger.Information($"Listening on topic '{configuration.Topic}' from '{connectionString}'");

            var config = new Dictionary <string, object>
            {
                { "bootstrap.servers", connectionString },
                { "group.id", "simple-consumer" },
                { "enable.auto.commit", true },
                { "auto.commit.interval.ms", 1000 },
                {
                    "default.topic.config",
                    new Dictionary <string, object>()
                    {
                        { "auto.offset.reset", "smallest" }
                    }
                }
            };

            _consumer = new Consumer <Ignore, string>(config, null, new StringDeserializer(Encoding.UTF8));
            _consumer.Assign(new [] { new TopicPartition(configuration.Topic, 0) });
            _consumer.OnMessage += (_, msg) =>
            {
                try
                {
                    logger.Trace($"Message received '{msg.Value}'");
                    var raw = _serializer.FromJson <dynamic[]>(msg.Value);

                    foreach (var rawContentAndEnvelope in raw)
                    {
                        var eventSourceId   = (EventSourceId)Guid.Parse(rawContentAndEnvelope.Content.EventSourceId.ToString());
                        var eventIdentifier = _applicationResourceIdentifierConverter.FromString(rawContentAndEnvelope.Envelope.Event.ToString());
                        var version         = EventSourceVersion.FromCombined((double)rawContentAndEnvelope.Envelope.Version);
                        var correlationId   = (TransactionCorrelationId)Guid.Parse(rawContentAndEnvelope.Envelope.CorrelationId.ToString());
                        CorrelationId = correlationId;

                        _logger.Trace($"Received event of with resource name '{eventIdentifier.Resource.Name}' from '{eventSourceId}' with version '{version}' in correlation '{correlationId}'");
                        var eventType = _eventTypes.SingleOrDefault(et => et.Name == eventIdentifier.Resource.Name);
                        if (eventType != null)
                        {
                            _logger.Trace("Matching Event Type : " + eventType.AssemblyQualifiedName);
                            var @event = Activator.CreateInstance(eventType, eventSourceId) as IEvent;
                            _serializer.FromJson(@event, rawContentAndEnvelope.Content.ToString());

                            var eventSource            = new ExternalSource(eventSourceId);
                            var uncommittedEventStream = new UncommittedEventStream(eventSource);
                            uncommittedEventStream.Append(@event, version);


                            _logger.Information($"Committing uncommitted event stream with correlationId '{correlationId}'");
                            var envelopes        = _eventEnvelopes.CreateFrom(eventSource, uncommittedEventStream.EventsAndVersion);
                            var envelopesAsArray = envelopes.ToArray();
                            var eventsAsArray    = uncommittedEventStream.ToArray();

                            _logger.Trace("Create an array of events and envelopes");
                            var eventsAndEnvelopes = new List <EventAndEnvelope>();
                            for (var eventIndex = 0; eventIndex < eventsAsArray.Length; eventIndex++)
                            {
                                var envelope     = envelopesAsArray[eventIndex];
                                var currentEvent = eventsAsArray[eventIndex];
                                eventsAndEnvelopes.Add(new EventAndEnvelope(
                                                           envelope
                                                           .WithTransactionCorrelationId(correlationId)
                                                           .WithSequenceNumber(_eventSequenceNumbers.Next())
                                                           .WithSequenceNumberForEventType(_eventSequenceNumbers.NextForType(envelope.Event)),
                                                           currentEvent
                                                           ));
                            }

                            _logger.Trace("Committing events to event store");
                            _eventStore.Commit(eventsAndEnvelopes);

                            _logger.Trace($"Set event source versions for the event source '{envelopesAsArray[0].EventSource}' with id '{envelopesAsArray[0].EventSourceId}'");
                            _eventSourceVersions.SetFor(envelopesAsArray[0].EventSource, envelopesAsArray[0].EventSourceId, envelopesAsArray[envelopesAsArray.Length - 1].Version);

                            _logger.Trace("Create a committed event stream");
                            var committedEventStream = new CommittedEventStream(uncommittedEventStream.EventSourceId, eventsAndEnvelopes);
                            _committedEventStreamBridge.Send(committedEventStream);

                            CorrelationId = Guid.Empty;
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.Error(ex, "Error during receiving");
                }
            };
        }
コード例 #9
0
 public BypassControllersManager(IImplementationsOf <ICanBypassSecurity> securityBypassers, IContainer container)
 {
     _securityBypassers = securityBypassers;
     _container         = container;
 }
コード例 #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="EventHandlersProvider"/> class.
 /// </summary>
 /// <param name="handlers"><see cref="IImplementationsOf{T}"/> of type <see cref="ICanHandleEvents"/>.</param>
 /// <param name="logger">The <see cref="ILogger"/> to use for logging.</param>
 public EventHandlersProvider(IImplementationsOf <ICanHandleEvents> handlers, ILogger logger)
 {
     _handlers = handlers;
     _logger   = logger;
 }