- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在将大量对象从事件函数返回到协调器函数时遇到问题。
我有一个下载 180 MB 文件并解析它的函数。该文件将生成一个包含超过 962K 条目的对象列表。每个对象有大约 70 个属性,但只有大约 20% 被填充。
当我运行该函数时,代码成功下载文件并将其解析到列表中,但是当返回列表时,会引发异常并显示以下信息:
异常:“执行函数时出现异常:#######”
- 来源:“System.Private.CoreLib”
内部异常:“在函数返回后处理参数 $return 时出错。”
- 来源:“Microsoft.Azure.WebJobs.Host”
内部/内部异常:“抛出了‘System.OutOfMemoryException’类型的异常。”
- 来源:“System.Private.CoreLib”
最后一个嵌套异常将 NewtonsoftJson 包列为进行调用的包,该包生成报告的内存不足错误。我在最后包含了此异常的完整堆栈跟踪。
我知道我可以序列化对象列表并将它们存储在 Azure blob 条目中,然后在需要处理它的下一个函数中再次提取它,但我认为持久函数背后的想法是避免所有这些并且保持更精简的工作流程?此外,我的设计基于“大消息支持 #26”github 帖子,该帖子指出,如果大小超过队列消息限制,持久函数扩展将自动将函数有效负载存储在 blob 中(请参阅:https://github.com/Azure/azure-functions-durable-extension/issues/26)。
有什么我需要做的吗?
代码非常简单:
[FunctionName("GetDataFromSource")]
public static IEnumerable<DataDetail> GetDataFromSource([ActivityTrigger]ISource source, ILogger logger)
{
try
{
string importSettings = Environment.GetEnvironmentVariable(source.SettingsKey);
if (string.IsNullOrWhiteSpace(importSettings))
{
logger.LogError($"No settings key information found for the {source.SourceId} data source"); }
else
{
List<DataDetail> _Data = source.GetVinData().Distinct().ToList();
return vinData;
}
}
catch (Exception ex)
{
logger.LogCritical($"Error processing the {source.SourceId} Vin data source. *** Exception: {ex}");
}
return new List<DataDetail>();
}
at System.Text.StringBuilder.ExpandByABlock(Int32 minBlockCharCount)
at System.Text.StringBuilder.Append(Char value, Int32 repeatCount)
at System.Text.StringBuilder.Append(Char value)
at System.IO.StringWriter.Write(Char value)
at Newtonsoft.Json.JsonTextWriter.WritePropertyName(String name, Boolean escape)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
at DurableTask.Core.Serializing.JsonDataConverter.Serialize(Object value, Boolean formatted)
at Microsoft.Azure.WebJobs.Extensions.DurableTask.MessagePayloadDataConverter.Serialize(Object value, Int32 maxSizeInKB) in C:\projects\azure-functions-durable-extension\src\WebJobs.Extensions.DurableTask\MessagePayloadDataConverter.cs:line 55
at Microsoft.Azure.WebJobs.Extensions.DurableTask.MessagePayloadDataConverter.Serialize(Object value) in C:\projects\azure-functions-durable-extension\src\WebJobs.Extensions.DurableTask\MessagePayloadDataConverter.cs:line 43
at Microsoft.Azure.WebJobs.DurableActivityContext.SetOutput(Object output) in C:\projects\azure-functions-durable-extension\src\WebJobs.Extensions.DurableTask\DurableActivityContext.cs:line 136
at Microsoft.Azure.WebJobs.Extensions.DurableTask.ActivityTriggerAttributeBindingProvider.ActivityTriggerBinding.ActivityTriggerReturnValueBinder.SetValueAsync(Object value, CancellationToken cancellationToken) in C:\projects\azure-functions-durable-extension\src\WebJobs.Extensions.DurableTask\Bindings\ActivityTriggerAttributeBindingProvider.cs:line 213
at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ParameterHelper.ProcessOutputParameters(CancellationToken cancellationToken) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 972
最佳答案
我在使用 Durable Functions 时遇到了类似的问题。
有几个解决方案/解决方法:
正如您所说,您可以将函数负载存储在 blob 存储中,并在需要时检索它们。这有效,但会影响性能,并且可能需要一段时间才能检索,具体取决于您的文件有多大。
另一种选择是批量调用。我不完全确定你的 GetVinData()
方法可以,但您可以修改它,以便一次只能检索 50,000(o x 个)项目。您的协调器可以多次调用您的事件函数并在协调器中建立您的列表。
[FunctionName(nameof(OrchestratorAsync))]
public async Task OrchestratorAsync([OrchestrationTrigger] IDurableOrchestrationContext context)
{
var dataDetailList = new List<DataDetail>();
var batches = BuildBatchesHere();
foreach (var batch in batches)
{
dataDetailList.AddRange(
await context.CallActivityAsync<List<DataDetail>>(
nameof(GetDataFromSource), batch);
}
// Do whatever you need with dataDetailList
}
关于azure-durable-functions - Azure Durable Functions 大消息支持问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55012064/
我在将大量对象从事件函数返回到协调器函数时遇到问题。 我有一个下载 180 MB 文件并解析它的函数。该文件将生成一个包含超过 962K 条目的对象列表。每个对象有大约 70 个属性,但只有大约 20
我正在尝试实现 Azure Durable Function 工作流。 每隔 6 分钟,我就有一个 Azure TimerTrigger 函数调用一个 Azure 编排函数 (Orchestratio
我有一个包含 2 个部署槽的 Function App: S1 - 生产槽 S2 - 测试槽 功能App包含3个功能: F3 - webhook 功能,等待互联网响应 F2 - 通过互联网/HTTP
我正在尝试使用耐用功能进行编程。 程序的结构是客户端函数->编排函数->事件函数->...。程序结构如下。 这样的话,各个函数中的数据传输情况如何呢?return 语句的值是否存储在任务中心中并且下一
我有一个函数应用程序,它有一个时间触发函数、多个HTTP触发函数和2个持久函数。每个持久函数由一个 Durable Functions HTTP 启动器、Durable Functions 协调器和
我使用Azure功能开发了几个微服务,每个服务都有独立的用例和不同的编程语言。 现在我有一个用例可以按以下顺序使用所有服务,因此我又开发了一个 Azure 函数来按给定顺序使用所有服务。下面的代码运行
我正在考虑实现此处描述的并行 Azure Durable Functions 版本控制模式:https://learn.microsoft.com/en-us/azure/azure-function
在介绍 Azure Durable 函数时,他们提到我们可以编写有状态函数。有状态是什么意思以及维持什么状态?我们是在谈论函数的运行状态吗? 最佳答案 有状态函数是具有状态的函数,即一些数据与该函数相
我有一个无服务器功能,可以接收订单,每天大约 30 个。该函数依赖于第三方 API 来执行一些额外的查找和检查。但是,此外部端点并非 100% 可靠,如果其他 API 在几个小时(或更长时间)内不可用
文档指出,Azure Durable Function 编排代码应该是确定性的,因为重播。就我而言,我在 Azure 表存储中有一些数据,我需要在工作流程中获取这些数据。该工作流程是递归的,Azure
如果从 Azure ActivityFunctions 引发异常并且无法将其序列化为 json,则会引发包含原始异常作为 InnerException 的 TaskFailedExceptionDes
我有一个无服务器功能,可以接收订单,每天大约 30 个。该函数依赖于第三方 API 来执行一些额外的查找和检查。但是,此外部端点并非 100% 可靠,如果其他 API 在几个小时(或更长时间)内不可用
文档指出,Azure Durable Function 编排代码应该是确定性的,因为重播。就我而言,我在 Azure 表存储中有一些数据,我需要在工作流程中获取这些数据。该工作流程是递归的,Azure
如果从 Azure ActivityFunctions 引发异常并且无法将其序列化为 json,则会引发包含原始异常作为 InnerException 的 TaskFailedExceptionDes
我有一个持久的函数编排器,它可以扇出到多个事件函数来处理一些工作负载。以下代码是一个示例,其中 Function_2 是扇出以处理工作负载的代码: public static async Task R
我正在用 Python 编写一个复杂的树结构,每次运行代码时我都厌倦了创建树对象并用数据填充它们。 那么,有没有办法让您的对象在 Python 中“持久”。对于“持久”,我的意思是如果有一种方法可以将
我正在构建一个Azure Durable Function App,它每天由定时器触发1次。出于某种原因,我想保留上次运行的状态(例如 token 或数组),这可能吗? 很多官方文档都会以Azure
我了解 Azure Durable 函数使用一系列 Azure 存储队列和表来管理编排和状态。 最大事件响应是否会受到队列或存储属性限制 (64 Kb) 的限制? 事件结果究竟存储在哪里? 最佳答案
我有一个耐用的功能扇出和扇入模式,但似乎工作不可靠。每 10 分钟从计时器函数调用一次 Orchestration,但此后已将其增加到 20 分钟。使用 context.CallActivityAsy
我有多个 ETL 类型的任务,我计划执行无服务器。任务的执行时间从 5 到 30 分钟不等(取决于实例的数据量)。由于函数的超时时间为 10 分钟,因此这些任务无法在一个函数中一起执行。我最近在 Az
我是一名优秀的程序员,十分优秀!