嗨:我有一个远程订阅事件频道的环境。事件通道会将事件推送到我的环境中,我将有许多规则来处理事件。我计划使用 Siddhi 框架来实施这些规则并相应地处理事件。
在我浏览了 Siddhi 代码库之后,似乎 Siddhi 执行模式在 siddhi 示例中得到了很好的体现,例如https://github.com/wso2/siddhi/blob/master/modules/siddhi-samples/performance-样本/src/main/java/org/wso2/siddhi/performance/SimpleFilterMultipleQueryPerformance.java。它执行以下步骤:
(1) 创建指定流查询(查询 1、查询 2..)的 Siddhi 运行时;(2) 为输入流创建输入处理程序。(3) 构造事件,然后使用输入处理程序发送事件;(4)创建的Siddhi Runtime添加回调,当输出流产生一些输出事件时,调用回调函数,传入输出事件。
通过简单的代码检测,我发现通过输入处理程序发送事件的线程与处理回调函数的线程相同。这让我推断整个 Siddhi 运行时是在一个线程中同步运行的。这个说法正确吗?
从我上面提到的 Siddhi 示例代码中,该代码使用多个事件发布者线程来处理事件的发送。所以在我看来,通过使用多个事件发送线程,我们可以实现 Siddhi 运行时的多线程执行。
由于我将要定义许多 Siddhi 查询,query1,query 2,...等,有两个选项:
(选项 1)类似于 Siddhi 代码库中的示例代码“SimpleFilterMultipleQueryPerformance.java”,我创建一个 siddhi 运行时对象,然后将所有 Siddhi 查询注册到这个单一运行时。然后我使用多个线程同时将事件发送到这个单一运行时的输入处理程序。
(选项 2)我创建了多个 Siddhi 运行时对象,我为每个对象注册了 Siddhi 查询的子集。我控制我的线程,以便一个特定线程仅发送专用于对应于一个特定运行时对象的输入处理程序的事件。也就是说,一个线程将事件发送到专用的 Siddhi 运行时对象;保证每个运行时仅由一个线程调用。
我想知道在性能方面哪个选项更好?