新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于云存儲實現用Windows Azure Storage增強應用程序的引擎

        基于云存儲實現用Windows Azure Storage增強應用程序的引擎

        作者: 時間:2018-09-11 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/201809/388914.htm

          現在,我們需要一個簡單的包裝來與我們的隊列交互。從本質上說,我們需要能夠將消息插入隊列,獲取任何掛起的消息并清除該隊列(請參見圖 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(可唯一標識特定分區中的每個單獨行)組織表數據。選擇 PartitionKey 和 RowKey 使用的數據是在使用表存儲時所做的最重要的設計決策之一。

          這些特點允許跨存儲節點進行負載平衡,并在應用程序中提供內置的可伸縮性選項。不考慮數據的數據中心關聯性,使用同一分區鍵的表存儲中的行將保留在相同的物理數據存儲中。因為針對每個用戶存儲對應的消息,所以分區鍵將是 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(); 
            } 
          } 
        }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 和平区| 湘潭市| 清河县| 合川市| 堆龙德庆县| 都安| 焦作市| 清镇市| 南汇区| 民权县| 淳化县| 达孜县| 科技| 阿拉善右旗| 汉寿县| 安远县| 安福县| 陈巴尔虎旗| 海盐县| 奈曼旗| 阿克苏市| 镇巴县| 辰溪县| 南陵县| 海淀区| 石门县| 河北省| 绥阳县| 阳原县| 桂阳县| 九龙城区| 乐业县| 唐海县| 文登市| 通渭县| 胶南市| 临桂县| 禄丰县| 隆尧县| 中卫市| 子洲县|