egg怎么实现事件订阅,比如通过事件中间件发布一个事件,通过egg订阅.
如题
7 回复
@atian25 大神求解惑
问的有点泛
@atian25 就是对接redis的发布订阅,当向reids中发布一个事件的时候.egg就执行一段代码.我目前所知道的好像就是在app或者agent里面来订阅,然后调用指定的service.我想知道就是有没有专门的组件来更加方便的完成这件事.我看到有个CustomStrategy的东西好像可以实现
@acodercat 比如像在schedule里面的参数一样,类似的我配置一个频道,然后当有事件发生时,这个文件的代码就自动执行.这种功能是不是需要自己来编写,还是egg右提供一些解决方案
这种可以自定义一个 ScheduleStrategy ,在里面监听事件,然后 sendOne 通知某个 worker 执行。
https://github.com/eggjs/egg-schedule#schedule-type
然后你可以把这段逻辑封装为一个 egg-schedule-redis-event 插件
@atian25 好的,谢谢
@atian25 我这样对messenger做了一些简单的封装
class EventListenerScheduleStrategy extends agent.ScheduleStrategy {
start() {
agent.messenger.on(this.schedule.event, (data) => {
this.sendOne(data);
});
}
}
agent.schedule.use('event_listener', EventListenerScheduleStrategy);
然后这样来监听时间,然后项目中通过this.app.messenger.broadcast
来广播,这样就不用编排的方式,可以解耦很多逻辑
static get schedule() {
return {
type: 'event_listener',
event: 'dynamic_feature_generated',
};
}