|
@@ -3,23 +3,34 @@ package com.persagy.iot.func
|
|
|
import com.persagy.iot.bean.IOTData
|
|
|
import org.apache.flink.api.common.state.{ValueState, ValueStateDescriptor}
|
|
|
import org.apache.flink.streaming.api.functions.KeyedProcessFunction
|
|
|
+import org.apache.flink.streaming.api.scala._
|
|
|
import org.apache.flink.util.Collector
|
|
|
|
|
|
class OriginalDataAlarm extends KeyedProcessFunction[String, IOTData, IOTData] {
|
|
|
|
|
|
- lazy val alarmTimeState: ValueState[Long] = getRuntimeContext.getState(new ValueStateDescriptor[Long]("alarm-time", classOf[Long]))
|
|
|
-
|
|
|
+
|
|
|
+ lazy val alarmState: ValueState[IOTData] = getRuntimeContext.getState(new ValueStateDescriptor[IOTData]("alarm-IOTData", classOf[IOTData]))
|
|
|
override def processElement(iotData: IOTData,
|
|
|
ctx: KeyedProcessFunction[String, IOTData, IOTData]#Context,
|
|
|
out: Collector[IOTData]): Unit = {
|
|
|
- val alarmTime: Long = iotData.eventTime + 1000 * 60 * 60
|
|
|
- ctx.timerService().registerEventTimeTimer(alarmTime)
|
|
|
- alarmTimeState.update(iotData.eventTime)
|
|
|
+
|
|
|
+ val lateTime: Long = iotData.eventTime + 1000 * 60 * 30
|
|
|
+
|
|
|
+ val loseTime: Long = iotData.eventTime + 1000 * 60 * 60
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ ctx.timerService().registerProcessingTimeTimer(System.currentTimeMillis() + 1000L * 3)
|
|
|
+ alarmState.update(iotData)
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
override def onTimer(timestamp: Long,
|
|
|
ctx: KeyedProcessFunction[String, IOTData, IOTData]#OnTimerContext,
|
|
|
out: Collector[IOTData]): Unit = {
|
|
|
-
|
|
|
+ val lateDataTag = new OutputTag[IOTData]("late-data")
|
|
|
+ ctx.output(lateDataTag, alarmState.value())
|
|
|
+ alarmState.clear()
|
|
|
}
|
|
|
}
|