Exemplo n.º 1
0
        /// <summary>
        /// Poll the persistence store for workflows ready to run.
        /// Poll the persistence store for stashed unpublished events
        /// </summary>
        private void PollRunnables(object target)
        {
            try
            {
                if (LockProvider.AcquireLock("poll runnables").Result)
                {
                    try
                    {
                        Logger.LogInformation("Polling for runnable workflows");
                        IPersistenceProvider persistenceStore = _serviceProvider.GetService <IPersistenceProvider>();
                        var runnables = persistenceStore.GetRunnableInstances().Result;
                        foreach (var item in runnables)
                        {
                            Logger.LogDebug("Got runnable instance {0}", item);
                            QueueProvider.QueueForProcessing(item);
                        }
                    }
                    finally
                    {
                        LockProvider.ReleaseLock("poll runnables").Wait();
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.LogError(ex.Message);
            }

            try
            {
                if (LockProvider.AcquireLock("unpublished events").Result)
                {
                    try
                    {
                        Logger.LogInformation("Polling for unpublished events");
                        IPersistenceProvider persistenceStore = _serviceProvider.GetService <IPersistenceProvider>();
                        var events = persistenceStore.GetUnpublishedEvents().Result.ToList();
                        foreach (var item in events)
                        {
                            Logger.LogDebug("Got unpublished event {0} {1}", item.EventName, item.EventKey);
                            QueueProvider.QueueForPublishing(item).Wait();
                            persistenceStore.RemoveUnpublishedEvent(item.Id).Wait();
                        }
                    }
                    finally
                    {
                        LockProvider.ReleaseLock("unpublished events").Wait();
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.LogError(ex.Message);
            }
        }