如何将架构与有效负载关联?

时间:2019-05-03 18:43:27

标签: php publish-subscribe snowplow

对于上下文:  我正在为除雪机设置PubSub发射器。 (对于其他读者,PubSub是Google Cloud Platforms上的一个简单队列,它接收作为数组输入的消息。)

['data' => 'Name', 'attributes' => 'key pair values of whatever data you are sending']

除了我必须创建一个自定义的Emitter类以实现此目标外,上述内容无关紧要,因为Google Cloud PubSub的连接器与除雪犁提供的典型http请求/套接字/其他连接器不同。

实际问题:

我想为我发送的每个事件设置一个特定的架构。您如何将架构与每个有效负载相关联?

PHP Tracker SyncEmitter(提供了最标准的除雪机Emitter)不允许对该模式进行任何自定义设置(如下所示)

private function getPostRequest($buffer) {
    $data = array("schema" => self::POST_REQ_SCEHMA, "data" => $buffer);
    return $data;
}

它被硬编码到每个跟踪的事件中。

所以我调查了。并进一步阅读扫雪机追踪器。我仍然感到困惑,我知道我可以扩展Payload类并强制将自己的模式作为变量,但是为什么还不这样呢?我之所以问是因为我假设开源程序员做对了,而且我理解不正确。

1 个答案:

答案 0 :(得分:0)

我知道了。

Tracker类包含trackUnstructuredEvent

/**
 * Tracks an unstructured event with the aforementioned metrics
 *
 * @param array $event_json - The properties of the event. Has two fields:
 *                           - A "data" field containing the event properties and
 *                           - A "schema" field identifying the schema against which the data is validated
 * @param array|null $context - Event Context
 * @param int|null $tstamp - Event Timestamp
 */
public function trackUnstructEvent($event_json, $context = NULL, $tstamp = NULL) {
    $envelope = array("schema" => self::UNSTRUCT_EVENT_SCHEMA, "data" => $event_json);
    $ep = new Payload($tstamp);
    $ep->add("e", "ue");
    $ep->addJson($envelope, $this->encode_base64, "ue_px", "ue_pr");
    $this->track($ep, $context);
}

哪个接受架构作为输入。 Snowplow希望您使用Tracker的默认功能,并提供以上内容作为我的问题的解决方案。

但是它仍然有一个环绕数据的模式(包含输入模式)。...我自己的答案中还有更多问题...