2. Event编写
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:该部分只介绍使用,高级部分在后面文档说明。
2. Event编写的更多相关文章
- 1.Actor编写-ESGrain与ESRepGrain
ESGrain 生命周期 Ray中ESGrain继承自Grain扩展了Grain的生命周期.Grain的生命周期参见文档附录:1-Grain生命周期-译注.md ESGrain重写了Grain的OnA ...
- Ray-基础部分目录
基础部分: 引言 Actor编写-ESGrain与ESRepGrain 消息发布器与消息存储器 Event编写 Handler之CoreHandler编写 Handler之ToReadHandler编 ...
- 编写高质量代码改善C#程序的157个建议——建议40:使用event关键字为委托施加保护
建议40:使用event关键字为委托施加保护 在建议中我们实现了一个具有通知功能的文件传输类,如下: class FileUploader { public delegate void FileUpl ...
- 如何利用ETW(Event Tracing for Windows)记录日志
ETW是Event Tracing for Windows的简称,它是Windows提供的原生的事件跟踪日志系统.由于采用内核(Kernel)层面的缓冲和日志记录机制,所以ETW提供了一种非常高效的事 ...
- iOS 触摸事件与UIResponder(内容根据iOS编程编写)
触摸事件 因为 UIView 是 UIResponder 的子类,所以覆盖以下四个方法就可以处理四种不同的触摸事件: 1. 一根手指或多根手指触摸屏幕 - (void)touchesBegan:(N ...
- [转载]C#委托和事件(Delegate、Event、EventHandler、EventArgs)
原文链接:http://blog.csdn.net/zwj7612356/article/details/8272520 14.1.委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托.委 ...
- C#编写window服务,一步一步(1)
Window服务是啥,这里就不废话了,如何用在哪里用也不废话了,这里我这篇文章只是详述了我在vs2012中创建window服务的经过,希望对你有所帮助. 另外:我在编写服务过程中参考了 Profess ...
- 关于编写性能高效的javascript事件的技术
如何能做出高效的web前端程序是我每次做前端开发都会不自觉去考虑的问题.几年前雅虎里牛逼的前端工程师们出了一本关于提升web前端性能的书籍,轰动了整个web开发技术界,让神秘的web前端优化问题成为了 ...
- Christmas Trees, Promises和Event Emitters
今天有同事问我下面这段代码是什么意思: var MyClass = function() { events.EventEmitter.call(this); // 这行是什么意思? }; util.i ...
随机推荐
- lesson - 11 课程笔记
一.sed 作用: sed 是一种流编辑器,它是文本处理中非常重要的工具, 能够完美的配合正则表达式使用.处理时,把当前处理的行存储在临时缓冲区中, 称为“模式空间(pattern space)”, ...
- Siamese Network理解
提起siamese network一般都会引用这两篇文章: <Learning a similarity metric discriminatively, with application to ...
- 推荐系统 LFM 算法的简单理解,感觉比大部分网上抄来抄去的文章好理解
本文主要是基于<推荐系统实践>这本书的读书笔记,还没有实践这些算法. LFM算法是属于隐含语义模型的算法,不同于基于邻域的推荐算法. 隐含语义模型有:LFM,LDA,Topic Model ...
- jquery append 动态添加的元素绑定事件on
用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...
- Keep Mind Working
想找一个这样的地方,可以让脑袋持续运转着.不会像游戏一样让人着迷,不会像有色电视一样让人想错地方,也不会像工作一样充满太多严密.就是让脑袋继续转着,适意地思考些什么. 之前会跑去游戏里,至少没有太污. ...
- C#语言和SQL Server第八章笔记
一: ...
- Windows同时安装Python2、Python3兼容运行
Python2.Python3可以同时安装在windows上,关键是如何有选择的运行Python2还是Python3. 指定运行版本 如果你有一个Python文件叫 hello.py,那么你可以这 ...
- Linux sftp 另外一台机器时,出现:receive message is too long
因为在linux登录时,首先会运行的三个文件是: /etc/profile,/home/用户名/.bashrc,其次是/home/用户名/.bash_profile,出现这个问题的原因是因为在sftp ...
- 【Manacher算法】求最长回文串的优秀算法
先贴一下代码~ //by 减维 #include<cstdio> #include<iostream> #include<cstring> #include< ...
- Kylin与CDH兼容性剖析
1. 概述 Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区.它能 ...