private Address[] GetMessageSubscribers(OutgoingMessageContext outgoingMessage) { var messageTypes = outgoingMessage.GetMessageContracts(); return subscriptionStorage.GetSubscribersForMessageTypes(messageTypes) .Distinct() .ToArray(); }
private void PublishMessages(OutgoingMessageContext outgoingMessage, IEnumerable<Address> subscribers) { TransportMessage message = outgoingMessage.GetTransportMessage(); foreach (var subscriber in subscribers) { message.SetMessageId(SequentialGuid.New()); messageSender.Send(message, subscriber); } }
public bool Publish(OutgoingMessageContext outgoingMessage) { var subscribers = GetMessageSubscribers(outgoingMessage); if (!subscribers.Any()) { Logger.Debug("No subscribers found for message {0}", outgoingMessage); return false; } PublishMessages(outgoingMessage, subscribers); return true; }
public void SendMessage(OutgoingMessageContext outgoingMessageContext) { var currentContext = (IncomingMessageContext)CurrentMessage; if (currentContext.Equals(IncomingMessageContext.Null)) { using (var scope = container.BeginLifetimeScope()) { DispatchOutgoingMessage(outgoingMessageContext, scope); } } else { EnqueOutgoingMessage(outgoingMessageContext, currentContext); } }
public void SendMessage(OutgoingMessageContext outgoingMessageContext) { var currentContext = (IncomingMessageContext)CurrentMessage; if (currentContext.Equals(IncomingMessageContext.Null)) { using (var scope = container.BeginLifetimeScope()) { Logger.Debug("Sending message {0}", outgoingMessageContext); outgoingMessageContext.Process(outgoingPipeline, scope); } } else { Logger.Debug("Enqueuing message {0}", outgoingMessageContext); currentContext.Enqueue(outgoingMessageContext); } }
public void Enqueue(OutgoingMessageContext outgoingMessageContext) { Logger.Debug("Enqueuing outgoing message {0}", outgoingMessageContext); outgoingMessages.Enqueue(outgoingMessageContext); }
public override Task InvokeAsync(OutgoingMessageContext context, Func <Task> next) { throw new NotImplementedException(); }
private void DispatchOutgoingMessage(OutgoingMessageContext outgoingMessageContext, IServiceLocator scope) { outgoingMessageContext.SetUserName(Settings.UserNameResolver); outgoingMessageContext.Process(outgoingPipeline, scope); }
protected virtual void EnqueOutgoingMessage(OutgoingMessageContext outgoingMessageContext, IncomingMessageContext currentContext) { outgoingMessageContext.SetUserName(currentContext.UserName); currentContext.Enqueue(outgoingMessageContext); }