新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于云存儲實現(xiàn)用Windows Azure Storage增強應用程序的引擎

基于云存儲實現(xiàn)用Windows Azure Storage增強應用程序的引擎

作者: 時間:2010-04-17 來源:網(wǎng)絡 收藏

  現(xiàn)在,我們需要一個簡單的包裝來與我們的隊列交互。從本質(zhì)上說,我們需要能夠?qū)⑾⒉迦腙犃校@取任何掛起的消息并清除該隊列(請參見圖 3)。

  圖 3 用于與隊列交互的包裝

namespace HollywoodHackers..Queue 
{ 
  public class StdQueueT> : 
  Base where T : QueueMessageBase, new() 
  { 
    protected CloudQueue queue; 
    protected CloudQueueClient client; 
 
    public StdQueue(string queueName) 
    { 
      client = new CloudQueueClient 
      (Base.QueueBaseUri, StorageBase.Credentials); 
      queue = client.GetQueueReference(queueName); 
      queue.CreateIfNotExist(); 
    } 
    public void AddMessage(T message) 
    { 
      CloudQueueMessage msg = 
      new CloudQueueMessage(message.ToBinary()); 
      queue.AddMessage(msg); 
    } 
    public void DeleteMessage(CloudQueueMessage msg) 
    { 
      queue.DeleteMessage(msg); 
    } 
    public CloudQueueMessage GetMessage() 
    { 
      return queue.GetMessage(TimeSpan.FromSeconds(60)); 
    } 
  } 
  public class ToastQueue : StdQueueToastQueueMessage> 
  { 
    public ToastQueue() 
      : base(toasts) 
    { 
    } 
  } 
}

我們還需要為表設置一個包裝,以便在用戶登錄到站點之前可以用戶通知??梢允褂?PartitionKey(行集合的標識符)和 RowKey(可唯一標識特定分區(qū)中的每個單獨行)組織表數(shù)據(jù)。選擇 PartitionKey 和 RowKey 使用的數(shù)據(jù)是在使用表時所做的最重要的設計決策之一。

  這些特點允許跨存儲節(jié)點進行負載平衡,并在中提供內(nèi)置的可伸縮性選項。不考慮數(shù)據(jù)的數(shù)據(jù)中心關聯(lián)性,使用同一分區(qū)鍵的表存儲中的行將保留在相同的物理數(shù)據(jù)存儲中。因為針對每個用戶存儲對應的消息,所以分區(qū)鍵將是 UserName,而 RowKey 則成為標識每行的 GUID(請參見圖 4)。

  圖 4 表存儲的包裝

namespace HollywoodHackers.Storage.Repositories 
{ 
  public class UserTextNotificationRepository : StorageBase 
  { 
    public const string EntitySetName = 
    UserTextNotifications; 
    CloudTableClient tableClient; 
    UserTextNotificationContext notificationContext; 
    public UserTextNotificationRepository() 
      : base() 
    { 
      tableClient = new CloudTableClient 
      (StorageBase.TableBaseUri, StorageBase.Credentials); 
      notificationContext = new UserTextNotificationContext 
      (StorageBase.TableBaseUri,StorageBase.Credentials); 
 
      tableClient.CreateTableIfNotExist(EntitySetName); 
    } 
    public UserTextNotification[] 
    GetNotificationsForUser(string userName) 
    { 
      var q = from notification in 
          notificationContext.UserNotifications 
          where notification.TargetUserName == 
          userName select notification; 
      return q.ToArray(); 
    } 
    public void AddNotification 
    (UserTextNotification notification) 
    { 
      notification.RowKey = Guid.NewGuid().ToString(); 
      notificationContext.AddObject 
      (EntitySetName, notification); 
      notificationContext.SaveChanges(); 
    } 
  } 
}



評論


相關推薦

技術專區(qū)

關閉