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