Helix总结

发布于:2026-07-08 Adobe AEM 0条评论


——可通过目录快速定位——


一、线上已知问题总结、排查思路和注意事项

1、页面或者碎片(Fragment)发布后访问没有生效

首先去Splunk日志里面查看,是否在对应时间段有对应页面的提交记录,如下图:

其中上方两个红框中,左侧为对应环境的id(DEV:196277;QA: 196278; STAGING: 210971; Prod: 210970);右侧红框为路径,默认现在的就是整个Helix全路径,所有页面/Fragment匹配,所以如果不需要精确匹配则不需要修改;下方红框即为当前提交的页面地址。

解决方式:如果对应提交时间段确定没有查到对应的日志记录,那么说明当前Adobe AEM中的发布没有触发回调,这个问题是已知问题,只能等待并稍后重试发布,后续会针对这块逐步进行优化。

对应日志的查询地址:

页面:https://itsi.lenovo.com/en-US/app/search/search?q=search%20index%3D%22aem*%22%20aem_env_id%3D210970%20aem_tier%3Dauthor%20%22handleEvent%20Replication%20action%22%20%22%2Fcontent%2Faem-cms-2-0%2F%22&display.page.search.mode=smart&dispatch.sample_ratio=1&earliest=-24h%40h&latest=now&display.prefs.events.count=50&display.events.maxLines=0&sid=1758809345.691448_10FE1E57-9B5A-4368-93D6-DF6940076B23

Fragment:https://itsi.lenovo.com/en-US/app/search/search?q=search%20index%3D%22aem*%22%20aem_env_id%3D210970%20aem_tier%3Dauthor%20%22handleEvent%20Replication%20action%22%20%22%2Fcontent%2Fexperience-fragments%2Faem-xf-2-0%2F%22&display.page.search.mode=smart&dispatch.sample_ratio=1&earliest=-24h%40h&latest=now&display.prefs.events.count=50&display.events.maxLines=0&sid=1758795816.710163_66A45140-F786-4FA5-BDB2-46004C61B06B

临时手动处理推送

>>>>>>>>>>>>>20251015更新:可以直接使用后台接口去进行推送,参考第9条<<<<<<<<<<<<<<<<<<<<

①POSTMAN导入以下调用:

AEM Export.postman_colle…

②测试环境(SITA、UAT、PRE)

直接替换对应环境的这里sourceUrl为当前页面的URI,然后调用即可:

③生产环境

首先APIH_token中点击send申请token:

复制access_token里面的内容(注意这里最好把返回的body通过json转换,这样便于完整选择并复制access_token)至接口的Authentication:

然后同样修改对应sourceUri,最后点击send即可:

即可完成手动推送。

如果这里存在记录,则可以登录NUWA Admin后台查看是否已经存在路由:

解决方式:如果有记录,没有办法访问,则可以联系fanlf3协助进行排查;如果后台没有记录,那说明没有入库成功或者是推送失败则可以查看下一步排查思路,。

如果上一步中没有记录,则可以排查接口推送是否成功,同样splunk日志中查看:

查看日志中是否存在提交,并且得到了接口返回,其中sourceUrl就是当前页面/Fragment的路径

日志查询地址:https://itsi.lenovo.com/en-US/app/search/search?q=search%20index%3D%22aem*%22%20aem_env_id%3D196278%20aem_tier%3Dauthor%20%22HelixPushRouterService%22&amp;display.page.search.mode=smart&amp;dispatch.sample_ratio=1&amp;earliest=-24h%40h&amp;latest=now&amp;display.prefs.events.count=50&amp;display.events.maxLines=0&amp;sid=1758852342.710022_10FE1E57-9B5A-4368-93D6-DF6940076B23

2、环境对应关系

Adobe AEM的与NUWA环境整体关联对应关系:

3、页面请求链路

以NUWA SitA环境为例大致如下,其他环境地址不一样,逻辑一样

总体剖析来看,路径从外到内就是以下步骤:

4、Fragment请求链路(临时)

Fragment的list也是通过HybridControl进行转发调用的,NUWA admin里面通过hybridControl调用AEM的Author fragment list:https://author-p44761-e210970.adobeaemcloud.com/exp-services/lenovo/nexus/getFragListServlet.json 获取AEM的fragment路径。

然后NUWA CMS装修页根据拿到的list进行搜索展示后,可拖入页面中使用,访问流程就是下图所示:

请求步骤路径大致如下:

5、权限申请

5.1 Adobe AEM相关权限申请

Alisa姐:chenhh7

涉及所有关于Adobe侧的权限(splunk、git、Experience manager、author等等)

5.2 Flash相关权限申请

5.2.1 日志平台、服务器权限

yuanming:fupz2、minym1

涉及所有关于开发的运维平台,比如日志、服务器等等。

5.2.2 Admin后台

