public abstract class Event { public Event() { Id = Guid.NewGuid(); CreationTime = DateTime.UtcNow; } public Guid Id { get; set; } public DateTime CreationTime { get; set; } } public class PublishEvent : Event { public PublishEvent(Event @event) { Id = @event.Id; CreationTime = @event.CreationTime; Type = @event.GetType().FullName; Data = JsonConvert.SerializeObject(@event); Status = PublishEventStatus.NotPublished; } public String Type { get; set; } public String Data { get; set; } public PublishEventStatus Status { get; set; } } public enum PublishEventStatus { NotPublished = 0, Published = 1, PublishedFailed = 2 }
public abstract class Event
{
public Event()
Id = Guid.NewGuid();
CreationTime = DateTime.UtcNow;
}
public Guid Id { get; set; }
public DateTime CreationTime { get; set; }
public class PublishEvent : Event
public PublishEvent(Event @event)
Id = @event.Id;
CreationTime = @event.CreationTime;
Type = @event.GetType().FullName;
Data = JsonConvert.SerializeObject(@event);
Status = PublishEventStatus.NotPublished;
public String Type { get; set; }
public String Data { get; set; }
public PublishEventStatus Status { get; set; }
public enum PublishEventStatus
NotPublished = 0,
Published = 1,
PublishedFailed = 2
public class SubscribeEvent { public SubscribeEvent(Event @event, IEventHandler handler) { EventId = @event.Id; EventCreationTime = @event.CreationTime; EventType = @event.GetType().FullName; EventData = JsonConvert.SerializeObject(@event); HandlerType = handler.GetType().FullName; HandlingStatus = HandlingStatus.HandleSucceeded; HandlingTime = DateTime.Now; } public Guid EventId { get; set; } public String EventType { get; set; } public String EventData { get; set; } public DateTime EventCreationTime { get; set; } public String HandlerType { get; set; } public DateTime HandlingTime { get; set; } public HandlingStatus HandlingStatus { get; set; } } public enum HandlingStatus { HandleSucceeded = 0, HandleFailed = 1 }
public class SubscribeEvent
public SubscribeEvent(Event @event, IEventHandler handler)
EventId = @event.Id;
EventCreationTime = @event.CreationTime;
EventType = @event.GetType().FullName;
EventData = JsonConvert.SerializeObject(@event);
HandlerType = handler.GetType().FullName;
HandlingStatus = HandlingStatus.HandleSucceeded;
HandlingTime = DateTime.Now;
public Guid EventId { get; set; }
public String EventType { get; set; }
public String EventData { get; set; }
public DateTime EventCreationTime { get; set; }
public String HandlerType { get; set; }
public DateTime HandlingTime { get; set; }
public HandlingStatus HandlingStatus { get; set; }
public enum HandlingStatus
HandleSucceeded = 0,
HandleFailed = 1
try { BeginTransaction(); // ① //Biz Flow EventRepository.PubilshEvent(@event);// ② CommitTransaction(); } catch(Exception ex){ RollbackTransaction(); throw ex; } EventBus.Publish(@event); // ③ EventResitory.EventPublished(@event.ToString()); // ④
try
BeginTransaction(); // ①
//Biz Flow
EventRepository.PubilshEvent(@event);// ②
CommitTransaction();
catch(Exception ex){
RollbackTransaction();
throw ex;
EventBus.Publish(@event); // ③
EventResitory.EventPublished(@event.ToString()); // ④
try { BeginTransaction(); //Biz Flow EventRepository.SubscribeEvent(@event , eventHandler); // ⑤ CommitTransaction(); } catch(Exception ex){ RollbackTransaction(); throw ex; }
BeginTransaction();
EventRepository.SubscribeEvent(@event , eventHandler); // ⑤
Install-Package SmartEventBus.RabbitMQImplInstall-Package SmartEventBus.Repository
Install-Package SmartEventBus.RabbitMQImpl
Install-Package SmartEventBus.Repository
SmartSql = Dapper + MyBatis + Cache(Memory | Redis) + ZooKeeper + R/W Splitting + ......
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728