根据文档(https://docs.wso2.org/display/CEP310/Clustered+Deployment),您可以在分布式模式下运行Siddhi .
据我所知,所有节点将共享流定义并在共享上下文(流,查询,事件......)上运行 .
但我不能把它付诸实践:
-
使用2.0.0-wso2v4版本
-
我编写了一个简单的程序,启动了两个启用了分布式处理的siddhiManagers .
-
程序在siddhiManager1中创建流和查询
-
添加在两个管理器中打印事件的流回调(上一个流)
-
在siddhiManager1中发送事件
-
在siddhiManager1和siddhiManager2中打印流
结果是:
-
我可以看到Hazelcast工作,每个经理看到另一个 .
-
siddhiManager1有一个流,一个查询并打印一个事件 .
-
siddhiManager2没有任何内容 .
我已经通过使用siddhi-distribution(fat-jar)进行了测试,但也使用了siddhi-api,siddhi-core和siddhi-query jar .
Siddhi-distribution fat-jar里面有一些与Hazelcast有关的xml,但是我可以看到这些配置没有加载,在源代码(github)中我没有看到这些文件有什么特别之处(siddhiManager) .
关于如何在分布式缓存模式部署中运行siddhi的任何想法?我究竟做错了什么?
1 回答
Siddhi不会通过Hazelcast复制工件(查询,流定义) . 它仅共享引擎的事件/状态 . 因此,为了使其正常工作,您必须首先在分布式设置中的所有Siddhi实例中单独同步这些查询/流定义 . 一旦你有了这些,你将能够使它在分布式模式下工作 .
请注意,上述说明假设您仅使用没有WSO2 CEP产品的Siddhi库 . 在WSO2 CEP中,有一种机制可以在分布式设置中的节点之间同步这些部署工件 .