Пример #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MessageGateway"/> class.
 /// </summary>
 /// <param name="logger">The logger.</param>
 public MessageGateway(ILog logger)
 {
     this.Logger       = logger;
     Configuration     = RMQMessagingGatewayConfigurationSection.GetConfiguration();
     connectionFactory = new ConnectionFactory {
         Uri = Configuration.AMPQUri.Uri.ToString()
     };
 }
Пример #2
0
        public MessageGateway(ILog logger)
        {
            this.Logger   = logger;
            Configuration = RMQMessagingGatewayConfigurationSection.GetConfiguration();

            var connectionPolicyFactory = new ConnectionPolicyFactory(logger);

            retryPolicy          = connectionPolicyFactory.RetryPolicy;
            circuitBreakerPolicy = connectionPolicyFactory.CircuitBreakerPolicy;

            connectionFactory = new ConnectionFactory {
                Uri = Configuration.AMPQUri.Uri.ToString(), RequestedHeartbeat = 30
            };
        }
Пример #3
0
        public TestRMQListener(string channelName)
        {
            _channelName = channelName;
            var configuration = RMQMessagingGatewayConfigurationSection.GetConfiguration();

            _connectionFactory = new ConnectionFactory {
                Uri = configuration.AMPQUri.Uri.ToString()
            };
            _connection = _connectionFactory.CreateConnection();
            _channel    = _connection.CreateModel();
            _channel.DeclareExchangeForConfiguration(configuration);
            _channel.QueueDeclare(_channelName, false, false, false, null);
            _channel.QueueBind(_channelName, configuration.Exchange.Name, _channelName);
        }
        public TestRMQListener(string channelName)
        {
            this.channelName = channelName;
            var configuration = RMQMessagingGatewayConfigurationSection.GetConfiguration();

            connectionFactory = new ConnectionFactory {
                Uri = configuration.AMPQUri.Uri.ToString()
            };
            connection = connectionFactory.CreateConnection();
            channel    = connection.CreateModel();
            channel.ExchangeDeclare(configuration.Exchange.Name, ExchangeType.Direct, false);
            channel.QueueDeclare(this.channelName, false, false, false, null);
            channel.QueueBind(this.channelName, configuration.Exchange.Name, this.channelName);
        }
Пример #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MessageGateway"/> class.
        /// Use if you need to inject a test logger
        /// </summary>
        /// <param name="logger">The logger.</param>
        public MessageGateway(ILog logger)
        {
            Logger        = logger;
            Configuration = RMQMessagingGatewayConfigurationSection.GetConfiguration();

            var connectionPolicyFactory = new ConnectionPolicyFactory(logger);

            _retryPolicy          = connectionPolicyFactory.RetryPolicy;
            _circuitBreakerPolicy = connectionPolicyFactory.CircuitBreakerPolicy;

            _connectionFactory = new ConnectionFactory {
                Uri = Configuration.AMPQUri.Uri.ToString(), RequestedHeartbeat = 30
            };

            DelaySupported = (this is IAmAMessageGatewaySupportingDelay) && Configuration.Exchange.SupportDelay;
        }
Пример #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectionPolicyFactory"/> class. 
        /// Use if you need to inject a test logger
        /// </summary>
        /// <param name="logger">The logger.</param>
        public ConnectionPolicyFactory(ILog logger)
        {
            _logger = logger;

            var configuration = RMQMessagingGatewayConfigurationSection.GetConfiguration();
            int retries = configuration.AMPQUri.ConnectionRetryCount;
            int retryWaitInMilliseconds = configuration.AMPQUri.RetryWaitInMilliseconds;
            int circuitBreakerTimeout = configuration.AMPQUri.CircuitBreakTimeInMilliseconds;

            RetryPolicy = Policy.Handle<BrokerUnreachableException>()
                .Or<Exception>()
                .WaitAndRetry(
                    retries,
                    retryAttempt => TimeSpan.FromMilliseconds(retryWaitInMilliseconds * Math.Pow(2, retryAttempt)),
                    (exception, timeSpan, context) =>
                    {
                        if (exception is BrokerUnreachableException)
                        {
                            _logger.WarnException(
                                "RMQMessagingGateway: BrokerUnreachableException error on connecting to queue {0} exchange {1} on connection {2}. Will retry {3} times",
                                exception,
                                context["queueName"],
                                configuration.Exchange.Name,
                                configuration.AMPQUri.GetSanitizedUri(),
                                retries);
                        }
                        else
                        {
                            logger.WarnException(
                                "RMQMessagingGateway: Exception on connection to queue {0} via exchange {1} on connection {2}",
                                exception,
                                context["queueName"],
                                configuration.Exchange.Name,
                                configuration.AMPQUri.GetSanitizedUri());
                            throw exception;
                        }
                    });

            CircuitBreakerPolicy = Policy.Handle<BrokerUnreachableException>().CircuitBreaker(1, TimeSpan.FromMilliseconds(circuitBreakerTimeout));
        }
Пример #7
0
 protected MessageGateway(ILog logger, string connectionName) : this(logger, RMQMessagingGatewayConfigurationSection.GetConfiguration(connectionName))
 {
 }
Пример #8
0
 protected MessageGateway(string connectionName)
     : this(LogProvider.For <MessageGateway>(), RMQMessagingGatewayConfigurationSection.GetConfiguration(connectionName))
 {
 }
Пример #9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MessageGateway"/> class.
 /// Use if you need to inject a test logger
 /// </summary>
 /// <param name="logger">The logger.</param>
 public MessageGateway(ILog logger) : this(logger, RMQMessagingGatewayConfigurationSection.GetConfiguration())
 {
 }
Пример #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ConnectionPolicyFactory"/> class.
 /// </summary>
 /// <param name="logger">The logger.</param>
 public ConnectionPolicyFactory()
     : this(LogProvider.For <ConnectionPolicyFactory>(), RMQMessagingGatewayConfigurationSection.GetConfiguration())
 {
 }
Пример #11
0
 public TestRMQListener(string channelName, string connectionName) : this(channelName, RMQMessagingGatewayConfigurationSection.GetConfiguration(connectionName))
 {
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ConnectionPolicyFactory"/> class.
 /// </summary>
 /// <param name="logger">The logger.</param>
 public ConnectionPolicyFactory()
     : this(LogProvider.GetCurrentClassLogger(), RMQMessagingGatewayConfigurationSection.GetConfiguration())
 {
 }
Пример #13
0
 protected MessageGateway(string connectionName)
     : this(LogProvider.GetCurrentClassLogger(), RMQMessagingGatewayConfigurationSection.GetConfiguration(connectionName))
 {
 }