コード例 #1
0
        protected BaseCourierContext(ConsumeContext <RoutingSlip> consumeContext)
            : base(consumeContext)
        {
            if (consumeContext == null)
            {
                throw new ArgumentNullException(nameof(consumeContext));
            }

            _timer = Stopwatch.StartNew();
            var newId = NewId.Next();

            _executionId = newId.ToGuid();
            _timestamp   = newId.Timestamp;

            RoutingSlip = new SanitizedRoutingSlip(consumeContext);
            Publisher   = new RoutingSlipEventPublisher(this, RoutingSlip);
        }
コード例 #2
0
        public static async Task Execute(this IBus bus, RoutingSlip routingSlip)
        {
            if (routingSlip.RanToCompletion())
            {
                DateTime timestamp = DateTime.UtcNow;
                TimeSpan duration = timestamp - routingSlip.CreateTimestamp;

                IRoutingSlipEventPublisher publisher = new RoutingSlipEventPublisher(bus, routingSlip);

                await publisher.PublishRoutingSlipCompleted(timestamp, duration, routingSlip.Variables);
            }
            else
            {
                ISendEndpoint endpoint = await bus.GetSendEndpoint(routingSlip.GetNextExecuteAddress());

                await endpoint.Send(routingSlip, Pipe.New<SendContext>(x => x.UseExecute(context => context.SourceAddress = bus.Address)));
            }
        }