我可以使用Marklogic复制警报来运行java吗

我可以使用Marklogic复制警报来运行java吗,marklogic,Marklogic,我一直在研究marklogic复制警报 我不清楚这些示例中的警报配置具体实现了什么。有人能详细说明一下吗?(明确地说,我理解卷曲的各个方面) 配置警报 使用POST/manage/v2/databases/{id | name}/alert/configs创建 主数据库的警报配置 curl -X POST --anyauth --user admin:admin --header "Content-Type:application/json" \ -d '{ "uri": "http:/

我一直在研究marklogic复制警报

我不清楚这些示例中的警报配置具体实现了什么。有人能详细说明一下吗?(明确地说,我理解卷曲的各个方面)

配置警报 使用POST/manage/v2/databases/{id | name}/alert/configs创建 主数据库的警报配置

curl -X POST  --anyauth --user admin:admin
--header "Content-Type:application/json" \
-d '{
  "uri": "http://acme.com/alerting",
  "name": "qbfr",
  "description": "alerting rules for query-based flexrep",
  "trigger": [],
  "domain": [],
  "action": [],
  "option": []
   }' \

使用POST/manage/v2/databases/{id | name}/alert/actions创建 警报操作并将其应用于警报配置

curl -X POST  --anyauth --user admin:admin
--header "Content-Type:application/json" \
-d '{
  "name": "log",
  "description": "QBFR log action",
  "module": "/log.xqy",
  "module-db": "master-modules",
  "module-root": "/",
  "option": []
   }' \
?uri=

通常,我希望从复制副本中添加数据警报 master在副本节点上执行java api客户端进程。 这可以通过复制警报来完成吗

问候
Conteh

我没有使用复制警报,因此我无法对此发表评论。但一般来说,如果可以运行服务器端脚本,就可以通过HTTP调用JavaWeb服务器。使用这些库(如果您更喜欢服务器端javascript)。当然,您需要Java web服务器运行并准备好接受HTTP请求。为此,您可以使用Tomcat、Spring Boot等。

警报配置只是将一组查询与复制目标关联起来的一种方式,这样只有与这些查询中的一个或多个匹配的文档才会被复制。实际上没有任何形式的警报

flexrep配置与警报配置URI相关联,然后在其上配置有用户的任何目标将在警报配置中查找与该用户关联的查询

curl -X POST  --anyauth --user admin:admin
--header "Content-Type:application/json" \
-d '{
  "name": "log",
  "description": "QBFR log action",
  "module": "/log.xqy",
  "module-db": "master-modules",
  "module-root": "/",
  "option": []
   }' \
通过利用警报API,我们避免了创建新的API来管理特定于flexrep的查询

您只需创建警报配置,创建一些无需执行任何操作的操作,然后为每个与flexrep目标关联的用户创建规则。您不需要创建警报触发器,也不需要将警报添加到CPF管道中


这对您来说清楚了吗?

如果java应用程序的唯一目的是运行marklogic客户端代码,这反过来又调用marklogic来运行本来不需要java的代码,然后您可以在服务器中以xquery或javascript本机方式实现该逻辑,从而避免需要java服务器/进程——以更少的管理运行得更快

如果您明确地想要java,那么有许多轻量级http服务器框架,比如nginx,可以启动java进程。如果这种情况经常发生,我不建议每次都启动一个新的jvm——java的启动成本很高。如果您在aws或azure等托管云环境中运行,则可以使用他们的“api网关”产品运行http调用产生的java代码,而无需管理“服务器”。一种粗略但有效的方法是编写一个文件,让cron任务定期检查并运行java。。这只有在您能够容忍(或渴望)触发和启动java之间的分钟+延迟时才有效。(注意:aws托管群集功能将此技术用于一些临时任务)

inotify/fsnotify守护进程可以通过直接监视来实现更快的检测和启动,具体取决于操作系统和fikesystem,这可以在亚毫秒内触发(然后需要100毫秒才能启动java) 妥协-使用基于java的文件监视程序---


最简单且可能是“最佳”的答案是sam给出的第一个答案——运行一个长期运行的java应用程序,监听http请求。这可以通过选择许多“lite”http服务器库(包括内置于java中的库)中的一个高效地完成(大约5行java,没有依赖项)。如果您不想在与marklogic相同的服务器上运行,可以在docker中运行以与其他服务共享。

谢谢sam。是的,我希望运行一个Java web服务器,使用marklogic Java api客户端执行一些任务,作为复制警报的结果(如果可行)。如果进程是由于数据已被复制的警报而启动的,则会更干净。您可以在目标服务器上始终有一个调用本地java服务的触发器。我注意到,简单的触发器示例非常类似于log.xqy模块trgr:trigger模块(xdmp:database(“test”),“/modules/”,“log.xqy”)被执行。也许复制警报本质上类似于触发器。我注意到一个简单的触发器示例如果您不希望查询过滤实际复制的内容,则无需配置任何警报。谢谢@WayneFeick,,,,这很有意义