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);
            }
        }
Exemplo n.º 2
0
        public async Task PublishEvent(string eventName, string eventKey, object eventData)
        {
            if (_shutdown)
            {
                throw new Exception("Host is not running");
            }

            Logger.LogDebug("Publishing event {0} {1}", eventName, eventKey);
            var subs = await PersistenceStore.GetSubcriptions(eventName, eventKey);

            foreach (var sub in subs.ToList())
            {
                EventPublication pub = new EventPublication();
                pub.Id         = Guid.NewGuid();
                pub.EventData  = eventData;
                pub.EventKey   = eventKey;
                pub.EventName  = eventName;
                pub.StepId     = sub.StepId;
                pub.WorkflowId = sub.WorkflowId;
                await QueueProvider.QueueForPublishing(pub);

                await PersistenceStore.TerminateSubscription(sub.Id);
            }
        }