public AzureReceiveState(AzureBusReceiverState data, MethodInfo methodInfo,
     IServiceBusSerializer serializer, IBrokeredMessage message) {
     Guard.ArgumentNotNull(data, "data");
     Guard.ArgumentNotNull(methodInfo, "methodInfo");
     Guard.ArgumentNotNull(serializer, "serializer");
     Guard.ArgumentNotNull(message, "message");
     this.Data = data;
     this.MethodInfo = methodInfo;
     this.Serializer = serializer;
     this.Message = message;
 }
 public AzureReceiveState(AzureBusReceiverState data, MethodInfo methodInfo,
                          IServiceBusSerializer serializer, IBrokeredMessage message)
 {
     Guard.ArgumentNotNull(data, "data");
     Guard.ArgumentNotNull(methodInfo, "methodInfo");
     Guard.ArgumentNotNull(serializer, "serializer");
     Guard.ArgumentNotNull(message, "message");
     this.Data       = data;
     this.MethodInfo = methodInfo;
     this.Serializer = serializer;
     this.Message    = message;
 }
        void Configure(ServiceBusEnpointData value) {

            SubscriptionDescription desc = null;

            bool createNew = false;

            try {
                logger.Info("CreateSubscription Try {0} ", value.SubscriptionNameDebug);
                // First, let's see if a item with the specified name already exists.
                verifyRetryPolicy.ExecuteAction(() => {
                    desc = configurationFactory.NamespaceManager.GetSubscription(topic.Path, value.SubscriptionName);
                });

                createNew = (desc == null);
            }
            catch (MessagingEntityNotFoundException) {
                logger.Info("CreateSubscription Does Not Exist {0} ", value.SubscriptionNameDebug);
                // Looks like the item does not exist. We should create a new one.
                createNew = true;
            }

            // If a item with the specified name doesn't exist, it will be auto-created.
            if (createNew) {
                var descriptionToCreate = new SubscriptionDescription(topic.Path, value.SubscriptionName);

                if (value.AttributeData != null) {
                    var attr = value.AttributeData;
                    if (attr.DefaultMessageTimeToLiveSet()) {
                        descriptionToCreate.DefaultMessageTimeToLive = new TimeSpan(0, 0, attr.DefaultMessageTimeToLive);
                    }
                    descriptionToCreate.EnableBatchedOperations = attr.EnableBatchedOperations;
                    descriptionToCreate.EnableDeadLetteringOnMessageExpiration = attr.EnableDeadLetteringOnMessageExpiration;
                    if (attr.LockDurationSet()) {
                        descriptionToCreate.LockDuration = new TimeSpan(0, 0, attr.LockDuration);
                    }
                }

                try {
                    logger.Info("CreateSubscription {0} ", value.SubscriptionNameDebug);
                    var filter = new SqlFilter(string.Format(AzureSenderReceiverBase.TYPE_HEADER_NAME + " = '{0}'", value.MessageType.FullName.Replace('.', '_')));
                    retryPolicy.ExecuteAction(() => {
                        desc = configurationFactory.NamespaceManager.CreateSubscription(descriptionToCreate, filter);
                    });
                }
                catch (MessagingEntityAlreadyExistsException) {
                    logger.Info("CreateSubscription {0} ", value.SubscriptionNameDebug);
                    // A item under the same name was already created by someone else, perhaps by another instance. Let's just use it.
                    retryPolicy.ExecuteAction(() => {
                        desc = configurationFactory.NamespaceManager.GetSubscription(topic.Path, value.SubscriptionName);
                    });
                }
            }

            ISubscriptionClient subscriptionClient = null;
            var rm = ReceiveMode.PeekLock;

            if (value.AttributeData != null) {
                rm = value.AttributeData.ReceiveMode;
            }

            retryPolicy.ExecuteAction(() => {
                subscriptionClient = configurationFactory.MessageFactory.CreateSubscriptionClient(topic.Path, value.SubscriptionName, rm);
            });

            if (value.AttributeData != null && value.AttributeData.PrefetchCountSet()) {
                subscriptionClient.PrefetchCount = value.AttributeData.PrefetchCount;
            }

            if (data == null) {
                data = new AzureBusReceiverState() {
                    EndPointData = value,
                    Client = subscriptionClient
                };
            }
            else {
                //we need to clean up the deleted subscription
                var oldClient = this.data.Client;

                data.Client = subscriptionClient;

                //now lets dispose the client.
                ExtensionMethods.ExecuteAndReturn(() => {
                    if (oldClient != null) {
                        oldClient.Close();
                    }
                });
            }
        }
