future

future


下单流程

<h2>下单接口流程</h2> <p>POST <a href="http://localhost:8080/future/api/v1/private/order/submit"><a href="http://localhost:8080/future/api/v1/private/order/submit">http://localhost:8080/future/api/v1/private/order/submit</a></a></p> <p>接口入口在future-openapi的OrderRest.java文件中</p> <p>public RestResponse order方法</p> <p>1, 获取用户id</p> <p>2,checkLimit 开启全局限频,限制下单频率</p> <p>3,先数据库获取用户id信息,进入place方法,开始进行参数的校验,</p> <p>4, 止盈止损参数校验,数量,方向,价格等各个参数的校验</p> <p>5,开始创建订单, 设置各种订单的参数</p> <p>6, 经过各种复杂检测之后,submit方法 远程调用futurer-order-rest 项目</p> <p>7,如果是止盈止损单, 先插数据库,然后发送kafka planOrderEventTopic 给 planOrder 项目处理</p> <h2>planOrder 项目处理</h2> <p>入口,PlanOrderPlaceEventHandler类,onEvent方法</p> <p>1,PlanOrderPlaceEveentHandler --&gt; OrderDispatcherEngine --&gt; PlanOrderHandler</p> <p>OrderDispatcherEngine相当于一个事件处理中心,将event分发到engine/handler下面的Handler里面去具体执行</p> <p>2,以PlanOrderHandler为例,在这个类中调用onEvent方法,将计划委托单存储到planOrdereMap里面去</p> <p>3,订单存储到planOrdereMap进行一系列排序操作之后</p> <p>4,调用planOrderTriggerService.send2Kafka(planOrder)方法</p> <p>5,发送这个 future.events.userEventTopic 这个topic给用户</p> <h2>远程调用futurer-order-rest 项目</h2> <p>1,开始下单接口,对下单参数进行校验判断,如果判断不成功,抛出异常</p> <p>2,将请求信息转化为订单DTO实例,将DTO数据插入 t_contract_order表中,</p> <p>3,作为kafka的生产者,将orderID和DTO,发送出去,主题是 future.events.contractEventTopic</p> <h2>future-statistic-task 作为kafka接收者服务,接收下单的消息</h2> <p>由 consumer -&gt; handlers -&gt; service -&gt; impl</p> <p>5, OrderPlaceEventHandle 事件对订单进行处理,</p> <p>6, event.getOrder() 先接收到订单 order,更新挂单数 和 挂单笔数</p> <p>7, 以日为单位,进行订单的缓存处理,</p> <p>private final Map dailyContractTradeStatCache = new ConcurrentHashMap&lt;&gt;();</p> <p>这是个主要的数据结构,更新 tradeReport 这个结构体,更新交易总量,更新成交人数,更新人均成交张数</p> <p>8,更新用户委托时间</p> <p>9,其实主要就是 dailyContractTradeStatCache 构造这个hashMap</p> <p>10, ContractTradeRepStatServiceImpl 是 最终类 ,将userid 作为Key 和 合约 id作为值 写入redis</p> <p>11,每隔5分钟 将 dailyContractTradeStatCache 内存中的数据 写入到 数据中</p> <p>12,这个项目的作为消费者其实作为一个统计功能,还有就是写入数据库,便于回放</p> <h2>future-engine-core 作为kafka接收者服务,接收下单的消息</h2> <p>public void onEvent(OrderPlaceEvent event,EngineOutputHoldeerVo holdeerVo,long sequence) 函数作为事件的入口</p> <p>1, 通过事件回掉拿到订单,并判断订单是否有效</p> <p>2,通过订单的合约id,拿到合约信息,并判断合约是否有效</p> <p>3,通过合约id拿到订单簿orderbook</p> <p>4, 初始化订单的各个参数,包括dealAvgPrice,UsedMargin,FrozenMargin等等</p> <p>5, 检查是否可以下单,发送订单作废事件</p> <p>6, 正式开始进入撮合开仓服务</p> <p>7, 先冻结用户资金</p> <p>8,doMatch()方法是合约撮合方法</p> <p>9,开始撮合 ....</p>

页面列表

ITEM_HTML