繁体   English   中英

事件流在wso2cep3.0.0中的工作方式

[英]How Event stream Works in wso2cep3.0.0

我正在使用wso2cep3.0.0,我的输入源和输出源是JMs。我这样编写了输入事件适配器和输出事件适配器

输入适配器

<?xml version="1.0" encoding="UTF-8"?>
<inputEventAdaptor name="jmsProxy" statistics="disable" trace="enable"
  type="jms" xmlns="http://wso2.org/carbon/eventadaptormanager">
  <property name="java.naming.provider.url">tcp://localhost:61616</property>
  <property name="transport.jms.SubscriptionDurable">false</property>
  <property name="transport.jms.UserName">admin</property>
  <property name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</property>
  <property name="transport.jms.Password">admin</property>
  <property name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</property>
  <property name="transport.jms.DestinationType">queue</property>
</inputEventAdaptor>

和我的

输出事件适配器

<?xml version="1.0" encoding="UTF-8"?>
<outputEventAdaptor name="OUTJmsProxy" statistics="disable" trace="disable"
  type="jms" xmlns="http://wso2.org/carbon/eventadaptormanager">
  <property name="java.naming.security.principal">admin</property>
  <property name="java.naming.provider.url">tcp://localhost:61616</property>
  <property name="java.naming.security.credentials">admin</property>
  <property name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</property>
  <property name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</property>
  <property name="transport.jms.DestinationType">queue</property>
</outputEventAdaptor>

我在jmsproxy jms队列中的输入消息是这样的

<soapenv:Body xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
   <uuid>cc253480-95b3-418e-b282-7e87f885c99e</uuid>
   <Remarks>t4</Remarks>
   <ReadingsLiteTaildtos>
      <ReadingsLiteTaildto>
         <FinalValue>70</FinalValue>
         <InputText>Chiller Feeder Current R - Ph</InputText>
         <InputValue>0.0</InputValue>
         <ParameterId>-2499999974</ParameterId>
         <SlNo>1</SlNo>
      </ReadingsLiteTaildto>
      <ReadingsLiteTaildto>
         <FinalValue>70</FinalValue>
         <InputText>Chiller Feeder Current Y - Ph</InputText>
         <InputValue>0.0</InputValue>
         <ParameterId>-2499999973</ParameterId>
         <SlNo>2</SlNo>
      </ReadingsLiteTaildto>
      <ReadingsLiteTaildto>
         <FinalValue>70</FinalValue>
         <InputText>Chiller Feeder Current B - Ph</InputText>
         <InputValue>0.0</InputValue>
         <ParameterId>-2499999972</ParameterId>
         <SlNo>3</SlNo>
      </ReadingsLiteTaildto>
      <ReadingsLiteTaildto>
         <FinalValue>70</FinalValue>
         <InputText>Chiller Energy Meter Reading</InputText>
         <InputValue>0.0</InputValue>
         <ParameterId>-2499999971</ParameterId>
         <SlNo>4</SlNo>
      </ReadingsLiteTaildto>
   </ReadingsLiteTaildtos>
   <ReadingDateTime>1381757157596</ReadingDateTime>
   <PartyBranchId>-2500000000</PartyBranchId>
   <ParametersetId>-2499999974</ParametersetId>
   <AssetId>-2499999995</AssetId>
   <TaskId>811291126760647</TaskId>
   <WorkOUId>-1</WorkOUId>
   <activityid>-2500000000</activityid>
   <userid>-2499999993</userid>
   <entrymode>0</entrymode>
   <DeviceId>-1</DeviceId>
</soapenv:Body>

我希望在最终值超过最大值(例如超过100)时引发一个事件,那么我将如何编写Stream和

ExecutionPlan

在stream-manger-config.xml文件中,包含3个部分

1.metaData 2.Correlation数据3.Payload数据

因此,在上面的消息中,我将如何定义哪个数据位于哪个部分下,我们还应该在同一流配置文件中定义输入有效负载和出有效负载,否则我们需要定义单独的

是否为该用例提供cep帮助

提前感谢。

是的,这是CEP的典型用例。

您可以使用类似于以下内容的“事件生成器”。

<?xml version="1.0" encoding="UTF-8"?>
<eventBuilder name="ReadingsDtoBuilder" statistics="disable"
    trace="disable" xmlns="http://wso2.org/carbon/eventbuilder">
<from eventAdaptorName="jmsEventReceiver" eventAdaptorType="jms">
    <property name="transport.jms.Destination">ReadingsQueue</property>
</from>
<mapping customMapping="disable"
    parentXpath="//ReadingsLiteTaildtos" type="xml">
    <property>
        <from xpath="//ReadingsLiteTaildto/ParameterId"/>
        <to name="meta_parameterId" type="string"/>
    </property>
    <property>
        <from xpath="//ReadingsLiteTaildto/Slno"/>
        <to name="meta_slno" type="string"/>
    </property>
    <property>
        <from xpath="//ReadingsLiteTaildto/FinalValue"/>
        <to name="finalValue" type="int"/>
    </property>
    <property>
        <from xpath="//ReadingsLiteTaildto/InputText"/>
        <to name="inputText" type="string"/>
    </property>
    <property>
        <from xpath="//ReadingsLiteTaildto/InputValue"/>
        <to name="inputValue" type="double"/>
    </property>
</mapping>
<to streamName="org.sample.readings.dto.stream" version="1.0.0"/>
</eventBuilder>

执行计划可以如下。

<?xml version="1.0" encoding="UTF-8"?>
<executionPlan name="ReadingsAnalyzer" statistics="disable"
  trace="disable" xmlns="http://wso2.org/carbon/eventprocessor">
  <description>This execution plan analyzes readings and triggers notifications based on     threshold.</description>
  <siddhiConfiguration>
    <property name="siddhi.enable.distributed.processing">false</property>
    <property name="siddhi.persistence.snapshot.time.interval.minutes">0</property>
  </siddhiConfiguration>
  <importedStreams>
    <stream as="readings" name="org.sample.readings.dto.stream" version="1.0.0"/>
  </importedStreams>
  <queryExpressions><![CDATA[from readings[finalValue > 100]
select *
insert into notificationStream;]]></queryExpressions>
  <exportedStreams>
    <stream name="notificationStream" valueOf="notificationStream" version="1.0.0"/>
  </exportedStreams>
</executionPlan>

您可以在stream-manager-config.xml中定义流,类似于以下内容。

<streamDefinition name="org.sample.readings.dto.stream" version="1.0.0">
<metaData>
        <property name="parameterId" type="STRING"/>
        <property name="slno" type="STRING"/>
</metaData>
    <payloadData>
        <property name="finalValue" type="INT"/>
        <property name="inputText" type="STRING"/>
        <property name="inputValue" type="DOUBLE"/>
    </payloadData>
</streamDefinition>
<streamDefinition name="notificationStream" version="1.0.0">
<metaData>
        <property name="parameterId" type="STRING"/>
        <property name="slno" type="STRING"/>
</metaData>
    <payloadData>
        <property name="finalValue" type="INT"/>
        <property name="inputText" type="STRING"/>
        <property name="inputValue" type="DOUBLE"/>
    </payloadData>
</streamDefinition>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM