Beispiel #1
0
        /// <summary>
        /// Обрабатывает следующую запись из очереди доменных событий
        /// </summary>
        /// <param name="data">Запись, содержащая информацию о доменной событии</param>
        /// <param name="sequence">Глобальный номер события в очереди доменных событий</param>
        /// <param name="endOfBatch">Является ли последним событием в группе</param>
        public void OnNext(DomainEventEntry record, long sequence, bool endOfBatch)
        {
            var data = record?.Value;

            if (data == null || data is EmptyEventRecord)
            {
                OzzyLogger <IDomainModelTracing> .Log.TraceVerboseEvent($"Processing empty domain record at sequence {sequence}");

                //We are not saving checkpoint here because it is safe to process it again
                //CheckpointManager.SaveCheckpoint(sequence);
                return;
            }
            OzzyLogger <IDomainModelTracing> .Log.ProcessDomainEventEntry(record);

            bool isHandled = false;

            try
            {
                isHandled = _handler.HandleEvent(data);
            }
            catch (Exception e)
            {
                //todo : should we handle exception better?
                if (_faultHandler != null)
                {
                    _faultHandler.Handle(_handler.GetType(), data);
                }
            }
            //
            if (isHandled)
            {
                CheckpointManager.SaveCheckpoint(sequence);
            }
        }