Event作用:
- 存储事件数据。
-
IEventBase K:是Actor的StateId的类型,可以是long、可以是string,Ray一般使用OGuid生成的字符串作为主键。
-
编写Event继承IEventBase接口,Base部分如下:
public string Id { get; set; } public uint Version { get; set; } public string CommandId { get; set; } public DateTime Timestamp { get; set; } public string StateId { get; set; } public string TypeCode => this.GetType().FullName;
Id: - 含义:当前Event的Id。 - 作用:标识当前Event。 - 备注:不赋值时,Ray会自动赋值。 Version: - 含义:Event的版本戳。 - 作用:防止事件乱序。 - 备注:Ray会自动赋值。 CommandId: - 含义:当前Event的CommandId。 - 作用:一个请求(Command)可能会引发多个Event,多个Event之间拥有相同的CommandId,多个Event通过CommandId建立联系。 - 备注:不需要时默认为null。 Timestamp: - 含义:当前Event的时间戳。 - 作用:记录当前Event的发生时间,时间为UTC时间。 - 备注:不赋值时,Ray会自动赋值。 StateId: - 含义:Actor的Id。 - 作用:记录引发事件的Actor的Id。 - 备注:Ray会自动赋值。 TypeCode: - 含义:事件的类型。 - 作用:事件存储时会存储为二进制,重放时用于反序列化为对应的类型。 - 备注:public string TypeCode => this.GetType().FullName。
-
特性说明
- ProtoContract:Ray默认使用ProtoBuf对Event序列化。
- Immutable:Actor之间使用的时候。
- Obsolete:事件过期时标记。
-
无参构造函数
- 作用:反序列化时用。
- 备注:必须写。
-
自定义属性与有参构造函数
- 自定义属性:Event中用到的参数。
- 有参构造函数:用于自定义属性的初始化。
-
事件过期
- 弃用事件标记为Obsolete。
- 新事件在业务逻辑上做兼容性处理。
API:该部分只介绍使用,高级部分在后面文档说明。