public static IScatter <TResponse> Scatter <TRequest, TResponse>(this IScatterGatherBus messageBus, string topic, TRequest request) { Assert.ArgumentNotNull(messageBus, nameof(messageBus)); var envelope = messageBus.EnvelopeFactory.Create(topic, request); return(messageBus.ScatterEnvelope <TRequest, TResponse>(envelope)); }
public ParticipantBuilder(IScatterGatherBus messageBus, IWorkerPool workerPool) { Assert.ArgumentNotNull(messageBus, nameof(messageBus)); Assert.ArgumentNotNull(workerPool, nameof(workerPool)); _workerPool = workerPool; _dispatchType = DispatchThreadType.NoPreference; }
/// <summary> /// Setup rules to route the Scatter/Gather channel by inspecting the contents of the Scatter payload /// </summary> /// <typeparam name="TRequest"></typeparam> /// <typeparam name="TResponse"></typeparam> /// <param name="messageBus"></param> /// <param name="inTopic"></param> /// <param name="getTopic"></param> /// <returns></returns> public static IDisposable SetupScatterByExamination <TRequest, TResponse>(this IScatterGatherBus messageBus, string inTopic, Func <TRequest, string> getTopic) { Assert.ArgumentNotNull(messageBus, nameof(messageBus)); Assert.ArgumentNotNull(getTopic, nameof(getTopic)); var rule = new PayloadExamineRule <TRequest>(getTopic); return(messageBus.ScatterRouter.AddScatterRouteRule <TRequest, TResponse>(inTopic, rule)); }
public static IDisposable Participate <TRequest, TResponse>(this IScatterGatherBus messageBus, Action <ITopicParticipantBuilder <TRequest, TResponse> > build) { Assert.ArgumentNotNull(messageBus, nameof(messageBus)); var builder = new ParticipantBuilder <TRequest, TResponse>(messageBus, messageBus.WorkerPool); build(builder); var participant = builder.BuildParticipant(); var token = messageBus.Participate(builder.Topic, participant); return(builder.WrapToken(token)); }
/// <summary> /// Add predicate-based routing rules for Scatter/Gather operations /// </summary> /// <typeparam name="TRequest"></typeparam> /// <typeparam name="TResponse"></typeparam> /// <param name="messageBus"></param> /// <param name="build"></param> /// <returns></returns> public static IDisposable SetupScatterRouting <TRequest, TResponse>(this IScatterGatherBus messageBus, Action <IFilterRouteBuilderSingleInput <TRequest> > build) { Assert.ArgumentNotNull(messageBus, nameof(messageBus)); Assert.ArgumentNotNull(build, nameof(build)); var builder = new FilterRouteBuilder <TRequest>(); build(builder); var router = builder.Build(); return(messageBus.ScatterRouter.AddScatterRouteRule <TRequest, TResponse>(builder.InTopics.FirstOrDefault(), router)); }
public ScatterChannelProxy(IScatterGatherBus messageBus) { Assert.ArgumentNotNull(messageBus, nameof(messageBus)); _messageBus = messageBus; }
public static ScatterChannelProxy <TRequest, TResponse> GetScatterChannel <TRequest, TResponse>(this IScatterGatherBus messageBus) { return(new ScatterChannelProxy <TRequest, TResponse>(messageBus)); }
public static IScatter <TResponse> Scatter <TRequest, TResponse>(this IScatterGatherBus messageBus, TRequest request) { Assert.ArgumentNotNull(messageBus, nameof(messageBus)); return(messageBus.Scatter <TRequest, TResponse>(string.Empty, request)); }