如何在Marklogic中使用反向查询向Kafka发送实际消息?

时间:2018-04-13 00:08:49

标签: apache-kafka marklogic

如何获取传入的消息,运行反向查询以及是否存在匹配,然后向Kafka发送原始消息的全文?

我目前将此作为警报工作,我的规则调用xdmp:http:

xdmp:http-post("http://localhost:8082/topics/MyTopicName",
<options xmlns="xdmp:http">
<data>{'{"records":[{"value": {"my alert" :   "Content updated." } }]}'
</data>
<headers>
<content-type>application/vnd.kafka.json.v1+json</content-type>
</headers>
</options>);

但是我想发送原始收到的消息而不是字符串“Content updated”。

1 个答案:

答案 0 :(得分:3)

我假设你的代码示例是作为&#34; action&#34;运行的。如果是这样,它应该在文档中描述的顶部声明一些外部变量:Actions to Execute When an Alert Fires

$alert:doc变量应包含与您的规则匹配的文档,以便您可以将其用作http帖子的数据。

[edit]添加有关发送嵌入在JSON中的XML文档的详细信息:

假设您正在使用此处描述的汇合REST代理https://www.confluent.io/blog/a-comprehensive-open-source-rest-proxy-for-kafka/,我认为您需要将其编码为JSON作为记录值对象。您可以添加一些这样的代码来创建有效负载

let $payload := 
  xdmp:quote(
    object-node {
      "records" : array-node {
        object-node {
          "my alert" : xdmp:quote($alert:doc)
        }
      }
    }
  )

然后您可以将其作为帖子中的数据发送

xdmp:http-post("http://localhost:8082/topics/MyTopicName",
  <options xmlns="xdmp:http">
    <data>{$payload}</data>
    <headers>
      <content-type>application/vnd.kafka.json.v1+json</content-type>
    </headers>
  </options>
);

就像我在评论中所说的那样,我不是卡夫卡的专家,所以我还没有检查过它确实有效。它是构建JSON有效负载的一种方法,它将XML文档作为&#34;值&#34;的属性进行嵌入。虽然对象。

您可能考虑的另一种方法是使用XPath从XML文档中提取所需的字段,并将其作为&#34; value&#34;的属性传递。 JSON中的对象。这样你就不会传递整个XML,而只传递你需要的字段。