示例#1
0
        // SAMPLE: FetchErrorReport
        public async Task load_error_report(IEnvelopePersistence persistence, Guid envelopeId)
        {
            var report = await persistence.Admin.LoadDeadLetterEnvelope(envelopeId);

            // The Id
            Console.WriteLine(report.Id);

            // Why it was moved out
            Console.WriteLine(report.Explanation);

            // The underlying message typ
            Console.WriteLine(report.MessageType);


            // Reconstitute the original Envelope
            // Envelope.Data would have the raw data here
            var envelope = report.RebuildEnvelope();

            // The name ofthe system that sent the message
            Console.WriteLine(report.Source);

            // The .Net Exception type name
            Console.WriteLine(report.ExceptionType);

            // Just the message of the exception
            Console.WriteLine(report.ExceptionMessage);

            // JUST SHOW ME THE FULL STACKTRACE ALREADY!!!!
            Console.WriteLine(report.ExceptionText);
        }
示例#2
0
        public DurableWorkerQueue(Endpoint endpoint, IHandlerPipeline pipeline,
                                  AdvancedSettings settings, IEnvelopePersistence persistence, ITransportLogger logger)
        {
            _settings    = settings;
            _persistence = persistence;
            _logger      = logger;

            endpoint.ExecutionOptions.CancellationToken = settings.Cancellation;

            _receiver = new ActionBlock <Envelope>(async envelope =>
            {
                try
                {
                    envelope.ContentType = envelope.ContentType ?? "application/json";

                    await pipeline.Invoke(envelope, this);
                }
                catch (Exception e)
                {
                    // This *should* never happen, but of course it will
                    logger.LogException(e);
                }
            }, endpoint.ExecutionOptions);

            _policy = Policy
                      .Handle <Exception>()
                      .WaitAndRetryForeverAsync(i => (i * 100).Milliseconds()
                                                , (e, timeSpan) => {
                _logger.LogException(e);
            });
        }
示例#3
0
        public DurabilityAgent(ITransportLogger logger,
                               ILogger <DurabilityAgent> trace,
                               IWorkerQueue workers,
                               IEnvelopePersistence persistence,
                               ITransportRuntime runtime,
                               AdvancedSettings settings)
        {
            if (persistence is NulloEnvelopePersistence)
            {
                _disabled = true;
                return;
            }

            Logger       = logger;
            _trace       = trace;
            _workers     = workers;
            _persistence = persistence;
            _settings    = settings;


            _storage = _persistence.AgentStorage;

            _worker = new ActionBlock <IMessagingAction>(processAction, new ExecutionDataflowBlockOptions
            {
                MaxDegreeOfParallelism = 1,
                CancellationToken      = _settings.Cancellation
            });

            NodeId = _settings.UniqueNodeId;

            IncomingMessages = new RecoverIncomingMessages(persistence, workers, settings, logger);
            OutgoingMessages = new RecoverOutgoingMessages(runtime, settings, logger);
            NodeReassignment = new NodeReassignment(settings);
            ScheduledJobs    = new RunScheduledJobs(settings, logger);
        }
示例#4
0
        //private readonly IWorkerQueue _workers;

        public MetricsCollector(IMetrics metrics, IEnvelopePersistence persistence, IMessageLogger logger,
                                AdvancedSettings settings)
        {
            _metrics     = metrics;
            _persistence = persistence;
            _logger      = logger;
            _settings    = settings;
        }
示例#5
0
 public RecoverIncomingMessages(IEnvelopePersistence persistence, IWorkerQueue workers, AdvancedSettings settings,
                                ITransportLogger logger)
 {
     _persistence   = persistence;
     _workers       = workers;
     this._settings = settings;
     _logger        = logger;
 }
 public RecoverIncomingMessages(IEnvelopePersistence persistence, IWorkerQueue workers, JasperOptions options,
                                ITransportLogger logger)
 {
     _persistence = persistence;
     _workers     = workers;
     _options     = options;
     _logger      = logger;
 }
示例#7
0
 public MetricsCollector(IMetrics metrics, IEnvelopePersistence persistence, IMessageLogger logger,
                         JasperOptions settings, IWorkerQueue workers)
 {
     _metrics     = metrics;
     _persistence = persistence;
     _logger      = logger;
     _settings    = settings;
     _workers     = workers;
 }
示例#8
0
 public DurableListener(IListeningAgent agent, IWorkerQueue queues, ITransportLogger logger,
                        JasperOptions options, IEnvelopePersistence persistence)
 {
     _agent       = agent;
     _queues      = queues;
     _logger      = logger;
     _options     = options;
     _persistence = persistence;
 }
