egg怎么实现事件订阅,比如通过事件中间件发布一个事件,通过egg订阅.
发布于 5 年前 作者 acodercat 5335 次浏览 来自 问答

如题

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',
    };
  }
回到顶部