CreateSubscriptionDescription() public static method

public static CreateSubscriptionDescription ( string topicPath, string subscriptionName ) : SubscriptionDescription
topicPath string
subscriptionName string
return SubscriptionDescription
Example #1
0
        public static async Task <SubscriptionDescription> CreateTopicSubscriptionSafeAsync(this NamespaceManager namespaceManager, string subscriptionName,
                                                                                            string topicPath, string queuePath, QueueDescription queueDescription)
        {
            var description = Defaults.CreateSubscriptionDescription(topicPath, subscriptionName, queueDescription, queuePath);

            var create = true;
            SubscriptionDescription subscriptionDescription = null;

            try
            {
                subscriptionDescription = await namespaceManager.GetSubscriptionAsync(topicPath, subscriptionName).ConfigureAwait(false);

                if (queuePath.Equals(subscriptionDescription.ForwardTo))
                {
                    if (_log.IsDebugEnabled)
                    {
                        _log.DebugFormat("Updating subscription: {0} ({1} -> {2})", subscriptionDescription.Name, subscriptionDescription.TopicPath,
                                         subscriptionDescription.ForwardTo);
                    }

                    await namespaceManager.UpdateSubscriptionAsync(description).ConfigureAwait(false);

                    create = false;
                }
                else
                {
                    if (_log.IsWarnEnabled)
                    {
                        _log.WarnFormat("Removing invalid subscription: {0} ({1} -> {2})", subscriptionDescription.Name, subscriptionDescription.TopicPath,
                                        subscriptionDescription.ForwardTo);
                    }

                    await namespaceManager.DeleteSubscriptionAsync(topicPath, subscriptionName).ConfigureAwait(false);
                }
            }
            catch (MessagingEntityNotFoundException)
            {
            }

            if (create)
            {
                var created = false;
                try
                {
                    if (_log.IsDebugEnabled)
                    {
                        _log.DebugFormat("Creating subscription {0} -> {1}", topicPath, queuePath);
                    }


                    subscriptionDescription = await namespaceManager.CreateSubscriptionAsync(description).ConfigureAwait(false);

                    created = true;
                }
                catch (MessagingEntityAlreadyExistsException)
                {
                }
                catch (MessagingException mex)
                {
                    if (mex.Message.Contains("(409)"))
                    {
                    }
                    else
                    {
                        throw;
                    }
                }

                if (!created)
                {
                    subscriptionDescription = await namespaceManager.GetSubscriptionAsync(topicPath, subscriptionName).ConfigureAwait(false);
                }
            }

            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Subscription: {0} ({1} -> {2})", subscriptionDescription.Name, subscriptionDescription.TopicPath,
                                 subscriptionDescription.ForwardTo);
            }

            return(subscriptionDescription);
        }