Kuzzle-插件间通信(通过方法调用)

Kuzzle-插件间通信(通过方法调用),kuzzle,Kuzzle,Kuzzle有没有办法让两个插件互相通信 假设插件a希望在启动时调用插件B的方法,甚至在某些用例的运行时调用插件B的方法。我该怎么做 目前,无法从另一个插件检索特定插件实例。插件初始化时无法访问插件管理器,但在某种程度上可以通过Kuzzle请求访问插件管理器(这不是正确的方法) 这个问题背后的想法是在初始化插件时执行类似的操作 function init (customConfig, context) { const { pluginsManager } = context;

Kuzzle有没有办法让两个插件互相通信

假设插件a希望在启动时调用插件B的方法,甚至在某些用例的运行时调用插件B的方法。我该怎么做

目前,无法从另一个插件检索特定插件实例。插件初始化时无法访问插件管理器,但在某种程度上可以通过Kuzzle请求访问插件管理器(这不是正确的方法)

这个问题背后的想法是在初始化插件时执行类似的操作

function init (customConfig, context) {
    const { pluginsManager } = context;

    const result = pluginsManager.MyPlugin.someMethod(...args);

    // make something with the result ?

    // For later use of plugins manager perhaps ?
    this.context = context
}
看起来Kuzzle管道是正确的选择,因为它们是同步的和可链接的,但是管道在触发事件时不会返回任何内容

function init (customConfig, context) {
    const result = context.accessors.trigger('someEvent', {
        someAttribute: 'someValue'
    });

    console.log(result) // undefined
}
谢谢你的帮助

完全披露:我为库兹工作

即使像这样访问
pluginManager
在此时可能会起作用,我们也可能会在不发出警告的情况下更改内部实现,因为它没有文档记录,因此您的插件可能无法在下一版本的Kuzzle中工作

使用来自另一个插件的特性的最简单方法是通过公开一个新的API方法,然后使用的方法调用它

例如,如果您的插件名称在清单中为
notifier plugin

this.controllers = {
  email: {
    send: request => { /* send email */ }
  }
};
然后您可以在另一个插件中调用它,如下所示:

await this.context.accessors.sdk.query({ 
  controller: 'notifier-plugin/email', 
  action: 'send'
});
请注意,您不能在插件中进行API调用

如果需要在Kuzzle启动时进行API调用,那么可以在事件上添加一个钩子/管道

最后,我注意到您不能像示例中那样使用管道返回,但我提出了一个特性,允许插件开发人员使用管道链返回

它将在Kuzzle的下一个版本中提供。

完全披露:我为Kuzzle工作

即使像这样访问
pluginManager
在此时可能会起作用,我们也可能会在不发出警告的情况下更改内部实现,因为它没有文档记录,因此您的插件可能无法在下一版本的Kuzzle中工作

使用来自另一个插件的特性的最简单方法是通过公开一个新的API方法,然后使用的方法调用它

例如,如果您的插件名称在清单中为
notifier plugin

this.controllers = {
  email: {
    send: request => { /* send email */ }
  }
};
然后您可以在另一个插件中调用它,如下所示:

await this.context.accessors.sdk.query({ 
  controller: 'notifier-plugin/email', 
  action: 'send'
});
请注意,您不能在插件中进行API调用

如果需要在Kuzzle启动时进行API调用,那么可以在事件上添加一个钩子/管道

最后,我注意到您不能像示例中那样使用管道返回,但我提出了一个特性,允许插件开发人员使用管道链返回

它将在Kuzzle的下一个版本中提供