leilian1,lill25,menggq2,fupc2,yinkl1

所有涉及Admin后台的权限,比如登录、接口、菜单等等。

申请权限如果需要提Jira ticket,可参考:

ECOPS-16696
- Getting issue details... STATUS

如果需要经理审批,可联系睿哥xierui1进行留言。

6、接口网关调用认证关系

6.1 Adobe AEM调用NUWA

AEM侧调用NUWA的接口,目前对接了APIM(WSO2)和APIH两个网关平台,通过将NUWA内网的HybridControl接口注册到网关平台,然后将接口内容进行返回。

目前除了生产由于APIH的白名单限制导致没法获取token,因此使用了APIM,其他环境均使用APIH接口,通过参数:helixDefaultFlashAuthInterfaceSwitch 配置,1为APIM(WSO2);2为APIH

APIH攻略:APIH接口信息汇总 

APIH测试后台地址:https://apih-test.lenovo.com/

APIH生产后台地址:https://apih.lenovo.com/home

APIM攻略:WSO2快速发布接入指南

APIM后台地址:https://apih-test.lenovo.com/home (测试生产都在这上面配置)

6.2 NUWA调用Adobe AEM

相当于NUWA的admin后台服务,前端通过hybridControl服务中转调用AEM接口,在hybridControl中通过对接Adobe AEM Technical Account进行认证后,调用AEM Author接口获取数据。

注意:以上内容仅作了解参考,实际配置完毕后,不需要再去做设置,除非网关平台出现问题,这个情况算异常情况另行处理。

7、手动快速清理Dispatcher缓存工具

https://author-p44761-e210970.adobeaemcloud.com/exp-services/lenovo/helix/clearDispatcher?urls=/exp-services/lenovo/helix/content.json/us/en/lorem-ipsum-hme.html,/exp-services/lenovo/helix/content.json/us/en/eiusmod-tempor-ai.html,/exp-services/lenovo/helix/content.json/us/en/eiusmod-tempor-ai/dolore-magna-con-creat.html,/exp-services/lenovo/helix/content.json/us/en/eiusmod-tempor-ai/dolore-magna-dat-sci.html,/exp-services/lenovo/helix/content.json/us/en/eiusmod-tempor-ai/dolore-magna-dig-assist.html

https://author-p44761-e210970.adobeaemcloud.com/exp-services/lenovo/helix/clearDispatcher?urls=/exp-services/lenovo/helix/content.json/us/en/index.html,/exp-services/lenovo/helix/content.json/us/en/ai.html,/exp-services/lenovo/helix/content.json/us/en/ai/content-creation.html,/exp-services/lenovo/helix/content.json/us/en/ai/data-science.html,/exp-services/lenovo/helix/content.json/us/en/ai/digital-assistants.html

从sprint-68之后,直接传对应uri即可,如:

https://author-p44761-e210970.adobeaemcloud.com/exp-services/lenovo/helix/clearDispatcher?urls=/us/en/index,/jp/ja/about/sponsorship/fifa

urls后面跟需要清理Dispatcher的uri(带不带.html结尾均可),英文逗号分割

8、手动快速清理CDN缓存工具

http://rduwpesmsp4.lenovo.com/CCU-Purge-UI/akamaiPurge.pl


https://www.lenovo.com/us/en/ai
https://www.lenovo.com/us/en/ai/content-creation
https://www.lenovo.com/us/en/ai/data-science
https://www.lenovo.com/us/en/ai/digital-assistants
https://www.lenovo.com/us/en/

9、手动推送页面路由

该功能相当于直接手动触发了AEM发布页面后的回调动作

https://author-p44761-e196278.adobeaemcloud.com/exp-services/lenovo/helix/pagePublish?path=/content/aem-cms-2-0/na/us/public/en/mtest,/content/aem-cms-2-0/na/us/public/en/mtest

GET or POST皆可,根据环境改用对应的Author Domain即可

参数为实际访问节点的路径,如:/content/aem-cms-2-0/na/us/public/en/mtest

如果需要删除路由,可以直接追加type参数,参数值随意,如type=2,默认不带type是新增/保存页面路由

10、手动推送reserved url配置

# 新增
curl --location 'http://ofp-hybrid-control.docker-ofp-uat.lefile.cn/reserved/save' --header 'Content-Type: application/json' --data '["/test_reservedpage"]'

# 删除
curl --location 'http://ofp-hybrid-control.docker-ofp-uat.lefile.cn/reserved/delete' --header 'Content-Type: application/json' --data '["/test_reservedpage"]'

11、新建站点的页面发布后访问404

①首先检查站点的最底层站点层级是否满足/region/country/site/language/page_uri的结构(默认是有自动更新的机制,如果没有或者有误,需要人工检查);

其中title对应国家(英文逗号分割),value对应region,保证这个映射即可

