插件开发技术说明(18)---异步任务队列使用

来源:互联网 发布:科普是什么意思网络词 编辑:程序博客网 时间:2024/05/17 00:09

本文以sd插件为例说明异步任务的使用.

1.定义文件

sd.h修改
class CSd增加成员:
string batch_op_task_name_; ///< 自动批操作任务名称.默认:batch_op.IAsyncTaskEngine *async_task_engine_; ///< 异步任务引擎IAsyncTask* batch_op_task_; ///< 自动批操作的异步任务

2.实现文件

sd.cpp修改
////////////////////////////////////////////////////////////////////////////////int CSd::ReadPrivateConfig() {  ...  /// 读<batch_op_async_task_name>配置READ_STRING(root,"batch_op_async_task_name",this->batch_op_task_name_);  ...}////////////////////////////////////////////////////////////////////////////////int CSd::CheckValid() {  ...  ///< 获取异步任务队列实例async_task_engine_ = reinterpret_cast<IAsyncTaskEngine*>(container_->GetResource(ASYNC_TASK_ENGINE));if (async_task_engine_==0) {nlogger_->log(LO_STDOUT|LO_FILE,SEVERITY_ERROR,"需要加载异步任务队列.\n");return -1;}batch_op_task_ = async_task_engine_->Get(batch_op_task_name_.c_str());if (batch_op_task_==0) {nlogger_->log(LO_STDOUT|LO_FILE,SEVERITY_ERROR,"自动批操作异步任务队列%s不存在,请检查配置.\n",batch_op_task_name_.c_str());return -1;}  ...  return 0;}



3.配置

3.1插件配置(sd.conf)

增加配置:

  <!-- 默认:batch_op -->  <batch_op_async_task_name></batch_op_async_task_name> 

 自动批操作任务名称,需要和async_task.conf配置一致.
  

3.2 async_task.conf

<?xml version="1.0" encoding="gb2312" standalone="yes"?><config>  <units>    <unit> <!-- 自动批操作任务队列 -->    <name>batch_op</name> <!-- 名称-->      <dbc>yoopa</dbc> <!-- 数据库连接名.默认为插件默认数据库-->      <table_name>t_Sys_AsyncTask_BatchOp</table_name> <!--异步任务队列表名称,默认:t_sys_asynctask -->      <prop>0</prop> <!-- 任务属性 bit0-是否需要返回消息(0-不返回 1-返回 默认:1)  默认:1 -->      <!--失败重做间隔,单位:秒,默认300-->      <redo_interval>60</redo_interval>      <!--失败重做任务扫描间隔,单位:秒,默认:60-->      <redo_timer_interval>60</redo_timer_interval>      <!--失败重做文件存储路径-->      <!--limit:每目录最多文件个数-->      <redo_file_path limit="1000">data/async_task/batch_op</redo_file_path>      <!--最小重做文件字节数,默认:8k-->      <redo_file_min_size>10240</redo_file_min_size>         </unit>  </units></config>

4.使用

 写异步任务队列表的示例代码如下:        

AUTO_POINTER(CMsg,nmsg);nmsg = new CMsg;///... 构造消息包if (batch_op_task_->Save(nmsg)) { ///< 保存到异步任务队列表return -1;} 



0 0
原创粉丝点击