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

Can I use Marklogic Replication Alerting to run java

我一直在研究 marklogic 复制警报

http://docs.marklogic.com/guide/admin-api/flexrep#id_63603

我不清楚这些示例中的警报配置具体完成了什么。有人可以进一步详细说明吗? (要明确我理解卷曲方面)

配置警报

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

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": []
   }' \

http://localhost:8002/manage/v2/databases/master/alert/configs

使用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": []
   }' \

http://localhost:8002/manage/v2/databases/master/alert/actions ?uri=http://acme.com/alerting

一般来说,我希望从 master 在副本节点上执行 java api 客户端进程。 这可以通过复制警报来完成吗?

问候 康特

我没有使用过复制警报,所以我无法对此发表评论。但一般来说,如果您可以 运行 服务器端脚本,则可以通过 HTTP 调用 Java 网络服务器。如果您更喜欢服务器端 javascript,请使用 xdmp:http libraries (here。而且,当然,您需要 Java Web 服务器 运行ning 并准备好接受 HTTP 请求。为此,您可以使用 Tomcat、Spring Boot 等

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

flexrep 配置与警报配置 URI 关联,然后任何配置了用户的目标都将在警报配置中查找与该用户关联的查询。

通过利用警报 API,我们避免了必须创建新的 API 来管理特定于 flexrep 的查询。

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

这是否为您解决了问题?

如果 java 应用程序的唯一目的ose 是 运行 marklogic 客户端代码,后者又会回调到 marklogic 到 运行 代码否则不需要 java 那么你可以在服务器中的 xquery 或 javascript 中实现该逻辑,避免需要 java 服务器/进程 - 运行 管理更少,速度更快。

如果您想要 java 明确有许多轻量级的 http 服务器框架,例如 nginx,它可以启动 java 进程。如果预计这会很频繁,我不建议每次都启动一个新的 jvm --- java 有一个繁重的启动 cost。如果您 运行 在 aws 或 azure 等托管云环境中,您可以将他们的 'api gateway' 产品用于 运行 java 代码,作为 http 调用的结果而无需管理 'server'。一个粗略但有效的 possibility 只是写一个文件,有一个 cron 任务定期检查它并且 运行 java .. 这只有在你可以容忍(或想要)分钟以上时才有效java 的触发和启动之间的延迟。 (注意;aws 托管集群功能将此技术用于一些偶尔的任务)

更快的检测和启动可以通过 inotify/fsnotify 守护进程直接监视来实现——取决于 os 和 fikesystem 这可以在亚毫秒内触发(然后需要 100+ 毫秒开始 java) 妥协 - 使用基于 java 的文件观察器 ---

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