本人测试通过,建议查看官方文档以及视频演示
事件 | Fusio
Fusio 拥有一个事件系统,有助于构建Webhook系统。这意味着您的API开发者可以注册一个Webhook,当事件被触发时,Fusio会调用该URL。
事件
- 事件名称:事件的名称。
- 简短描述:对事件的简短描述。
- 模式:描述此事件提交的有效负载的模式。
为了订阅一个事件,用户需要向 /consumer/webhook
端点发送一个HTTP POST请求,携带以下有效负载:
{
"event": "my_event",
"endpoint": "http://my-app.com/callback"
}
为了发布一个事件,您需要使用调度器来创建一个事件。例如,下面的动作展示了如何向事件 "my_event"
分发数据,这将把提供的数据以JSON格式编码后发送到已订阅的端点。
<?php
function writeToLog($message, $type = 'Info') {
$logFile = '/tmp/eventlog.log';
$logContent = date("Y-m-d H:i:s") . " - $type: $message\n";
// file_put_contents($logFile, $logContent, FILE_APPEND);
}
//给回调的数据
$dispatcher->dispatch('my_event', [
'foo' => 'bar'
]);
//正常访问的数据
return $response->build(200, [], [
'event' => 'triggered',
]);
?php>
或
<?php
$randomValue = rand(1, 100); // 生成1到100之间的随机数
$dispatcher->dispatch('my_event4', [
'foo' => 'bar33' . $randomValue
]);
return $response->build(200, [], [
'event' => 'triggered' . $randomValue,
]);
作为替代,您也可以使用现有的 Util-Dispatch-Event
动作,它将提供的有效负载分发到配置的事件。
Fusio 将向每个已订阅的端点发送以下HTTP POST请求。如果端点返回非成功的状态码,Fusio将尝试重新发送消息最多3次。
POST /callback HTTP/1.1
Host: my-app.com
Content-Type: application/json
User-Agent: Fusio/4.0.2@916a81045349cc0e149873b5b794777bb5f29a30
{"foo": "bar"}
Fusio 的事件系统主要用途确实是用于通知。通过这个系统,API 的消费者可以注册 Webhook,当特定事件发生时(如数据库记录更新、订单状态变化等),Fusio 会自动向这些注册的 Webhook 发送通知。这种方式使得外部服务能够及时响应 API 内部的变化,而无需不断轮询检查状态更新。
具体来说,这种机制有以下几个优点:
- 实时性:消费者可以立即接收到事件通知,而不是定期查询是否有新数据。
- 减少服务器负担:避免了消费者频繁查询数据带来的服务器压力。
- 灵活性:不同的消费者可以根据自己的需求订阅不同的事件,实现个性化服务。
因此,Fusio 的事件系统非常适合用于构建需要实时通知的应用场景,如即时通讯、交易确认、状态更新等。
本人测试过程
在API菜单下的Event下新增一个事件

在API菜单下的Action下新增一个动作

在API菜单下的Action下新增一个Operation(路由)动作先择上面新建的动作event_test 点击创建。

在Consumer下找到Webhook,新增一个webhook

选择新建的my_event,选择用户,这里我们选择了’test’,最后是输入回调通知地址。
按照上述操作,回调网站http://requestbin.cn/可以接受到我们给回调地址的数据。
回调网站的教程https://developer.qiniu.com/kodo/kb/1398/correction-of-test-site