Aem CQ中自动递增唯一数的生成策略

Aem CQ中自动递增唯一数的生成策略,aem,Aem,我需要以编程方式创建CQ页面。但挑战在于页面名/uri应该是字符串+唯一数字的自动生成组合(例如PT2000、PT2001) 有人能告诉我一种在CQ中生成自动增量id/常量的方法吗?这种方法即使有多个并发请求,id也是唯一的?使用一种服务,它为您提供id,并管理易失性实例变量中的计数器,以确保一个线程的状态更改立即传达给所有线程其他线程 只要您能够保证您的实现在单个作者节点上运行,这应该可以做到这一点。在集群场景中,您还必须注意只在一个节点上执行它。我建议创建一个服务,在存储库中的某个位置管理其

我需要以编程方式创建CQ页面。但挑战在于页面名/uri应该是字符串+唯一数字的自动生成组合(例如PT2000、PT2001)


有人能告诉我一种在CQ中生成自动增量id/常量的方法吗?这种方法即使有多个并发请求,id也是唯一的?

使用一种服务,它为您提供id,并管理易失性实例变量中的计数器,以确保一个线程的状态更改立即传达给所有线程其他线程


只要您能够保证您的实现在单个作者节点上运行,这应该可以做到这一点。在集群场景中,您还必须注意只在一个节点上执行它。

我建议创建一个服务,在存储库中的某个位置管理其计数器,并充当jcr EventListener。服务应该侦听cq:Page类型的父节点上添加的节点事件,一旦调用了onEvent,它就可以在该点分配唯一的id。显然,您希望使用同步,以便对OneEvent()的重叠调用不会使用相同的id。

您可以使用GUID、图形用户id,生成的id很可能具有唯一性。 参见维基参考 要创建GUID,请执行以下操作:


这将简化您验证数字是否唯一的工作,因此只需生成ID并使用该ID创建页面。

AEM不会自动将数字附加到同名页面吗


如果没有,那么这可能会失败,在这一点上,你开始与下一个数字。在这种情况下,最好的猜测就足够了。

正如您所说,集群中的这种情况需要特殊处理。有没有办法确保被调用的http端点只在master中执行(通过一些http参数或其他方式)?我认为,从节点可以调用主节点,主节点可以是创建此唯一IDI的单点。在集群场景中,通常在前面使用负载平衡器在创作节点之间分散负载。因此,在这里,我将确保任何带有特定参数的post请求都会被定向到主服务器。还有一种网关代理或Web服务器也可以。我喜欢将计数器保存在存储库中的想法。但是侦听Node_添加的id生成器服务听起来像是只有在创建页面后才能创建uniqueId,而我的用例是需要创建页面,页面名称/uri是uniqueId。@Shan25找到解决方案了吗?那么,创建一个服务来创建一个节点,并在此时分配一个uid属性,然后将该节点返回给调用方怎么样?