如何获取传入的消息,运行反向查询以及是否存在匹配,然后向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”。
答案 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,而只传递你需要的字段。