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); }
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); }
public IMutating MutateOutgoing(IMutating mutating) { MutatedOutgoing = true; if (!ShouldSucceed) { throw new Exception(); } return(mutating); }
public IMutating MutateOutgoing(IMutating command) { foreach (var header in CurrentHeaders) { command.Headers[header.Key] = header.Value; } return(command); }
public IMutating MutateOutgoing(IMutating mutating) { if (!(mutating.Message is StampedCommand)) { return(mutating); } (mutating.Message as StampedCommand).Stamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); return(mutating); }
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); }
public IMutating MutateIncoming(IMutating mutating) { return(mutating); }
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); }
public virtual IMutating MutateIncoming(IMutating command) { return(command); }
public IMutating MutateIncoming(IMutating command) { return(command); }