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 } }); }
/// <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); } })); }