Annatar.He@liulishuo
2018.01.16
service Pusher {
rpc CreateJob(JobRequest) returns (JobReply);
}
enum Action {
Daily_Word_Daily_Push = 0;
OptList_A_Todo_Push = 101;
OptList_B_Todo_Push = 102;
Staging_Test_Push = 999;
}
message JobRequest {
Action action = 1;
string openid = 2;
int64 time = 3; // Date.now() 的 timestamp
string data = 4; // data 是 json stringify 过的数据
}
// kue job 数据结构,参考自:
// https://github.com/Automattic/kue#json-api
message JobReply {
int32 type = 1;
string data = 2; // data 是 json stringify 过的数据
int64 created_at = 3;
}
function commonProcessor(job, done) {
const { action } = job.data as IProcessMetaData
const processor: IWorkerProcessor = ProcessorFactory.create(job.data)
let msg: IWechatPushMessage = null
await processor.init()
if (!processor.hasJob()) {
return done(new Error(`推送已经完成,不可再次推送 ${action}`))
}
msg = await processor.getMessage()
try {
const response = await WechatService.pushMessage(msg, action2AppUid[action])
if (response.errcode !== 0) {
log('err', { response, msg, data: job.data })
}
} catch (e) {
log('err', { e, msg, data: job.data })
}
await processor.done()
done()
return msg
}
abstract AVBase, MySQLBase, ...
redis: sorted set, hash, kv
BTW