Azure函数返回唯一序列号 [英] Azure function return unique sequence number

查看:17
本文介绍了Azure函数返回唯一序列号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的Azure。我想创建一个返回序列号的函数。我已经使用线程互斥锁创建了一个函数来锁定序列号。我用大约10k个并行请求测试了下面的代码。问题是我在做测试时得到了重复的序列号,互斥体不工作。我不确定如何避免重复,而是为每个请求生成流水号

Public class MySharedMutexCounter { 
  public static long count = 0; 
  public static Mutex ObjMutex = new Mutex(false,"SeqGenerator"); 
}  

public long GetSequnceNo(){
    long seqId = -1;
    
    try{
     MySharedMutexCounter.ObjMutex.waitOne();
     seqId =  ++MySharedMutexCounter.count;
     if(seqId > 100){
       MySharedMutexCounter.count = 0;
       seqId =  ++MySharedMutexCounter.count;
     }
     return seqId;
    }finally{
      MySharedMutexCounter.ObjMutex.RelaseMutex();
    }
    return -1;
}

推荐答案

问题是,Azure函数可以扩展到运行在不同计算机上的多个实例,因此您需要某种分布式锁或其他方式来确保不会对状态进行并发访问。

使用Durable Entity怎么样?它基本上是Durable Function可以访问的一段状态,针对该状态的操作以安全的方式执行:

为防止冲突,单个实体上的所有操作都保证顺序执行,即一个接一个地执行。

(source)

持久实体类似于分布式对象,因此函数的其他实例将使用相同的实体。

Developer Guide演示了一个使用计数器的很好的示例。有点符合您的设想。

这篇关于Azure函数返回唯一序列号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