public async Task <Guid> Send(Envelope envelope) { if (envelope.Message == null) { throw new ArgumentNullException(nameof(envelope.Message)); } envelope.Source = _settings.NodeId; if (envelope.Destination == null) { await applyRoutingRules(envelope); } else { var route = await _router.RouteForDestination(envelope); await sendEnvelope(envelope, route); } return(envelope.Id); }
public async Task <string> Send(Envelope envelope, IMessageCallback callback) { if (envelope.Message == null) { throw new ArgumentNullException(nameof(envelope.Message)); } envelope.Source = _settings.NodeId; if (envelope.Destination == null) { var routes = await _router.Route(envelope.Message.GetType()); if (!routes.Any()) { Logger.NoRoutesFor(envelope); if (_settings.NoMessageRouteBehavior == NoRouteBehavior.ThrowOnNoRoutes) { throw new NoRoutesException(envelope); } } foreach (var route in routes) { await sendEnvelope(envelope, route, callback); } } else { var route = await _router.RouteForDestination(envelope); await sendEnvelope(envelope, route, callback); } return(envelope.CorrelationId); }