如何使用marklogic中的反向查询将实际消息发送给kafka?

bxjv4tth  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(470)

如何获取传入消息,运行反向查询,如果存在匹配项,则使用原始消息的全文通知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”。

bq3bfh9z

bq3bfh9z1#

我假设您的代码示例作为“操作”运行。如果是这样,它应该在顶部声明一些外部变量,如文档中所述:触发警报时要执行的操作
这个 $alert:doc 变量应该包含与您的规则匹配的文档,以便您可以将其用作http post的数据。
[编辑]添加有关发送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>
);

就像我在评论里说的,我不是Kafka的Maven,所以我还没有检查过它是否真的有效。这是一种构造json负载的方法,它将xml文档作为“value”对象的属性嵌入其中。
您可能考虑的另一种方法是使用xpath从xml文档中提取所需的字段,并将这些字段作为json中“value”对象的属性传递。这样您就不会传递整个xml,而是只传递所需的字段。

相关问题