我正在尝试使用单个流,处理传入的json格式,并根据事件中的属性写入不同的流。 例如,如果输入流包含以下内容:
{ "event_type" : "temperature",
"json" : {
"type": "Temperature",
"DeviceID":"xyz",
"temperature": "32",
"timestamp" : "2019-03-19T12:37:43.356119Z"
}
}
另一个事件如下:
{ "event_type" : "location",
"json" : {
"type": "GPS",
"DeviceID":"xyz",
"location": {"coordinates": [-73.856077, 40.848447]},
"timestamp" : "2019-09-22T00:00:00+05:30"
}
}
这两个事件都被推送到单个http端点(这是我面临的限制)
如何使用单个http源流,处理这些事件,如果event_type
是temperature
插入mongo db的temperature_collection
中,并且event_type
是location
插入mongo db中的location_collection吗?
是否可以使用单个流执行此操作?
如果否,如何避免编写多个端点(每种事件类型一个)?
答案 0 :(得分:0)
是的,可以仅定义一个流并使用Siddhi filters路由每个流,
@source(type='http' , receiver.url='http://localhost:8000/SensorStream',
@map(type='json', fail.on.missing.attribute='false',
@attributes(eventType='$.event_type', type='$.json.type',deviceID='$.json.DeviceID', temperature='$.json.temperature', location='$.json.location', timestamp='$.json.timestamp' ) ) )
define stream SensorStream(eventType string, type string, deviceID string, temperature string, location string, timestamp string);
from SensorStream[eventType=='temperature']
select deviceID, temperature, timestamp
insert into TemperatureStream;
from SensorStream[eventType=='location']
select deviceID, location, timestamp
insert into LocationStream;
如上例所示,源映射属性'fail.on.missing.attribute'用于确保可以将不同格式与自定义映射一起映射到单个流。事件到达端点后,流程将使用过滤器根据属性的值进行划分。