예제 #1
0
        private void EnqueueFailedQueue(FailedMessage msg)
        {
            var count = Database.QueryScalar(
                "SELECT COUNT(*) FROM failed_queue WHERE refer_id=@refer_id;",
                new Dictionary <string, object> {
                { "@refer_id", msg.ReferenceId }
            });

            // one record exists.
            if (count != null && (long)count > 0)
            {
                return;
            }

            Database.Execute(
                "INSERT INTO failed_queue(id, refer_id, message, create_at, retry_times, kind, handler) VALUES(@id, @refer_id, @message, @create_at, 0, @kind, @handler);",
                new Dictionary <string, object> {
                { "@id", msg.Id },
                { "@refer_id", msg.ReferenceId },
                { "@message", msg.DataToJSON() },
                { "@create_at", msg.OccurredOn },
                { "@kind", (int)msg.Kind },
                { "@handler", msg.Handler }
            });
        }
예제 #2
0
        /// <summary>
        /// Publish failed message into queue.
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public Task PublishAsync(FailedMessage msg)
        {
            return(Task.Run(() => {
                if (msg == null)
                {
                    return;
                }

                try
                {
                    EnqueueFailedQueue(msg);
                }
                catch (Exception ex)
                {
                    Logger.ErrorFormat("PublishAsync error: {@error}.", ex);
                }
            }));
        }