具有复杂 C# 代码的 Azure 函数
Azure functions with complex c# code
我在 c# 中有复杂的代码,其中包含多个 classes(并且 classes 具有不同的功能),我想将其实现为 azure 函数。问题是架构如下:流数据开始作为输入,在 class 函数中进行复杂计算后,我需要再次 return 计算值作为流。 returned 值在 class 函数内部,我很难找到将这些 return 转换为 "run" 函数的方法。有什么简单的方法吗?
结构是这样的
public static void Run(string myQueueItem, TraceWriter log)
{
// gets data from service bus per second
call function 1
}
public class Class1
{
function1(){
call function2
}
}
public class Class2
{
function2()
output interested is in here and program creates an output after 30 31 seconds and continues to creates about every 20 second
)}
非常感谢
首先,Azure Functions 不是为复杂的处理而设计的。相反,如果您的解决方案已经在 Service Fabric 上,您可以考虑为此或微服务提供辅助角色。
你的问题不是很清楚,但是根据你的评论我了解到你的处理逻辑和计算结果依赖于多个传入的消息。
Azure 函数(Run
方法)将针对队列中的每个服务总线消息调用一次。这意味着你需要坚持一些状态,例如之前的消息,跨函数调用。
Azure Functions 本身不提供任何可靠的进程内状态存储,因此您需要使用外部存储(例如 SQL 数据库、Cosmos DB、Table 存储等)。
您的函数流程如下所示:
Run
为传入的服务总线消息调用。
- 您从外部存储加载函数的先前状态。
- 您实例化 Class1/Class2/etc 层次结构。
- 您将收到的消息和您的状态传递给 Class1/Class2。
- 您的逻辑会产生输出消息和/或新状态。
- 您将状态保存回存储。
- 你return将输出消息绑定到输出。
如果您不需要任何外部状态,Azure Functions 可能不适合您。例如。您可能有一个 Web 作业,它不断运行并在内存中保存一系列消息。
编辑:正如@Gaurav 所建议的,您应该看看
Durable Functions,但它们仍处于早期预览阶段。
你应该看看最近发布的Azure Durable Functions
。不幸的是,我只读过它并没有使用过它,因此我无法建议它究竟如何解决你的问题。
我喜欢它的一个巧妙之处在于,与您的常规函数不同,它们本质上是 stateful
,可以让您保留本地状态。
我喜欢它的另一点是它适用于长时间的 运行 任务,这正是您所追求的。
看了你的问题,我相信 Function Chaining
模式可能对你有用。
我在 c# 中有复杂的代码,其中包含多个 classes(并且 classes 具有不同的功能),我想将其实现为 azure 函数。问题是架构如下:流数据开始作为输入,在 class 函数中进行复杂计算后,我需要再次 return 计算值作为流。 returned 值在 class 函数内部,我很难找到将这些 return 转换为 "run" 函数的方法。有什么简单的方法吗? 结构是这样的
public static void Run(string myQueueItem, TraceWriter log)
{
// gets data from service bus per second
call function 1
}
public class Class1
{
function1(){
call function2
}
}
public class Class2
{
function2()
output interested is in here and program creates an output after 30 31 seconds and continues to creates about every 20 second
)}
非常感谢
首先,Azure Functions 不是为复杂的处理而设计的。相反,如果您的解决方案已经在 Service Fabric 上,您可以考虑为此或微服务提供辅助角色。
你的问题不是很清楚,但是根据你的评论我了解到你的处理逻辑和计算结果依赖于多个传入的消息。
Azure 函数(Run
方法)将针对队列中的每个服务总线消息调用一次。这意味着你需要坚持一些状态,例如之前的消息,跨函数调用。
Azure Functions 本身不提供任何可靠的进程内状态存储,因此您需要使用外部存储(例如 SQL 数据库、Cosmos DB、Table 存储等)。
您的函数流程如下所示:
Run
为传入的服务总线消息调用。- 您从外部存储加载函数的先前状态。
- 您实例化 Class1/Class2/etc 层次结构。
- 您将收到的消息和您的状态传递给 Class1/Class2。
- 您的逻辑会产生输出消息和/或新状态。
- 您将状态保存回存储。
- 你return将输出消息绑定到输出。
如果您不需要任何外部状态,Azure Functions 可能不适合您。例如。您可能有一个 Web 作业,它不断运行并在内存中保存一系列消息。
编辑:正如@Gaurav 所建议的,您应该看看 Durable Functions,但它们仍处于早期预览阶段。
你应该看看最近发布的Azure Durable Functions
。不幸的是,我只读过它并没有使用过它,因此我无法建议它究竟如何解决你的问题。
我喜欢它的一个巧妙之处在于,与您的常规函数不同,它们本质上是 stateful
,可以让您保留本地状态。
我喜欢它的另一点是它适用于长时间的 运行 任务,这正是您所追求的。
看了你的问题,我相信 Function Chaining
模式可能对你有用。