首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure Web作业Redis (RedLock)和Blob存储访问问题

Azure Web作业Redis (RedLock)和Blob存储访问问题
EN

Stack Overflow用户
提问于 2017-10-16 19:08:14
回答 1查看 188关注 0票数 0

我们使用后台任务切换到WebJobs,当一个新项目到达Azure队列时,这些任务就会开始工作。现在我们遇到了一些奇怪的问题,他似乎在访问Redis、RedLock和存储时遇到了问题,我无法解释。

现在我们遇到的最大的问题是RedLock。我们使用RedLock.Net进行分布式锁定。现在,这在我们的生产web应用程序中工作得很好,它也可以在我们拥有的后台工作者上工作,但当我们切换到WebJobs时,他基本上无法获得锁。要用一些code...we来支持这一点,需要像这样锁定:

代码语言:javascript
复制
        using (var redisLock = await _redLockConnection.RedisLockFactory.CreateAsync(resource, UserLockExpiryTime, UserLockWaitTime, UserLockRetryTime))
        {
            // make sure we got the lock
            if (redisLock.IsAcquired)
            {
                // execute code...
            }
            else
            {
                throw new CouldNotAcquireRedLockException();
            }
        }

这里的问题是,在网络作业中,IsAcquired总是假的,我不知道为什么!?

与此问题相关的第二件事可能是删除azure存储中的blob文件,该文件仅在WebJob内出现404失败。

代码语言:javascript
复制
var file = _blobContainer.GetBlockBlobReference("file.txt");
file?.Delete();

这将失败,并在WebJob中出现404未找到异常。

有没有什么我在设置webjob时漏掉的东西?这会不会是写操作的访问问题?如果有任何帮助我会很高兴的!

EN

回答 1

Stack Overflow用户

发布于 2017-10-17 17:49:47

在Webjob作业中,

IsAcquired始终为false

我使用Azure WebJob中的RedLock.net使用以下代码做了一个测试,如果锁可用,我可以获取资源上的锁。

代码语言:javascript
复制
public static void ProcessQueueMessage([QueueTrigger("mymes")] string message, TextWriter log)
{
    var azureEndPoint = new RedisLockEndPoint
    {
        EndPoint = new DnsEndPoint("{YOUR_CACHE}.redis.cache.windows.net", 6380),
        Password = "YOUR_ACCESS_KEY",
        Ssl = true
    };

    var eps = new[] { azureEndPoint };


    var rlf = new RedisLockFactory(eps);

    var resource = "https://{storageaccount}.blob.core.windows.net/{containername}/test.txt";
    var expiry = TimeSpan.FromSeconds(50);
    var wait = TimeSpan.FromSeconds(10);
    var retry = TimeSpan.FromSeconds(1);

    using (var redisLock = rlf.Create(resource, expiry, wait, retry))
    {
        Console.WriteLine("Lock acquired: " + redisLock.IsAcquired);
    }

    log.WriteLine(message);
}

测试结果:

删除azure存储中的blob文件失败,错误为404

正如我在评论中提到的,请通过Azure门户或Azure存储资源管理器检查该Blob是否存在,或者在删除之前调用Exists method检查该blob是否存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46768895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档