public IDisposable AddPublishRouteRule <TPayload>(string[] topics, IRouteRule <TPayload> rule) { Assert.ArgumentNotNull(rule, nameof(rule)); var keys = Topics.Canonicalize(topics) .Select(t => GetKey <TPayload>(t ?? string.Empty)) .ToArray(); foreach (var key in keys) { if (!_publishRoutes.TryAdd(key, rule)) { throw new Exception($"Could not add route for Payload={typeof(TPayload).Name} Topic={key}. It may have already been added"); } } return(new PublishRouteToken <TPayload>(this, keys)); }
public IDisposable AddSubscription <TPayload>(string[] topics, ISubscription <TPayload> subscription) { subscription.Id = Guid.NewGuid(); if (topics == null) { AddAllTopicsSubscription(subscription); return(new SubscriptionToken <TPayload>(this, null, subscription.Id)); } topics = Topics.Canonicalize(topics); _topicMap.TryAdd(subscription.Id, topics); foreach (var topic in topics) { AddTopicSubscription(subscription, topic); } return(new SubscriptionToken <TPayload>(this, topics, subscription.Id)); }
public IDisposable AddSubscription <TPayload>(string[] topics, ISubscription <TPayload> subscription) { subscription.Id = Guid.NewGuid(); if (topics == null) { var topiclessKey = GetKey <TPayload>(); AddSubscriptionByKey(_topiclessChannels, subscription, topiclessKey); return(new SubscriberToken <TPayload>(this, null, subscription.Id)); } topics = Topics.Canonicalize(topics); _topicMap.TryAdd(subscription.Id, topics); foreach (var topic in topics) { var key = GetKey <TPayload>(topic); AddSubscriptionByKey(_topicChannels, subscription, key); } return(new SubscriberToken <TPayload>(this, topics, subscription.Id)); }
/// <summary> /// Create an envelope for a single topic with the given fields set as immutable data /// </summary> /// <typeparam name="TPayload"></typeparam> /// <param name="factory"></param> /// <param name="topic"></param> /// <param name="payload"></param> /// <param name="metadata"></param> /// <returns></returns> public static Envelope <TPayload> Create <TPayload>(this IEnvelopeFactory factory, string topic, TPayload payload, IReadOnlyDictionary <string, string> metadata = null) { var topics = Topics.Canonicalize(topic); return(factory.Create(topics, payload, metadata)); }
public IFilterRouteBuilderWhen <T> FromTopic(string topic) { InTopics = Topics.Canonicalize(topic); return(this); }
public IFilterRouteBuilderWhen <T> FromTopics(IEnumerable <string> topics) { InTopics = Topics.Canonicalize(topics); return(this); }
public IFilterRouteBuilderWhen <T> FromTopics(params string[] topics) { InTopics = Topics.Canonicalize(topics); return(this); }