public IMutating MutateOutgoing(IMutating mutating)
        {
            // Make sure UserId and Stamp are transfer from message to message
            if (mutating.Message is StampedCommand)
            {
                if (_uow.CurrentMessage is StampedCommand)
                {
                    var command = _uow.CurrentMessage as StampedCommand;
                    ((StampedCommand)mutating.Message).Stamp = command.Stamp;
                }
                if (_uow.CurrentMessage is IStampedEvent)
                {
                    var @event = _uow.CurrentMessage as IStampedEvent;
                    ((StampedCommand)mutating.Message).Stamp = @event.Stamp;
                }
            }
            else if (mutating.Message is IStampedEvent)
            {
                if (_uow.CurrentMessage is StampedCommand)
                {
                    var command = _uow.CurrentMessage as StampedCommand;
                    ((IStampedEvent)mutating.Message).Stamp = command.Stamp;
                }
                if (_uow.CurrentMessage is IStampedEvent)
                {
                    var @event = _uow.CurrentMessage as IStampedEvent;
                    ((IStampedEvent)mutating.Message).Stamp = @event.Stamp;
                }
            }

            return(mutating);
        }
示例#2
0
        public IMutating MutateIncoming(IMutating command)
        {
            CurrentMessage = command.Message;

            // There are certain headers that we can make note of
            // These will be committed to the event stream and included in all .Reply or .Publish done via this Unit Of Work
            // Meaning all receivers of events from the command will get information about the command's message, if they care
            foreach (var header in Defaults.CarryOverHeaders)
            {
                var defaultHeader = "";
                command.Headers.TryGetValue(header, out defaultHeader);

                if (string.IsNullOrEmpty(defaultHeader))
                {
                    defaultHeader = NotFound;
                }

                var workHeader = $"{PrefixHeader}.{header}";
                CurrentHeaders[workHeader] = defaultHeader;
            }

            // Copy any application headers the user might have included
            var userHeaders = command.Headers.Keys.Where(h =>
                                                         !h.Equals("CorrId", StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.Equals("WinIdName", StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.StartsWith("NServiceBus", StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.StartsWith("$", StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.Equals(Defaults.CommitIdHeader, StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.Equals(Defaults.RequestResponse, StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.Equals(Defaults.Retries, StringComparison.InvariantCultureIgnoreCase));

            foreach (var header in userHeaders)
            {
                CurrentHeaders[header] = command.Headers[header];
            }
            CurrentHeaders[Defaults.InstanceHeader] = Defaults.Instance.ToString();


            CommitId = Guid.NewGuid();

            try
            {
                string messageId;
                // Attempt to get MessageId from NServicebus headers
                // If we maintain a good CommitId convention it should solve the message idempotentcy issue (assuming the storage they choose supports it)
                if (CurrentHeaders.TryGetValue(Defaults.MessageIdHeader, out messageId))
                {
                    CommitId = Guid.Parse(messageId);
                }

                // Allow the user to send a CommitId along with his message if he wants
                if (CurrentHeaders.TryGetValue(Defaults.CommitIdHeader, out messageId))
                {
                    CommitId = Guid.Parse(messageId);
                }
            }
            catch (FormatException) { }

            return(command);
        }
示例#3
0
 public IMutating MutateOutgoing(IMutating mutating)
 {
     MutatedOutgoing = true;
     if (!ShouldSucceed)
     {
         throw new Exception();
     }
     return(mutating);
 }
示例#4
0
        public IMutating MutateOutgoing(IMutating command)
        {
            foreach (var header in CurrentHeaders)
            {
                command.Headers[header.Key] = header.Value;
            }

            return(command);
        }
示例#5
0
        public IMutating MutateOutgoing(IMutating mutating)
        {
            if (!(mutating.Message is StampedCommand))
            {
                return(mutating);
            }

            (mutating.Message as StampedCommand).Stamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();

            return(mutating);
        }
示例#6
0
        public IMutating MutateOutgoing(IMutating mutating)
        {
            // Make sure UserId and Stamp are transfer from message to message
            if (mutating.Message is StampedCommand)
            {
                if ((mutating.Message as StampedCommand).Stamp != 0)
                {
                    return(mutating);
                }

                if (_uow.CurrentMessage is StampedCommand)
                {
                    var command = _uow.CurrentMessage as StampedCommand;
                    ((StampedCommand)mutating.Message).Stamp = command.Stamp;
                }
                else if (_uow.CurrentMessage is IStampedEvent)
                {
                    var @event = _uow.CurrentMessage as IStampedEvent;
                    ((StampedCommand)mutating.Message).Stamp = @event.Stamp;
                }
                else if ((mutating.Message as StampedCommand).Stamp == 0)
                {
                    (mutating.Message as StampedCommand).Stamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
                }
            }
            else if (mutating.Message is IStampedEvent)
            {
                if ((mutating.Message as IStampedEvent).Stamp != 0)
                {
                    return(mutating);
                }

                if (_uow.CurrentMessage is StampedCommand)
                {
                    var command = _uow.CurrentMessage as StampedCommand;
                    ((IStampedEvent)mutating.Message).Stamp = command.Stamp;
                }
                else if (_uow.CurrentMessage is IStampedEvent)
                {
                    var @event = _uow.CurrentMessage as IStampedEvent;
                    ((IStampedEvent)mutating.Message).Stamp = @event.Stamp;
                }
                else if ((mutating.Message as IStampedEvent).Stamp == 0)
                {
                    (mutating.Message as IStampedEvent).Stamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
                }
            }

            return(mutating);
        }
示例#7
0
 public IMutating MutateIncoming(IMutating mutating)
 {
     return(mutating);
 }
示例#8
0
        public IMutating MutateIncoming(IMutating command)
        {
            CurrentMessage = command.Message;

            // There are certain headers that we can make note of
            // These will be committed to the event stream and included in all .Reply or .Publish done via this Unit Of Work
            // Meaning all receivers of events from the command will get information about the command's message, if they care
            foreach (var header in NSBDefaults.CarryOverHeaders)
            {
                var defaultHeader = "";
                command.Headers.TryGetValue(header, out defaultHeader);

                if (string.IsNullOrEmpty(defaultHeader))
                {
                    defaultHeader = NotFound;
                }

                var workHeader = $"{Defaults.OriginatingHeader}.{header}";
                CurrentHeaders[workHeader] = defaultHeader;
            }
            CurrentHeaders[$"{Defaults.PrefixHeader}.OriginatingType"] = CurrentMessage.GetType().FullName;

            // Copy any application headers the user might have included
            var userHeaders = command.Headers.Keys.Where(h =>
                                                         !h.Equals("CorrId", StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.Equals("WinIdName", StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.StartsWith("NServiceBus", StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.StartsWith("$", StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.Equals(CommitHeader) &&
                                                         !h.Equals(Defaults.CommitIdHeader, StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.Equals(Defaults.RequestResponse, StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.Equals(Defaults.Retries, StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.Equals(Defaults.LocalHeader, StringComparison.InvariantCultureIgnoreCase) &&
                                                         !h.Equals(Defaults.BulkHeader, StringComparison.InvariantCultureIgnoreCase));

            foreach (var header in userHeaders)
            {
                CurrentHeaders[header] = command.Headers[header];
            }

            if (command.Headers.ContainsKey(Headers.CorrelationId))
            {
                CurrentHeaders[$"{Defaults.PrefixHeader}.{Defaults.CorrelationIdHeader}"] = command.Headers[Headers.CorrelationId];
            }

            string messageId;
            Guid   commitId = Guid.NewGuid();

            // Attempt to get MessageId from NServicebus headers
            // If we maintain a good CommitId convention it should solve the message idempotentcy issue (assuming the storage they choose supports it)
            if (CurrentHeaders.TryGetValue(NSBDefaults.MessageIdHeader, out messageId))
            {
                Guid.TryParse(messageId, out commitId);
            }
            if (CurrentHeaders.TryGetValue($"{Defaults.PrefixHeader}.{Defaults.MessageIdHeader}", out messageId))
            {
                Guid.TryParse(messageId, out commitId);
            }

            // Allow the user to send a CommitId along with his message if he wants
            if (CurrentHeaders.TryGetValue(Defaults.CommitIdHeader, out messageId))
            {
                Guid.TryParse(messageId, out commitId);
            }


            CommitId = commitId;

            // Helpful log and gets CommitId into the dictionary
            var firstEventId = UnitOfWork.NextEventId(CommitId);

            return(command);
        }
 public virtual IMutating MutateOutgoing(IMutating command)
 {
     return(command);
 }
示例#10
0
 public virtual IMutating MutateIncoming(IMutating command)
 {
     return(command);
 }
示例#11
0
 public IMutating MutateIncoming(IMutating command)
 {
     return(command);
 }