Receiver和ReceiverImpl 详解
Receiver 和ReceiverImpl的功能:它们是s4传输层到应用层的入口,首先将在传输层的Event(ByteBuffer message)反序列化生成Stream能够识别的Event,然后该Event添加到相应的Stream中。
ReceiverImpl 实现了Receiver接口的两个方法:
(1)Void receive (ByteBuffer message) ();
(2)int getPartitionId ();
由于方法(2)是调用底层的listener 的getPartitionId()方法得到,这里我们暂时不详细论述,之后讲述Listener(TCPListener、UDPListener)时再详细说明。
这里,我们主要论述方法(1),以及ReceiverImpl和stream的交互原理。
ReceiverImpl 维护一个Map<StreamName, Stream> map,通过addStream(Stream<? extends Event> stream)向map中添加stream。addStream 方法会在Stream的start()方法被调用,那么该Stream则被保存在map中。
在receive (ByteBuffer message)()中,先将收到的message反序列化生成Event,然后获得该Event对应的Stream的StreamName,从而在map中找到该Event所要到达的Stream,并调用该Stream的receiveEvent(Event event)方法以获取该event。接下来,该Stream会调用目标PE(ProcessingElement)的HandleInputEvent(Event event)方法,使得该event被相应的PE处理。总的来说,流程如下: