交易处理

2.Utm-模块设计

…衆ロ難τιáo~ 提交于 2020-12-13 00:36:05
2.Utm-模块设计 详细图: Qtm:Qtm是Utm的核心,是一个队列线程模型,提供一个任务队列,可以往其中添加任务,qtm会调用线程池中的线程去依次处理这个队列中的任务,有点类似于java原生的BolkingQueue,为什么不是使用BolkingQueue:相对来说qtm提供了更适应这个需求的封装和为以后预留了更好的扩展的空间。 用户资源的管理:提供了用户生命流程中的各个重要点的切面,让开发者可以很清晰的看到资源的申请和回收,也可以更好的管理自己定义的用户资源。 事件管理器:提供用户事件管理,异常事件管理,等事件,默认实现里面包含了这些事件的简单实现,可以根据需要继承并重写。 CMD处理器:在utm中用户请求、用户登录、用户退出、用户断线都被封装成一个cmd请求(每个用户请求都包含两部分内容:1.cmd(所要请求的处理器名) 2.请求参数)。Utm提供了基本的用户生命流程事件,并处理了其中相关的流程逻辑,我们只需要专注于处理各个事件中的业务逻辑;我们可以根据需要定义自己的cmd处理器。 过滤器:用户请求的过滤器,提供两个实现:1. 直接调用qtm处理用户请求,2. 用户请求过于频繁过滤器(默认) 1.Utm简介 2. Utm 模块设计 3. Utm详细实现-用户生命流程 4. Utm详细实现-用户资源管理 5.Utm线程模型 6. Utm示例-公共部分 7. Utm示例

UTM 用户线程模型

假装没事ソ 提交于 2020-12-12 22:47:06
Utm-简介 Git@OSC: http://git.oschina.net/daemon_c/UTM ( utm相关: http://git.oschina.net/daemon_c/QTM ) UTM-Demo Git@OSC: http://git.oschina.net/daemon_c/UTM-demo (SmartFoxServer,Netty) 在一些金融交易处理、游戏数据处理等逻辑较为复杂的领域中,各个接口可能会交叉使用和修改一些资源数据,这样就很容易导致一些并发的问题,如果对于每个资源都要考虑如何保证其并发安全问题,那么整个分析过程就会变得很复杂,而复杂的逻辑往往容易有所疏漏。 Utm就是设计来屏蔽单个用户的并发问题的,就是 用户访问自己的资源是不需要考虑其并发安全问题 的(多个用户访问的资源依然需要处理),主要想法是将用户的请求排序并调用线程池中的线程依次处理。 一个简单的场景:用户买入一个东西的总额是受限制的,用户a发起两次买入请求(请求1 和请求2) 在通常情况下,需要在用户买入请求中加入锁或者使用原子类,从而避免 请求1 和 请求2 同时处理导致超过限制; 而在utm下则不需要考虑类似问题,用户a的请求1执行完了才会执行请求2。 而现实业务中类似的场景有很多,使用utm确实使开发的复杂度降低。 这样就不会有说一个用户的两个请求被同时处理这样的情况