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));
        }
Exemplo n.º 2
0
        public ParticipantBuilder(IScatterGatherBus messageBus, IWorkerPool workerPool)
        {
            Assert.ArgumentNotNull(messageBus, nameof(messageBus));
            Assert.ArgumentNotNull(workerPool, nameof(workerPool));

            _workerPool   = workerPool;
            _dispatchType = DispatchThreadType.NoPreference;
        }
Exemplo n.º 3
0
        /// <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));
        }
Exemplo n.º 5
0
        /// <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));
        }
Exemplo n.º 6
0
 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));
 }