如何在wso2cep中设置事件流的优先级?

时间:2016-09-30 03:08:43

标签: priority-queue wso2cep siddhi

让我们说,我们有几个事件流程。其中一些将参考数据加载到hazelcast事件表,其他则是实际的事件处理器。

我的目标是,当wso2cep服务器启动时,它将首先运行那些将参考数据加载到hazelcast事件表的事件流,然后它将启动其他流程。

它将帮助我们在所有事件处理器流中保持参考数据的一致性。

2 个答案:

答案 0 :(得分:0)

除了在单个执行计划中加载之外,我看不到其他选项。 有两种选择:

  1. 使用触发器定期从RDBMS加载参考数据到Hazelcast。实际过程将使用Hazelcast表(此执行计划已在下面提供)
  2. 从RDBMS加载并缓存它。
  3. 所以,此时此刻,我的问题是:

    1. 哪一个在内存利用方面更好?
    2. 哪一个在事件处理速度方面更好?
    3. 请建议是否还有其他更好的方法。
    4. 执行计划

      @Plan:name('ExecutionPlan')
      
      /* define streams/tables and write queries here ... */
      /* Facts/Events streams definition */
      @Import('actions:1.0.0')
      define stream actions (meta_name string, correlation_id int);
      
      @Export('userActions:1.0.0')
      define stream userACtions (meta_username string, meta_actionname string);
      
      /* Dimension tables(Event Tables) definition */
      -- table from RDBMS
      @from(eventtable = 'rdbms' , datasource.name = 'PG' , table.name = 'users')
      @IndexBy('id')
      define table DBUsers (id int, name string);
      
      -- table from Hazelcast
      @from(eventtable = 'hazelcast', collection.name='hzUsers')
      @IndexBy('id')
      define table hzUsers (id int, name string);
      
      /* Load dimension tables, from RDBMS to Hazelcast, periodically using trigger */
      define trigger periodicTrigger at every 30 sec;
      
      from periodicTrigger join DBUsers
      select DBUsers.id as id, DBUsers.name as name
      insert into hzUsers;
      
      /* Actual execution plan */
      
      from actions as A 
      join hzUsers as H
      on A.correlation_id == H.id
      select H.name as meta_username, A.meta_name as meta_actionname
      insert into userACtions;
      

答案 1 :(得分:0)

我已经检查过hazelcast外部集群,看起来它是一个额外的开销,需要为表格的每种类型创建DataSerializable类。

所以,我已经决定如下存储CEP的维度/参考数据:

  1. 对于完全开源的项目,我会按照我在另一个回答中提到的那样去,请阅读那里的评论,专业第二(Obaid)&第三(纹理)。

  2. 对于商业项目,我会去找伏特。

  3. 非常感谢@Grainier。