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);
        }
示例#2
0
        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());
        }
示例#3
0
        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);
            }
        }
示例#4
0
 public void Start(string topic, [FromBody] TopicSetting topicSetting)
 {
     dispatcherService.AddTopic(topic, topicSetting);
 }