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(); } }); } }
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(); } } }); } }