0

根据文档(https://docs.wso2.org/display/CEP310/Clustered+Deployment),您可以在分布式模式下运行 Siddhi。

据我了解,所有节点都将共享流定义并在共享上下文(流、查询、事件......)上运行。

但我不能让它发挥作用:

  1. 使用 2.0.0-wso2v4 版本
  2. 我编写了一个简单的程序,它启动了两个启用分布式处理的 siddhiManager。
  3. 该程序在 siddhiManager1 中创建一个流和一个查询
  4. 添加在两个管理器中打印事件的流回调(上一个流)
  5. 在 siddhiManager1 中发送事件
  6. 在 siddhiManager1 和 siddhiManager2 中打印流

结果是:

  • 我可以看到 Hazelcast 工作,每个经理看到另一个。
  • siddhiManager1 有一个流、一个查询并打印一个事件。
  • siddhiManager2 没有任何东西。

我已经使用 siddhi-distribution (fat-jar) 进行了测试,但也使用了 siddhi-api、siddhi-core 和 siddhi-query jars。

Siddhi-distribution fat-jar 内部有一些与 Hazelcast 相关的 xml,但据我所知,这些配置没有被加载,并且在源代码(github)中我没有看到这些文件有什么特别之处(siddhiManager)。

关于如何在分布式缓存模式部署中运行 siddhi 的任何想法?我究竟做错了什么?

4

1 回答 1

1

Siddhi 不会通过 Hazelcast 复制工件(查询、流定义)。它仅共享引擎的事件/状态。因此,为了使其正常工作,您必须首先在分布式设置中的所有 Siddhi 实例中分别同步这些查询/流定义。一旦你有了这些,你就可以让它在分布式模式下工作。

请注意,上面的解释是假设您只使用没有 WSO2 CEP 产品的 Siddhi 库。在 WSO2 CEP 中,有一种机制可以在分布式设置中的节点之间同步这些部署工件。

于 2014-04-05T10:42:23.540 回答