具有复杂 c# 代码的 Azure 函数



我在 c# 中有具有多个类的复杂代码(并且类具有不同的函数(,我想将其实现为 azure 函数。问题是架构如下:流数据作为输入,在类函数中进行复杂计算后,我需要再次将计算值作为流返回。要返回的值在类函数内部,我很难找到将它们返回到"运行"函数的方法。有什么简单的方法可以做到吗? 结构是这样的

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 函数(Run方法(将根据队列中的每个服务总线消息调用一次。这意味着您需要在函数调用中保留某些状态,例如以前的消息。

Azure 函数本身不提供任何可靠的进程内状态存储,因此需要使用外部存储(例如.SQL数据库、Cosmos DB、表存储等(。

您的函数流将如下所示:

  1. 为传入的服务总线消息调用Run
  2. 从外部存储加载函数的先前状态。
  3. 您实例化类 1/类 2/等层次结构。
  4. 将传入消息和状态传递给类 1/类 2。
  5. 逻辑会生成输出消息和/或新状态。
  6. 将状态保留回存储。
  7. 将输出消息返回到输出绑定。

如果你不需要任何外部状态,Azure Functions 可能不适合你的服务。 例如,您可能有一个 Web 作业,它不断运行并将一系列消息保存在内存中。

编辑:正如@Gaurav建议的那样,您应该看看 持久函数,但它们仍处于早期预览阶段。

你应该看看最近宣布Azure Durable Functions。不幸的是,我只阅读了它而没有使用它,因此我将无法提出它将如何解决您的问题。

我喜欢的一件巧妙的事情是,与常规函数不同,它们本质上是stateful的,可以让您持久化本地状态。

我喜欢的另一件事是,它适用于长时间运行的任务,这是您所追求的。

看看你的问题,我相信Function Chaining模式可能对你有用。

首先,Azure Functions 不是为复杂处理而设计的。相反,如果解决方案已在 Service Fabric 上,则可以考虑为此或微服务的辅助角色。

最新更新