我可以使用Marklogic Replication Alerting来运行java

时间:2016-04-11 12:41:35

标签: marklogic

我一直在研究marklogic复制警报

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

我不清楚这些示例中的警报配置具体到底是什么。有人可以进一步阐述吗? (要清楚我理解卷曲方面)

配置警报

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

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客户端进程。 这可以通过复制警报来完成吗?

此致 康特

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

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

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

这能为你解决问题吗?

答案 2 :(得分:0)

如果Java应用程序的唯一目的是运行marklogic客户端代码,而该代码又回叫到marklogic以运行不需要Java的代码,则可以在服务器中的xquery或javascript中实现该逻辑本机运行,并且不需要Java服务器/进程-运行速度更快,管理更少。

如果您明确想要Java,则有许多轻量级的http服务器框架(例如nginx)可以启动Java进程。如果这种情况经常发生,我不建议您每次都启动一个新的jvm --- Java的启动成本很高。如果您在aws或azure之类的托管云环境中运行,则可以利用其“ api网关”产品作为http调用的结果来运行Java代码,而无需管理“服务器”。一个粗略但有效的可能性就是简单地编写一个文件,并定期执行cron任务检查该文件并运行Java ..仅当您可以容忍(或希望)触发和启动Java之间的分钟+延迟时,这才有效。 (请注意; aws托管集群功能将这种技术用于一些偶尔的任务)

可以通过inotify / fsnotify守护进程直接监视来实现更快的检测和启动-根据os和fikesystem的不同,这可能会在不到毫秒的时间内触发(然后花费100毫秒以上的时间来启动Java) 妥协-使用基于Java的文件监视程序---

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