示例#4
0
        void Configure(ServiceBusEnpointData value)
        {
            SubscriptionDescription desc = null;

            bool createNew = false;

            try {
                logger.Info("CreateSubscription Try {0} ", value.SubscriptionNameDebug);
                // First, let's see if a item with the specified name already exists.
                verifyRetryPolicy.ExecuteAction(() => {
                    desc = configurationFactory.NamespaceManager.GetSubscription(topic.Path, value.SubscriptionName);
                });

                createNew = (desc == null);
            }
            catch (MessagingEntityNotFoundException) {
                logger.Info("CreateSubscription Does Not Exist {0} ", value.SubscriptionNameDebug);
                // Looks like the item does not exist. We should create a new one.
                createNew = true;
            }

            // If a item with the specified name doesn't exist, it will be auto-created.
            if (createNew)
            {
                var descriptionToCreate = new SubscriptionDescription(topic.Path, value.SubscriptionName);

                if (value.AttributeData != null)
                {
                    var attr = value.AttributeData;
                    if (attr.DefaultMessageTimeToLiveSet())
                    {
                        descriptionToCreate.DefaultMessageTimeToLive = new TimeSpan(0, 0, attr.DefaultMessageTimeToLive);
                    }
                    descriptionToCreate.EnableBatchedOperations = attr.EnableBatchedOperations;
                    descriptionToCreate.EnableDeadLetteringOnMessageExpiration = attr.EnableDeadLetteringOnMessageExpiration;
                    if (attr.LockDurationSet())
                    {
                        descriptionToCreate.LockDuration = new TimeSpan(0, 0, attr.LockDuration);
                    }
                }

                try {
                    logger.Info("CreateSubscription {0} ", value.SubscriptionNameDebug);
                    var filter = new SqlFilter(string.Format(AzureSenderReceiverBase.TYPE_HEADER_NAME + " = '{0}'", value.MessageType.FullName.Replace('.', '_')));
                    retryPolicy.ExecuteAction(() => {
                        desc = configurationFactory.NamespaceManager.CreateSubscription(descriptionToCreate, filter);
                    });
                }
                catch (MessagingEntityAlreadyExistsException) {
                    logger.Info("CreateSubscription {0} ", value.SubscriptionNameDebug);
                    // A item under the same name was already created by someone else, perhaps by another instance. Let's just use it.
                    retryPolicy.ExecuteAction(() => {
                        desc = configurationFactory.NamespaceManager.GetSubscription(topic.Path, value.SubscriptionName);
                    });
                }
            }

            ISubscriptionClient subscriptionClient = null;
            var rm = ReceiveMode.PeekLock;

            if (value.AttributeData != null)
            {
                rm = value.AttributeData.ReceiveMode;
            }

            retryPolicy.ExecuteAction(() => {
                subscriptionClient = configurationFactory.MessageFactory.CreateSubscriptionClient(topic.Path, value.SubscriptionName, rm);
            });

            if (value.AttributeData != null && value.AttributeData.PrefetchCountSet())
            {
                subscriptionClient.PrefetchCount = value.AttributeData.PrefetchCount;
            }

            if (data == null)
            {
                data = new AzureBusReceiverState()
                {
                    EndPointData = value,
                    Client       = subscriptionClient
                };
            }
            else
            {
                //we need to clean up the deleted subscription
                var oldClient = data.Client;

                data.Client = subscriptionClient;

                //now lets dispose the client.
                ExtensionMethods.ExecuteAndReturn(() => {
                    if (oldClient != null)
                    {
                        if (!oldClient.IsClosed)
                        {
                            oldClient.Close();
                        }
                    }
                });
            }
        }