public static async Task <SubscriptionClient> GetSubscriptionClient(TopicSetting topicDetail) { SubscriptionClient subscriptionClient = null; try { var key = topicDetail.TopicName + Constants.COLON + topicDetail.SubscriptionName; if (!_messagingFactories.ContainsKey(key)) { key = topicDetail.TopicName + Constants.COLON + topicDetail.SubscriptionName; if (!_messagingFactories.ContainsKey(key)) { var messagingFactory = GetMessageFactory(); if (!await _ns.SubscriptionExistsAsync(topicDetail.TopicName, topicDetail.SubscriptionName)) // TODO : { SubscriptionDescription subscriptionDescription = new SubscriptionDescription(topicDetail.TopicName, topicDetail.SubscriptionName); subscriptionDescription.EnableBatchedOperations = true; await _ns.CreateSubscriptionAsync(subscriptionDescription); } subscriptionClient = messagingFactory.CreateSubscriptionClient(topicDetail.TopicName, topicDetail.SubscriptionName, topicDetail.RecieveMode); subscriptionClient.PrefetchCount = topicDetail.PrefetchCount; _messagingFactories[key] = Tuple.Create <MessagingFactory, SubscriptionClient>(messagingFactory, subscriptionClient); LogManager.GetCurrentClassLogger().Info("ServiceBusManager created SubscriptionClient:{@SubscriptionName} for TopicName:{@TopicName} in RecieveMode:{@ReceiveMode} with key:{@Key}", topicDetail.SubscriptionName, topicDetail.TopicName, topicDetail.RecieveMode, key); } } subscriptionClient = _messagingFactories[key].Item2; //Logger.GetInstance().Information("Subscriptionclient return for key:{@Key}", key); } catch (Exception ex) { LogManager.GetCurrentClassLogger().Error(ex, "ServiceBusManager error creating SubscriptionClient:{@SubscriptionName} for TopicName:{@TopicName} in ReceiveMode:{@ReceiveMode}", topicDetail.SubscriptionName, topicDetail.TopicName, topicDetail.RecieveMode); } return(subscriptionClient); }
private static async Task <List <Event> > DownloadEvent(TopicSetting topic) { ConcurrentBag <Event> events = new ConcurrentBag <Event>(); IEnumerable <BrokeredMessage> messages = null; var subClient = await ServiceBusManager.GetSubscriptionClient(topic); messages = await subClient.ReceiveBatchAsync(topic.MessageCount); Parallel.ForEach(messages, message => { var temp = message.GetBody <Event>(); events.Add(temp); }); foreach (var item in messages) { await item.CompleteAsync(); } return(events.ToList()); }
public void AddTopic(string topic, TopicSetting setting) { var topics = new Dictionary <string, string>(); topics[topic] = string.Empty; if (setting.Subtopics != null) { foreach (var subtopic in setting.Subtopics) { topics[$"{topic}.{subtopic.Key}"] = subtopic.Value; } } RemoveTopics(topics.Keys.ToArray()); var apiSubscription = apiObserverService.ObserveApi(setting.ApiAddress, setting.Controller, setting.Period, setting.Member); foreach (var t in topics) { AddTopicSubscription(apiSubscription, t.Key, t.Value); } }
public void Start(string topic, [FromBody] TopicSetting topicSetting) { dispatcherService.AddTopic(topic, topicSetting); }