②去genericList发布region-list的映射:https://author-p44761-e210970.adobeaemcloud.com/generic-lists.html/etc/acs-commons/lists/lenovo/hybrid/structure

注意:如果新增了region和country关系,那么必须得发布该generic-list,否则publish节点还是读取不到最新的配置!

12、Affinity站点发布后没有清除缓存

①检查对应generic-list里面,是否配置了对应Affinity站点的groupCode关系

# 生产路径(其他环境改了对应domain即可)
https://author-p44761-e210970.adobeaemcloud.com/mnt/overlay/acs-commons/components/utilities/genericlist.html?item=/etc/acs-commons/lists/lenovo/hybrid/structure/site-folder

②title对应affinity站点siteroot前缀,value对应groupcode(英文逗号分割)

维护完以后保存即可,这里不需要发布,因为这里的内容是在author下读取发布的。

13、index首页的导航头没有展示

解决方式:刷新页面的CDN

原因:新节点启动的时候,正好页面CDN缓存失效回源到该节点,此时如果调用导航接口返回的内容为空,那么会出现(后续将会逐渐进行优化)

二、本地问题汇总

1、MAC端本地在初步成功启动author(即:4502访问正常),在进行模板新建时,出现空白页无法编辑情况,参考9、问题及其他汇总 中添加环境变量,除 方法3 可直接解决外,其余添加环境变量方式均未解决。

     问题点:增加环境变量(在.zshrc中添加), 重启author后,访问404,并且 9、问题及其他汇总 中 404解决方案也并未生效;

                    此时仅能访问configMgr页面,其余均不可以访问;并且此时使用 方法3 也并未解决;

     若考虑将环境变量永久设置并且不考虑方法3,需要执行以下步骤,同时也建议在本地环境搭建的初始阶段,直接进行该设置(即:启动前完成环境变量配置)

    (1)停掉当前的aem实例服务;

    (2)删除author目录下的crx-quickstart文件夹;

    (3)添加环境变量,具体看mac系统版本,新版本环境变量在 ~/.zshrc 下进行添加,以下为大概执行步骤及终端指令

             a、编辑 ~/.zshrc:

                     nano  ~/.zshrc

             b、拉到最下边,添加如下环境变量:

                  # AEM Environment Variables

                 export AEM_EXTERNALIZER_LOCAL="http://localhost:4502"

                 export AEM_EXTERNALIZER_AUTHOR="http://localhost:4502"

                 export AEM_LENOVO_EXTERNALIZER_PUBLISH="http://localhost:4503"

           c、保存并退出:

                           Ctrl+O → Enter → Ctrl+X

           d、使配置立即生效并验证:

                           source ~/.zshrc

                           echo $AEM_EXTERNALIZER_LOCAL
                           echo $AEM_EXTERNALIZER_AUTHOR
                           echo $AEM_LENOVO_EXTERNALIZER_PUBLISH              

     (4)重启并进行验证,可以正常访问并操作;也可以查看configMgr页面,搜索“Day CQ Link Externalizer”,显示如下内容:

                         

2、本地重启电脑后,再次启动author,页面访问404,查看error.log,提示缺少 $[env:slingMaxCallsNumber] ,再对该参数补充后,再次启动访问正常。

      注:问题为代码改动,增加了默认值

            env:slingMaxCallsNumber;default=1800

      (1)日志打印如下:

               

      (2)解决方案:在启动author前,设置环境变量(仅对当前终端窗口生效,其中1000仅为默认值)

              export slingMaxCallsNumber=1800

      (3)该参数解释:

            slingMaxCallsNumber 及其对应的OSGi配置属性 sling.max.calls 是 Apache Sling框架中的一个重要安全机制。

            核心作用:防止无限递归调用

            它的主要目的是防止由于编程错误或恶意请求导致的无限递归调用,从而保护AEM服务器不会因此类错误而耗尽资源、崩溃或失去响应。

            工作原理:

    1. 计数器:Sling框架会为每一个进入的HTTP请求(Sling Request)维护一个计数器。

    2. 计数递增:每当处理一个请求时,如果这个请求内部又通过Sling的机制(例如 sling.includesling.forward 或者通过 RequestDispatcher 的调用)发起了另一个对Sling资源的调用,这个计数器就会加1。

    3. 阈值检查:在每次递增后,Sling会将当前计数值与配置的 sling.max.calls 阈值进行比较。

    4. 触发保护:如果计数值超过了 sling.max.calls 的设定值,Sling会立即终止当前请求的处理,并向客户端返回一个 500 Internal Server Error 响应,同时在日志中记录一条错误信息,大致内容是 "Max call level has been exceeded"。

