public FailedHandleException(string exception, FailedEventType kind, string handler, EventMessage msg) : base(exception)
        {
            if (msg == null)
            {
                throw new ArgumentNullException("msg");
            }

            FailedMessage = new FailedMessage(kind, handler, msg);
        }
 /// <summary>
 /// read from database
 /// </summary>
 /// <param name="id"></param>
 /// <param name="kind"></param>
 /// <param name="referId"></param>
 /// <param name="json"></param>
 /// <param name="occurredOn"></param>
 /// <param name="retryTimes"></param>
 /// <param name="handler"></param>
 public FailedMessage(string id, FailedEventType kind, string referId, string json,
                      DateTime occurredOn, int retryTimes, string handler)
 {
     Id          = id;
     Kind        = kind;
     ReferenceId = referId;
     Json        = json;
     OccurredOn  = occurredOn;
     RetryTimes  = retryTimes;
     Handler     = handler;
 }
        /// <summary>
        /// Create a new Failed message instance
        /// </summary>
        /// <param name="kind"></param>
        /// <param name="handler"></param>
        /// <param name="msg"></param>
        public FailedMessage(FailedEventType kind, string handler, EventMessage msg)
        {
            if (msg == null)
            {
                throw new ArgumentNullException("msg");
            }

            Id          = Guid.NewGuid().ToString();
            Kind        = kind;
            Handler     = handler;
            ReferenceId = msg.Data.Id;
            Data        = new ArgumentItem(msg.Id, new ArgumentItem.ArgumentValuePair("message", msg));
            OccurredOn  = DateTime.UtcNow;
            RetryTimes  = 0;
        }