无法获取 HttpClient 缓存 - 没有可用于线程 id=1 的 ThreadContext
Could not get HttpClient cache - No ThreadContext available for thread id=1
我正在努力升级我们的服务以使用 3.63.0(从 3.57.0 升级),我注意到以下警告(带有堆栈跟踪)显示在日志中,而以前的版本:
2022-02-18 14:03:41.038 WARN 1088 --- [ main] c.s.c.s.c.c.AbstractHttpClientCache : Could not get HttpClient cache.
com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextAccessException: No ThreadContext available for thread id=1.
at com.sap.cloud.sdk.cloudplatform.thread.ThreadLocalThreadContextFacade.lambda$tryGetCurrentContext[=10=](ThreadLocalThreadContextFacade.java:39) ~[cloudplatform-core-3.63.0.jar:na]
at io.vavr.Value.toTry(Value.java:1414) ~[vavr-0.10.4.jar:na]
at com.sap.cloud.sdk.cloudplatform.thread.ThreadLocalThreadContextFacade.tryGetCurrentContext(ThreadLocalThreadContextFacade.java:37) ~[cloudplatform-core-3.63.0.jar:na]
at io.vavr.control.Try.flatMapTry(Try.java:490) ~[vavr-0.10.4.jar:na]
at io.vavr.control.Try.flatMap(Try.java:472) ~[vavr-0.10.4.jar:na]
at com.sap.cloud.sdk.cloudplatform.thread.ThreadContextAccessor.tryGetCurrentContext(ThreadContextAccessor.java:84) ~[cloudplatform-core-3.63.0.jar:na]
at com.sap.cloud.sdk.cloudplatform.connectivity.RequestScopedHttpClientCache.getCache(RequestScopedHttpClientCache.java:28) ~[cloudplatform-connectivity-3.63.0.jar:na]
at com.sap.cloud.sdk.cloudplatform.connectivity.AbstractHttpClientCache.tryGetOrCreateHttpClient(AbstractHttpClientCache.java:78) ~[cloudplatform-connectivity-3.63.0.jar:na]
at com.sap.cloud.sdk.cloudplatform.connectivity.AbstractHttpClientCache.tryGetHttpClient(AbstractHttpClientCache.java:46) ~[cloudplatform-connectivity-3.63.0.jar:na]
at com.sap.cloud.sdk.cloudplatform.connectivity.HttpClientAccessor.tryGetHttpClient(HttpClientAccessor.java:153) ~[cloudplatform-connectivity-3.63.0.jar:na]
at com.sap.cloud.sdk.cloudplatform.connectivity.HttpClientAccessor.getHttpClient(HttpClientAccessor.java:131) ~[cloudplatform-connectivity-3.63.0.jar:na]
at com.octanner.mca.service.MarketingCloudApiContactService.uploadContacts(MarketingCloudApiContactService.java:138) ~[classes/:na]
...
进行以下调用时会发生这种情况...
使用较低级别API
HttpClient httpClient = HttpClientAccessor.getHttpClient(destination); // warning happens here
ODataRequestResultMultipartGeneric batchResult = requestBatch.execute(httpClient);
使用更高级别API
service
.getAllContactOriginData()
.withQueryParameter("$expand", "AdditionalIDs")
.top(size)
.filter(filter)
.executeRequest(destination)); // warning happens here
即使此警告出现在日志中,服务请求仍按预期继续工作。看到这个有点担心,我想知道我是否配置有误。我查看了所有 java docs and the troubleshooting page,除了获取目的地的方式外没有发现任何异常,但即使使用 DestinationAccessor
似乎也没有什么不同。另外,我没有进行任何异步或多租户处理。
如能提供任何帮助或指导,我们将不胜感激!
干杯!
此类问题通常是缺少 Spring 引导注释的结果 - 特别是在同步执行中。
请参阅our documentation以了解有关 SAP Cloud SDK Spring 引导集成的更多信息。
编辑 2022 年 2 月 28 日
如果如果您的应用程序不需要任何 SAP Cloud SDK 的多租户功能,则忽略记录的警告是安全的。
错误原因
用于 Java 的 SAP Cloud SDK 最近(在版本 3.63.0
中)对 HttpClientCache
的线程传播行为进行了更改。
有了这个变化,我们还调整了日志记录,以防传播没有按预期工作——这通常是由于没有使用 ThreadContextExecutor
来包装异步操作造成的。
这就是问题作者描述的那种日志的原因。
计划缓解
与此同时,我们意识到这些 WARN
日志在消费者方面引起了混淆。
我们正在努力通过将消息的日志级别降级到 INFO
和异常的 DEBUG
来改善这种情况。
我正在努力升级我们的服务以使用 3.63.0(从 3.57.0 升级),我注意到以下警告(带有堆栈跟踪)显示在日志中,而以前的版本:
2022-02-18 14:03:41.038 WARN 1088 --- [ main] c.s.c.s.c.c.AbstractHttpClientCache : Could not get HttpClient cache.
com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextAccessException: No ThreadContext available for thread id=1.
at com.sap.cloud.sdk.cloudplatform.thread.ThreadLocalThreadContextFacade.lambda$tryGetCurrentContext[=10=](ThreadLocalThreadContextFacade.java:39) ~[cloudplatform-core-3.63.0.jar:na]
at io.vavr.Value.toTry(Value.java:1414) ~[vavr-0.10.4.jar:na]
at com.sap.cloud.sdk.cloudplatform.thread.ThreadLocalThreadContextFacade.tryGetCurrentContext(ThreadLocalThreadContextFacade.java:37) ~[cloudplatform-core-3.63.0.jar:na]
at io.vavr.control.Try.flatMapTry(Try.java:490) ~[vavr-0.10.4.jar:na]
at io.vavr.control.Try.flatMap(Try.java:472) ~[vavr-0.10.4.jar:na]
at com.sap.cloud.sdk.cloudplatform.thread.ThreadContextAccessor.tryGetCurrentContext(ThreadContextAccessor.java:84) ~[cloudplatform-core-3.63.0.jar:na]
at com.sap.cloud.sdk.cloudplatform.connectivity.RequestScopedHttpClientCache.getCache(RequestScopedHttpClientCache.java:28) ~[cloudplatform-connectivity-3.63.0.jar:na]
at com.sap.cloud.sdk.cloudplatform.connectivity.AbstractHttpClientCache.tryGetOrCreateHttpClient(AbstractHttpClientCache.java:78) ~[cloudplatform-connectivity-3.63.0.jar:na]
at com.sap.cloud.sdk.cloudplatform.connectivity.AbstractHttpClientCache.tryGetHttpClient(AbstractHttpClientCache.java:46) ~[cloudplatform-connectivity-3.63.0.jar:na]
at com.sap.cloud.sdk.cloudplatform.connectivity.HttpClientAccessor.tryGetHttpClient(HttpClientAccessor.java:153) ~[cloudplatform-connectivity-3.63.0.jar:na]
at com.sap.cloud.sdk.cloudplatform.connectivity.HttpClientAccessor.getHttpClient(HttpClientAccessor.java:131) ~[cloudplatform-connectivity-3.63.0.jar:na]
at com.octanner.mca.service.MarketingCloudApiContactService.uploadContacts(MarketingCloudApiContactService.java:138) ~[classes/:na]
...
进行以下调用时会发生这种情况...
使用较低级别API
HttpClient httpClient = HttpClientAccessor.getHttpClient(destination); // warning happens here
ODataRequestResultMultipartGeneric batchResult = requestBatch.execute(httpClient);
使用更高级别API
service
.getAllContactOriginData()
.withQueryParameter("$expand", "AdditionalIDs")
.top(size)
.filter(filter)
.executeRequest(destination)); // warning happens here
即使此警告出现在日志中,服务请求仍按预期继续工作。看到这个有点担心,我想知道我是否配置有误。我查看了所有 java docs and the troubleshooting page,除了获取目的地的方式外没有发现任何异常,但即使使用 DestinationAccessor
似乎也没有什么不同。另外,我没有进行任何异步或多租户处理。
如能提供任何帮助或指导,我们将不胜感激!
干杯!
此类问题通常是缺少 Spring 引导注释的结果 - 特别是在同步执行中。
请参阅our documentation以了解有关 SAP Cloud SDK Spring 引导集成的更多信息。
编辑 2022 年 2 月 28 日
如果如果您的应用程序不需要任何 SAP Cloud SDK 的多租户功能,则忽略记录的警告是安全的。
错误原因
用于 Java 的 SAP Cloud SDK 最近(在版本 3.63.0
中)对 HttpClientCache
的线程传播行为进行了更改。
有了这个变化,我们还调整了日志记录,以防传播没有按预期工作——这通常是由于没有使用 ThreadContextExecutor
来包装异步操作造成的。
这就是问题作者描述的那种日志的原因。
计划缓解
与此同时,我们意识到这些 WARN
日志在消费者方面引起了混淆。
我们正在努力通过将消息的日志级别降级到 INFO
和异常的 DEBUG
来改善这种情况。