Sitecore.Analytics.Exceptions.ContactLockException
Sitecore.Analytics.Exceptions.ContactLockException
我是运行 Sitecore 8.2,有一个CM服务器和3个CD服务器。在我们的一台 CD 服务器上,我们不断收到以下错误:
5396 2017:12:18 00:00:59 ERROR Cannot finish Analytics page tracking
Exception: Sitecore.Analytics.Exceptions.ContactLockException
Message: Failed to extend contact lease for contact e629daf6-1176-4c55-9c17-31b45292212c
Source: Sitecore.Analytics
at Sitecore.Analytics.Tracking.ContactManager.SaveAndReleaseContact(Contact contact)
at Sitecore.Analytics.Pipelines.EndAnalytics.ReleaseContact.Process(PipelineArgs args)
at (Object , Object[] )
at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, Boolean failIfNotExists)
at Sitecore.Analytics.Pipelines.EndAnalytics.EndAnalyticsPipeline.Run()
at Sitecore.Analytics.Pipelines.HttpRequest.EndAnalytics.Process(HttpRequestArgs args)
我确认我可以远程登录 Mongo。我将配置文件与其他 CD 服务器上的配置文件进行了比较。代码库也与其他两个环境完全相同。有没有人对接下来要检查的内容有任何建议?我觉得我在这台服务器上遗漏了一些东西,因为它是唯一有这个问题的服务器。
您可能需要确保 (Sitecore.Analytics.Tracking.config) 中的 Analytics.ClusterName
对于每个 CD 站点都是唯一的,Sitecore 使用它作为集群的唯一标识符锁定联系人,当用户会话请求在 3 个 CD 服务器之间传输时,例如 CD1 上的 xDB 如果锁定在其他 CD (2&3) 上,则可能无法释放它。
您可以做的是:
- 确保每个 CD 服务器都有唯一的域或子域(例如,prod1.mywebsite.com、prod2.mywebsite.com ..etc),我通常不会这些唯一域可公开访问 (DNS),而只是使其在网络内可访问,只要每个 CD 都可以通过其唯一域与其他 CD 服务器通信
- 将每台 CD 服务器上的
Analytics.ClusterName
更新为您分配给它的唯一域。
更正:
我联系了 sitecore 支持以获取更多详细信息,他们告诉我,如果您有多个 CD 服务器的单个集群,那么您应该对所有 CD 服务器使用相同的 Analytics.ClusterName,如果您有多个集群并且每个集群都使用不同的会话数据库,那么每个集群中的 CD 服务器应该具有相同的 Analytics.ClusterName,每个集群都是唯一的,所以我上面的回答需要这个更正。
我是运行 Sitecore 8.2,有一个CM服务器和3个CD服务器。在我们的一台 CD 服务器上,我们不断收到以下错误:
5396 2017:12:18 00:00:59 ERROR Cannot finish Analytics page tracking
Exception: Sitecore.Analytics.Exceptions.ContactLockException
Message: Failed to extend contact lease for contact e629daf6-1176-4c55-9c17-31b45292212c
Source: Sitecore.Analytics
at Sitecore.Analytics.Tracking.ContactManager.SaveAndReleaseContact(Contact contact)
at Sitecore.Analytics.Pipelines.EndAnalytics.ReleaseContact.Process(PipelineArgs args)
at (Object , Object[] )
at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, Boolean failIfNotExists)
at Sitecore.Analytics.Pipelines.EndAnalytics.EndAnalyticsPipeline.Run()
at Sitecore.Analytics.Pipelines.HttpRequest.EndAnalytics.Process(HttpRequestArgs args)
我确认我可以远程登录 Mongo。我将配置文件与其他 CD 服务器上的配置文件进行了比较。代码库也与其他两个环境完全相同。有没有人对接下来要检查的内容有任何建议?我觉得我在这台服务器上遗漏了一些东西,因为它是唯一有这个问题的服务器。
您可能需要确保 (Sitecore.Analytics.Tracking.config) 中的 Analytics.ClusterName
对于每个 CD 站点都是唯一的,Sitecore 使用它作为集群的唯一标识符锁定联系人,当用户会话请求在 3 个 CD 服务器之间传输时,例如 CD1 上的 xDB 如果锁定在其他 CD (2&3) 上,则可能无法释放它。
您可以做的是:
- 确保每个 CD 服务器都有唯一的域或子域(例如,prod1.mywebsite.com、prod2.mywebsite.com ..etc),我通常不会这些唯一域可公开访问 (DNS),而只是使其在网络内可访问,只要每个 CD 都可以通过其唯一域与其他 CD 服务器通信
- 将每台 CD 服务器上的
Analytics.ClusterName
更新为您分配给它的唯一域。
更正:
我联系了 sitecore 支持以获取更多详细信息,他们告诉我,如果您有多个 CD 服务器的单个集群,那么您应该对所有 CD 服务器使用相同的 Analytics.ClusterName,如果您有多个集群并且每个集群都使用不同的会话数据库,那么每个集群中的 CD 服务器应该具有相同的 Analytics.ClusterName,每个集群都是唯一的,所以我上面的回答需要这个更正。