示例#9
0
        public DurableLoopbackSendingAgent(Uri destination, IWorkerQueue queues, IEnvelopePersistence persistence,
                                           SerializationGraph serializers, ITransportLogger logger)
        {
            _queues      = queues;
            _serializers = serializers;
            _logger      = logger;

            _persistence = persistence;

            Destination = destination;
        }
        public DurableLocalSendingAgent(Endpoint endpoint, IHandlerPipeline pipeline,
                                        AdvancedSettings settings, IEnvelopePersistence persistence, ITransportLogger logger,
                                        MessagingSerializationGraph serializers, IMessageLogger messageLogger) : base(endpoint, pipeline, settings, persistence, logger)
        {
            _settings      = settings;
            _persistence   = persistence;
            _logger        = logger;
            _serializers   = serializers;
            _messageLogger = messageLogger;
            Destination    = endpoint.Uri;

            Endpoint = endpoint;
            ReplyUri = TransportConstants.RepliesUri;
        }
示例#11
0
        public DurableSendingAgent(ISender sender, AdvancedSettings settings, ITransportLogger logger,
                                   IMessageLogger messageLogger,
                                   IEnvelopePersistence persistence, Endpoint endpoint) : base(logger, messageLogger, sender, settings, endpoint)
        {
            _logger = logger;

            _persistence = persistence;

            _policy = Policy
                      .Handle <Exception>()
                      .WaitAndRetryForeverAsync(i => (i * 100).Milliseconds()
                                                , (e, timeSpan) => {
                _logger.LogException(e, message: "Failed while trying to enqueue a message batch for retries");
            });
        }
示例#12
0
        public DurableCallback(Envelope envelope, IWorkerQueue queue, IEnvelopePersistence persistence,
                               ITransportLogger logger)
        {
            _envelope    = envelope;
            _queue       = queue;
            _persistence = persistence;
            _logger      = logger;

            _policy = Policy
                      .Handle <Exception>()
                      .WaitAndRetryForeverAsync(i => (i * 100).Milliseconds()
                                                , (e, timeSpan) => {
                _logger.LogException(e);
            });
        }
示例#13
0
        public DurableRetryAgent(ISender sender, JasperOptions options, ITransportLogger logger,
                                 IEnvelopePersistence persistence) : base(sender, options.Retries)
        {
            _options = options;
            _logger  = logger;

            _persistence = persistence;

            _policy = Policy
                      .Handle <Exception>()
                      .WaitAndRetryForeverAsync(i => (i * 100).Milliseconds()
                                                , (e, timeSpan) => {
                _logger.LogException(e, message: "Failed while trying to enqueue a message batch for retries");
            });
        }
示例#14
0
        public DurableSendingAgent(Uri destination, ISender sender,
                                   ITransportLogger logger, JasperOptions options,
                                   IEnvelopePersistence persistence)
            : base(destination, sender, logger, options,
                   new DurableRetryAgent(sender, options, logger, persistence))
        {
            _logger  = logger;
            _options = options;

            _persistence = persistence;

            _policy = Policy
                      .Handle <Exception>()
                      .WaitAndRetryForeverAsync(i => (i * 100).Milliseconds()
                                                , (e, timeSpan) => {
                _logger.LogException(e);
            });
        }
示例#15
0
        public DurabilityAgent(JasperOptions options,
                               ITransportLogger logger,
                               ILogger <DurabilityAgent> trace,
                               IWorkerQueue workers,
                               IEnvelopePersistence persistence,
                               ISubscriberGraph subscribers)
        {
            if (persistence is NulloEnvelopePersistence)
            {
                _disabled = true;
                return;
            }

            options.DurabilityAgent = this;

            _options     = options;
            Logger       = logger;
            _trace       = trace;
            _workers     = workers;
            _persistence = persistence;



            _storage = _persistence.AgentStorage;

            _worker = new ActionBlock <IMessagingAction>(processAction, new ExecutionDataflowBlockOptions
            {
                MaxDegreeOfParallelism = 1,
                CancellationToken      = _options.Cancellation
            });

            NodeId = _options.UniqueNodeId;

            IncomingMessages = new RecoverIncomingMessages(workers, options, logger);
            OutgoingMessages = new RecoverOutgoingMessages(subscribers, options, logger);
            NodeReassignment = new NodeReassignment(options, logger);
            ScheduledJobs    = new RunScheduledJobs(options, logger);
        }
示例#16
0
        public DurableWorkerQueue(Endpoint endpoint, IHandlerPipeline pipeline,
                                  AdvancedSettings settings, IEnvelopePersistence persistence, ITransportLogger logger)
        {
            _settings    = settings;
            _persistence = persistence;
            _logger      = logger;

            endpoint.ExecutionOptions.CancellationToken = settings.Cancellation;

            _receiver = new ActionBlock <Envelope>(async envelope =>
            {
                try
                {
                    envelope.ContentType = envelope.ContentType ?? "application/json";

                    await pipeline.Invoke(envelope);
                }
                catch (Exception e)
                {
                    // This *should* never happen, but of course it will
                    logger.LogException(e);
                }
            }, endpoint.ExecutionOptions);
        }