2017-10-16 14 views
0

新しいアイテムがAzureキューに着いたときに作業を開始しているバックグラウンドタスクでWebJobに切り替えました。今私は、私が説明できないRedis RedLockとStorageにアクセスする際に問題があると思われるいくつかの変わった問題があります。Azure Web Jobs Redis(RedLock)とBlobストレージアクセスの問題

今私がもっている最大の問題はRedLockです。私たちは分散ロックのためにRedLock.Netを使用しています。今これは我々のプロダクションWebアプリケーションではうまく動作し、バックグラウンドワーカーにも働いていましたが、WebJobに切り替えるとすぐにロックを取得できませんでした。いくつかのコードでこれをバックアップするには...私たちは、このようにロックされています

 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はWebjob内で常に偽であると私は手掛かり理由がありません!

2番目の問題は、WebJob内の404だけで失敗している、空白のストレージ内のBLOBファイルを削除することです。

var file = _blobContainer.GetBlockBlobReference("file.txt"); 
file?.Delete(); 

これは、WebJob内で404 Not found例外が発生すると失敗します。

私はwebjobの設定を忘れていますか?書き込み操作のアクセスに問題がありますか?助けてくれてうれしいですね!ロックが利用可能な場合

+0

'' WebJob内でのみ404で失敗する、空のストレージのblobファイルを削除する '' BlobがAzureポータルまたはAzureストレージエクスプローラ経由で存在するかどうかを確認するか、[Exists method](https:// docs。 blobの存在を確認するには、microsoft.com/en-us/dotnet/api/microsoft.windowsazure.storage.blob.cloudblob.exists?view=azurestorage-8.1.3#Microsoft_WindowsAzure_Storage_Blob_CloudBlob_Exists_Microsoft_WindowsAzure_Storage_Blob_BlobRequestOptions_Microsoft_WindowsAzure_Storage_OperationContext_)を参照してください。 –

答えて

0

IsAcquiredはいつも私がAzureのWebJobでRedLock.netを使用して、次のコードでテストを行うWebjob

内で偽のですが、私は、リソースのロックを獲得することができます。

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); 
} 

テストの結果:私はコメントで述べたように404

で失敗AzureストレージのBLOBファイルを削除 enter image description here

、かどうかを確認してくださいBlobがAzureポータルまたはAzureストレージエクスプローラ経由で存在すること、またはExists methodを呼び出してあなたがそれを削除する前にブロブ。