Example #1
0
 public PushForwardQueueClient(PushForwardClient client, QueueClient queueClient, QueueInfo queueInfo, PushForwardConfig config)
 {
     QueueInfo    = queueInfo;
     _client      = client;
     _queueClient = queueClient;
     _config      = config;
 }
        public async Task <PushForwardQueueClient> PushQueue(string name, PushForwardConfig config = null)
        {
            LazyInitializer.EnsureInitialized(ref config, () => new PushForwardConfig
            {
                PushType       = PushStyle.Multicast,
                Retries        = 3,
                RetryDelay     = TimeSpan.FromSeconds(60),
                ErrorQueueName = string.Format("{0}_Errors", name)
            });

            QueueClient queueClient = IronMqClient.Queue(name);

            QueueInfo queueInfo = await queueClient.Info();

            bool requiresPushTypeUpdate = QueueInfoHelper.RequiresPushTypeUpdate(queueInfo, config.PushType);

            bool requiresErrorQueueUpdate = QueueInfoHelper.RequiresErrorQueueUpdate(queueInfo, config);

            bool requiresRetryUpdate = QueueInfoHelper.RequiresRetryUpdate(queueInfo, config);

            bool requiresRetryDelayUpdate = QueueInfoHelper.RequiresRetryDelayUpdate(queueInfo, config);

            var update = new QueueInfo();

            bool shouldUpdate = false;

            if (requiresErrorQueueUpdate)
            {
                shouldUpdate      = true;
                update.ErrorQueue = config.ErrorQueueName;
            }

            if (requiresRetryUpdate)
            {
                shouldUpdate   = true;
                update.Retries = config.Retries;
            }

            if (requiresRetryDelayUpdate)
            {
                shouldUpdate        = true;
                update.RetriesDelay = config.RetryDelay.GetValueOrDefault().Seconds;
            }

            if (requiresPushTypeUpdate)
            {
                shouldUpdate = true;
            }

            if (shouldUpdate)
            {
                // You should always specify the PushType when calling Update
                update.PushType = config.GetPushType();

                queueInfo = await queueClient.Update(update);
            }

            return(new PushForwardQueueClient(this, queueClient, queueInfo, config));
        }
Example #3
0
 public static bool RequiresErrorQueueUpdate(QueueInfo queueInfo, PushForwardConfig config)
 {
     if (String.IsNullOrEmpty(config.ErrorQueueName))
     {
         return(false);
     }
     return(!String.Equals(queueInfo.ErrorQueue, config.ErrorQueueName));
 }
Example #4
0
        public static bool RequiresRetryDelayUpdate(QueueInfo queueInfo, PushForwardConfig config)
        {
            if (config.Retries == null)
            {
                return(false);
            }

            return(queueInfo.Retries != config.Retries.Value);
        }
 public async Task <PushForwardQueueClient> PushQueue <T>(PushForwardConfig config = null)
 {
     return(await PushQueue(QueueNameAttribute.GetName <T>(), config));
 }