eggjs agent.js 的使用----如何将redis订阅事件提取到agentjs中
发布于 6 年前 作者 feiyuchuixue 6614 次预览 最后一次回复是 6 年前 来自 问答
我的业务场景和官方《多进程模型和进程间通讯》描述的场景是一致的。 目前 redis 的订阅事件是在app.js 中写的,如下:
//app.js
async didReady() {
// 应用已经启动完毕
// 获取ctx
const ctx = await this.app.createAnonymousContext();
// 订阅redis 事件
this.app.redis.clients.get('client').subscribe('forbidden_ip', (err, result) => {
if (err) {
throw err;
}
console.log(result, 'psubscribe');
});
// 处理订阅到的消息
this.app.redis.clients.get('client').on('message', (channel, message) => {
switch (channel) {
case 'forbidden_ip':
// 更新ip名单
ctx.service.catchService.update();
break;
default:
ctx.logger.info('未处理的订阅事件:channel-【' + channel + '】,message-【' + message + '】');
}
console.log(message, channel);
// console.log(message, 'music');
});
}
问题: ```js //agent.js this.app.redis.clients.get(‘client’).subscribe();
在 agent.js 中 无法获取 redis,只能获取agent。
请问大家有什么好想法吗。
ps:新手一枚,之前用的express ,最近在学习eggjs。3 回复
agent 可以获得redis客户端的,你应该用的是egg-redis插件,需要配置agent:true,来配置将redis也挂载到agent上。
@HobaiRiku 感谢您的回复,我确实是使用的egg-redis插件,我最后的解决方案是又安装了redis 插件,然后在agent 通过require注入的。劳烦请教 agent:true 这个配置具体的配置位置。
@HobaiRiku 感谢您的回复,我已经解决问题。贴出代码,希望可以帮到大家。