赞
踩
分布式任务调度中常常出现这两个概念——service和feature。这一片我们主要介绍这两个概念。对分布式Service和Feature进行注册,注册Feature之前需要注册一个与之同名的Service,Feature才能注册成功。这里面存在一个从属关系,就是feature可以理解为一个子功能,挂在service下面
1、service的定义
g_distributedService是一个全局对象
static DistributedService g_distributedService = {
.GetName = GetName,
.Initialize = Initialize,
.MessageHandle = MessageHandle,
.GetTaskConfig = GetTaskConfig
};
2、数据结构
分布式服务的定义就是一个身份标识加一个服务的继承宏
typedef struct {
INHERIT_SERVICE; //服务宏
Identity identity; //身份信息
} DistributedService;
宏服务
INHERIT_SERVICE包含了所有Service都要有的成员
GetName():获取服务名
Initialize():初始化服务
MessageHandler():消息处理
GetTaskConfig():获取任务配置信息,包括level、priority、stackSize、queueSize、taskFlags
#define INHERIT_SERVICE \
const char *(*GetName)(Service * service); \
BOOL (*Initialize)(Service * service, Identity identity); \
BOOL (*MessageHandle)(Service * service, Request * request); \
TaskConfig (*GetTaskConfig)(Service * service)
4、Service的注册
static void Init()
{
// 使用全局唯一的g_distributedService调用SAMGR对象注册分布式服务,并将注册结果打印至日志
BOOL result = SAMGR_GetInstance()->RegisterService((Service *)&g_distributedService);
HILOGI("[dms service start %s]", result ? "success" : "failed");
}
// 使用SYS_SERVICE_INIT定义了分布式调度服务的初始化函数
SYS_SERVICE_INIT(Init);
1、feature定义
Feature的定义和注册与服务类似,在foundation\distributedschedule\dmsfwk_lite\source\dmslite_feature.c文件中实现,相应的定义如下:
DmsLite g_dmslite = {
/* feature functions */
.GetName = GetName,
.OnInitialize = OnInitialize,
.OnStop = OnStop,
.OnMessage = OnMessage,
.identity = {-1, -1, NULL},
/* dms interface for other subsystems */
DEFAULT_IUNKNOWN_ENTRY_BEGIN,
.StartRemoteAbility = StartRemoteAbilityInner,
DEFAULT_IUNKNOWN_ENTRY_END
};
2、DmsLite结构体
typedef struct {
INHERIT_FEATURE;
INHERIT_IUNKNOWNENTRY(DmsProxy);//实现DMSLite接口
Identity identity; //身份标识
} DmsLite;
宏的说明
INHERIT_FEATURE宏中定义了所有Feature都要有的成员
GetName():获取Feature的名称
OnInitialize():对Feature进行初始化
OnStop():停止Feature
OnMessage():Feature的消息的处理函数
#define INHERIT_FEATURE \
const char *(*GetName)(Feature *feature); \
void (*OnInitialize)(Feature *feature, Service *parent, Identity identity); \
void (*OnStop)(Feature *feature, Identity identity); \
BOOL (*OnMessage)(Feature *feature, Request *request)
3、feature的注册函数
这里的主要函数SAMGR_GetInstance(),用来实现一个samgr的对象,注册对应的feature和api
static void Init()
{
BOOL result = SAMGR_GetInstance()->RegisterFeature(DISTRIBUTED_SCHEDULE_SERVICE, (Feature*) &g_dmslite);
if (!result) {
HILOGE("[dms register feature failed]");
}
result = SAMGR_GetInstance()->RegisterFeatureApi(DISTRIBUTED_SCHEDULE_SERVICE,
DMSLITE_FEATURE, GET_IUNKNOWN(g_dmslite));
if (!result) {
HILOGE("[dms register feature api failed]");
}
}
// SYS_FEATURE_INIT和SYS_SERVICE_INIT类似,用来初始化Feature的Init()函数
SYS_FEATURE_INIT(Init);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。