Exemple #1
0
        /// <summary>
        /// Подписаться на очередь сообщений.
        /// </summary>
        /// <param name="securityToken">Маркер безопасности.</param>
        /// <param name="subscription">Информация о подписке.</param>
        public void Subscribe(string securityToken, IntegrationBusSubscription subscription)
        {
            // Проверка информации о подписке

            _securityTokenValidator.Validate(securityToken);
            _subscriptionValidator.ValidateWithAddress(subscription);

            // Получение метода подписки на очередь сообщений

            Action <IntegrationBusSubscription> subscriber;

            var exchangeType = subscription.ExchangeType.Trim().ToLower();

            if (_subscribers.TryGetValue(exchangeType, out subscriber) == false)
            {
                throw new NotSupportedException(string.Format(Resources.SpecifiedExchangeTypeIsNotSupported, subscription.ExchangeType));
            }

            // Осуществление подписки на очередь сообщений
            subscriber(subscription);

            // Сохранение информации о подписке в хранилище
            _subscriptionStorage.AddSubscription(subscription);

            // Запуск прослушивания очереди сообщений
            _queueListener.StartListen(subscription.QueueName);
        }
Exemple #2
0
        /// <summary>
        /// Удалить подписку на очередь сообщений.
        /// </summary>
        /// <param name="securityToken">Маркер безопасности.</param>
        /// <param name="subscription">Информация о подписке.</param>
        public void Unsubscribe(string securityToken, IntegrationBusSubscription subscription)
        {
            // Проверка информации о подписке

            _securityTokenValidator.Validate(securityToken);
            _subscriptionValidator.Validate(subscription);

            // Получение метода удаления подписки на очередь сообщений

            Action <IntegrationBusSubscription> unsubscriber;

            var exchangeType = subscription.ExchangeType.Trim().ToLower();

            if (_unsubscribers.TryGetValue(exchangeType, out unsubscriber) == false)
            {
                throw new NotSupportedException(string.Format(Resources.SpecifiedExchangeTypeIsNotSupported, subscription.ExchangeType));
            }

            // Остановка прослушивания очереди сообщений
            _queueListener.StopListen(subscription.QueueName);

            // Удаление информации о подписке в хранилище
            _subscriptionStorage.RemoveSubscription(subscription.ConsumerId);

            // Удаление подписки на очередь сообщений
            unsubscriber(subscription);
        }
Exemple #3
0
 private static Action <IQueueConfig> QueueConfig(IntegrationBusSubscription subscription)
 {
     return(config => config.ConsumerId(subscription.ConsumerId)
            .AcknowledgePolicy(new OnlyOnSuccessHandlingAcknowledgePolicy())
            .WorkerThreadCount(1)
            .Durable());
 }
        private static void VerifySubscription(IntegrationBusSubscription subscription)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            if (string.IsNullOrWhiteSpace(subscription.ConsumerId))
            {
                throw new ArgumentException(Resources.ConsumerIdCannotBeNullOrWhiteSpace, "subscription");
            }

            if (string.IsNullOrWhiteSpace(subscription.ExchangeType))
            {
                throw new ArgumentException(Resources.ExchangeTypeCannotBeNullOrWhiteSpace, "subscription");
            }

            if (string.IsNullOrWhiteSpace(subscription.ExchangeName))
            {
                throw new ArgumentException(Resources.ExchangeNameCannotBeNullOrWhiteSpace, "subscription");
            }

            if (string.IsNullOrWhiteSpace(subscription.QueueName))
            {
                throw new ArgumentException(Resources.QueueNameCannotBeNullOrWhiteSpace, "subscription");
            }

            if (string.IsNullOrWhiteSpace(subscription.Address))
            {
                throw new ArgumentException(Resources.AddressCannotBeNullOrWhiteSpace, "subscription");
            }

            Uri address;

            if (Uri.TryCreate(subscription.Address, UriKind.Absolute, out address) &&
                (address.Scheme == Uri.UriSchemeHttp || address.Scheme == Uri.UriSchemeHttps))
            {
                throw new ArgumentException(Resources.AddressShouldBeAbsoluteUriToHttpOrHttpsService, "subscription");
            }
        }
Exemple #5
0
 private void UnsubscribeHeaders(IntegrationBusSubscription subscription)
 {
     _queueManager
     .GetExchangeHeaders(subscription.ExchangeName)
     .Unsubscribe(subscription.QueueName);
 }
Exemple #6
0
 private void SubscribeHeaders(IntegrationBusSubscription subscription)
 {
     _queueManager
     .GetExchangeHeaders(subscription.ExchangeName)
     .Subscribe(subscription.QueueName, () => _queueConsumer, subscription.RoutingHeaders, QueueConfig(subscription));
 }
Exemple #7
0
 private void SubscribeDirect(IntegrationBusSubscription subscription)
 {
     _queueManager
     .GetExchangeDirect(subscription.ExchangeName)
     .Subscribe(subscription.QueueName, () => _queueConsumer, subscription.RoutingKey, QueueConfig(subscription));
 }
Exemple #8
0
 private void SubscribeFanout(IntegrationBusSubscription subscription)
 {
     _queueManager
     .GetExchangeFanout(subscription.ExchangeName)
     .Subscribe(subscription.QueueName, () => _queueConsumer, QueueConfig(subscription));
 }
 /// <summary>
 /// Осуществить проверку информации о подписке, включая проверку доступности сервиса подписчика для отправки сообщений, и бросить исключение, если информация некорректна.
 /// </summary>
 /// <param name="subscription">Информация о подписке.</param>
 public void ValidateWithAddress(IntegrationBusSubscription subscription)
 {
     VerifySubscription(subscription);
     VerifySubscriptionAddress(subscription.Address);
 }
 /// <summary>
 /// Осуществить проверку информации о подписке и бросить исключение, если информация некорректна.
 /// </summary>
 /// <param name="subscription">Информация о подписке.</param>
 public void Validate(IntegrationBusSubscription subscription)
 {
     VerifySubscription(subscription);
 }