3、本地导航栏无法正常显示,flashHeaderService服务异常

       注:问题为本地缺少参数配置,需访问 http://localhost:4502/system/console/configMgr 对如下服务的配置参数进行补充(基本与代码中的默认值保持一致)。

               同时也可访问 http://localhost:4502/system/console/components ,查看涉及的服务状态是否为“active”,如果为fail查看具体报错日志,如下:

                                             

     (1)在 flashHeaderServiceImpl 中有涉及lenovoApiEndpointService的调用,获取  flashHeaderDomainURL。 其中 lenovoApiEndpointService                              (com.lenovo.platform.core.services.impl.LenovoApiEndpointServiceImpl)服务异常,缺少如下配置:

               

             

              Domain URL(for header/for footer):https://www.lenovo.com/ 

            Endpoint URL(for header):/get_nav_api/site_common_frag/masthead/header.html

            Endpoint URL(for footer):/get_nav_api/site_common_frag/footer/footer.html

    (2)在 flashHeaderServiceImpl 中有涉及 lenovoNavigationService调用,并且 lenovoNavigationService服务异常,需修改如下配置:

           

4、本地测试问题修复-待修改配置列表

         访问http://localhost:4502/system/console/configMgr 进行配置的修改         

问题服务名称配置名称备注
导航栏无法显示com.lenovo.platform.core.services.impl.LenovoApiEndpointServiceImplRequest Timeout config for API calls30
Socket Timeout config for API calls30
Connect Timeout config for API calls30
numberofRetries3
Lenovo Flash Domain URLhttps://www.lenovo.com/
Lenovo Flash Endpoint URL/get_nav_api/site_common_frag/masthead/header.html
Lenovo Flash Domain URLhttps://www.lenovo.com/
Lenovo Flash Endpoint URL/get_nav_api/site_common_frag/footer/footer.html
Request MaxTotal config for API calls500
Request MaxPerRoute config for API calls100
com.lenovo.platform.core.services.impl.LenovoNavigationServiceImplFlash Navigation Cache Duration300000
Flash Navigation API Retry Count3

  

——————————————————提供两个一键启动脚本可供尝试(Beta阶段,有问题随时反馈):——————————————————

——————————————————提供两个一键启动脚本可供尝试(Beta阶段,有问题随时反馈):——————————————————

——————————————————提供两个一键启动脚本可供尝试(Beta阶段,有问题随时反馈):——————————————————

针对Windows下使用:

run.bat

针对Mac下使用:

run.sh

使用方式:

直接按照自己的操作系统分别把对应脚本放到自己的aem-author-p4502.jar的同级目录下,执行即可,如果不想放到一个目录,则把FALLBACK_AEM_DIR后面的路径替换成自己的即可。

如果没有配置过JAVA_HOME,那么需要把脚本中FALLBACK_JAVA_HOME后面的路径替换成自己的即可

三、项目熟悉

1、主要为当前代码模块划分及相关代码定位。

      (1)模板相关:主要在 ui.content下

        当前的page,“lenovo Helix Base Page”为基础,其他三个均继承base page实现(主要为模板相关的属性)

                       

         对应代码位置(lenovo-cms): 模板相关的的在ui.content下

                     

          查看lenovo-hybrid-base-template/.content.xml,可以看到base-template模板类型的指向

                   

          查看框架组件(base-page/initial/.content.xml),在不进行任何装修的情况下,最基本的组成,并且对应的组件在ui.apps下

                 

       (2)组件相关:主要在 ui.apps下。并且一般修改的是head.html

               

             其中在head.html中,有一部分使用到java代码处理的逻辑,主要获取相关字段的取值。“data-sly-use” 是 Adobe Experience Manager (AEM) 中 Sightly (HTL) 模板语言的一个指令,用于在HTML中调用Java或JavaScript逻辑。

               

              在PagePropertiesModel中,init()会初始化,完成页面属性的初始化赋值处理;

       2、以 NEXUS-595(Base Template - SEO requirements MS1)为例,分析链路为 base-template =>  base-page  => structure/page/v1/page  =>  page.html  => head.html   

       3、AEM与hybrid-control之间调用关系:

               lenovo-platform/core/src/main/java/com/lenovo/hybrid/listeners/NexusPagePublishEventHandler.java

            (1)aem进行publish操作,调用hybrid-control中 /router/save

                     source_url:aem上送过来的时候,会将public层级处理去掉(如:aem原始路径为/aem-cms-2-0/na/us/public/en/cs-helix-fiv,上送是为/aem-cms-2-0/na/us/en/cs-helix-fiv)

                     大致处理逻辑为:

                     a.path判断:只有当hybrid站点才进行后续处理步骤(配置为Nexus Configuration -》 SiteRoots)

                     b.调用helix-control:包含token校验、url的判断(主要为发布或取消发布时,调用的hybrid-control的api的调用)、请求体组装及调用(同时有重试机制)

                     c.当前为发布操作,则需刷新缓存

            (2)aem进行unpublish操作,调用hybrid-control中 /router/delete

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理