מדריך Windows Azure – שימוש ב Queues

‏ • John Bryce

הוספת רשומות לתור  וביצוע עיבוד לתמונה באמצעות ה- Worker Role.

במדריך הקודם יצרנו WebRole ב ASP.NET.

במשימה זו נכתוב את הרשומות אל התור, שממנו יקרא ה- Worker Role ויבצע עיבוד(הקטנה/ הגדלה וכו’)  לתמונות. את החלק של ה- Worker Role נכתוב בהמשך.

 

Qqueue storage API

 

  פתח את קובץ הקוד של הדף הראשי בWebRole. קליק ימני על הדף ב Solution explorer בחרו את Default.aspx ולחצו על View code.

  • הגדר משתנה מסוג CloudQueueClient בדף. כמו הדוגמא הבאה (יש להתייחס לחלק המודגש)
public partial class _Default : System.Web.UI.Page
{
  private static bool StorageInitialized = false;
  private static object gate = new Object();
  private static CloudBlobClient blobStorage;
  private static CloudQueueClient queueStorage;
  ...
}
  • כעת, עדכן את האיתחול של ה- Storage על מנת ליצור את ה- Queue אם הוא לא קיים, ומבצע השמה את המשתנה שהגדרנו הסעיף הקודם. הוסיפו את הקוד הבא מיד אחרי החלק של אתחול ה- Blob container.
public partial class Default : System.Web.UI.Page
{
  //...
  private void InitializeStorage()
  {
    //...
      try
      {
        //...
        // configure container for public access
        var permissions = container.GetPermissions();
        permissions.PublicAccess =
          BlobContainerPublicAccessType.Container;
        container.SetPermissions(permissions);

        // create queue to communicate with worker Role
        queueStorage =
          StorageAccount.CreateCloudQueueClient();
        CloudQueue queue =
          queueStorage.GetQueueReference("guestthumbs");
        queue.CreateIfNotExist();
      }
      catch (WebException)
      {
      //  ...
      }
  }
}
  •    הקוד יוצר את התור שישמש להעברת הודעות מהWeb Role אל ה- Worker Role.
  • כעת יש לכתוב את הקוד שמוסיף רשומה אל התור ע"י ב Web Role. כתוב את הקוד הבא בתוך הפונקציה SignButton_Click, והוסף את הקוד המודגש על מנת להוסיף רשומה אל התור.
protected void SignButton_Click(object sender, EventArgs e)
{
  if (FileUpload1.HasFile)
  {
    //...

    // create a new entry in table Storage
    GuestBookEntry entry = new GuestBookEntry()
    {
      GuestName = NameTextBox.Text,
      Message = MessageTextBox.Text,
      PhotoUrl = blob.Uri.ToString(),
      ThumbnailUrl = blob.Uri.ToString()
    };
    GuestBookDataSource ds = new GuestBookDataSource();
    ds.AddGuestBookEntry(entry);
    System.Diagnostics.Trace.TraceInformation(
@"Added entry {0}-{1} in table Storage for
                              guest'{2}'"
, entry.PartitionKey, entry.RowKey, entry.GuestName);

    // queue a message to process the image
    var queue = queueStorage.GetQueueReference("guestthumbs");
    var message = new CloudQueueMessage(String.Format("{0},{1},{2}"
      , blob.Uri.T4oString(), entry.PartitionKey, entry.RowKey));
    queue.AddMessage(message);
    System.Diagnostics.Trace.TraceInformation("Queued message to process blob '{0}'"
      , uniqueBlobName);
  }
}

הקוד הבא מקבל Reference אל תור ששמו " guestthumbs", אנו יוצרים הודעה חדשה שמכילה את כתובת התמונה, RowKey ו PartitionKey כטקסט מופרדים ע"י פסיק. בפשטות יוכל ה- Worker Role לחתוך את המחרוזת ולשלוף את הערכים.

איך בודקים אם הכל עובד ?!

כאשר אנחנו מפתחים עבור Windows Azure קיים לנו Emulator שמדמה את המצב על הענן (מוכר בשם Developent Fabric או devFabric) על המכונה הלוקאלית שלנו. במשימה הבאה נעבוד עם בdevFabric על מנת לבדוק את אפליקציה ספר האורחים.

  • לחץ על F5 על מנת להריץ בסביבת debug. השירות ירוץ ויפתח את ה- Emulator. ניתן לראות אותו על הTask bar. על מנת לראות את המסכים שלו יש ללחוץ קליק ימני על האייקון ולבחור Show Compute Emulator UI.

תפריט האייקון של סביבת העבודה

שימו לב:

הEmulator עובד מול Database מקומי. בהפעלה הראשונה שלו הוא יצור את הטבלאות הרלוונטיות ב DB. במקרה זו יוצג המסך הבא :

Development Storage Initialization

 

  • עבור ל Internet explorer על מנת לראות את ספר האורחים.
  • הוסף רשומה חדשה לספר האורחים, על מנת לבע זאת הזן נתונים בתיבת הטקסט ובצע upload לתמונה שתבחר.

 

 מסך הפתיחה

מומלץ לבחור תמונה באיכות גבוהה – הWorker Role אמור אחרי העלאה לבצע הקטנה לתמונה בכל מקרה.

כעת שסיימנו להעלות את התמונה הWeb Role יצר את רשומה ב Table וביצע שמירה של התמונה לתוך ה- Blob. קיים Timer על הדף שאחת ל 5 שניות שמבצע עדכון לדף. כך ש5 שניות אחרי שביצענו את השמירה אנו אמורים לראות את התמונה על הדף.

 

מסך לאחר הוספת רשומה לספר האורחים

  • אם אתם עובדים על 2010 ניתן להשתמש ב Windows Azure Storage Explorer על מנת לראות את ה- Storage account. אפשרות זו לא קיימת ב VS 2008.
  • על מנת לראות את הStorage explorer יש לבחור בתפריט view – Server Explorer. מצד שמאל נפתח הסרגל. יש לבחור את Windows Azure Storage node ואז יש לפתוח את Development.

Server explorer

  • לחץ דבלקליק על GuestBookEntry על מנת לראות את תוכן הטבלה. רשומה של GuestBookEntry מכילה את כל השדות שהגדרנו בחלק הקודם. שימו לב שכעת PhotoUrl ו ThumbnailUrl מכילים את אותם נתונים בדיוק. בחלק הבא נשנה את האפליקציה כך שנשנה את התמונה ל Thumbnail ונעדכן את השדה ThumbnailUrl.

תצוגת תוכן הטבלה

  • פתח את החלק של ה- blob בעץ מצד שמאל, מצא את guestbookpics המכיל את התמונות שהמשתמשים מעלים ל"ענן".

Server Explorer - Blobs

  • לחץ דבלקליק על guestbookpics על מנת לקבל את רשימת ה"קבצים". אנחנו אמורים לראות בנקודה זו את כל התמונת שהעלנו עד עכשיו.

   

תצוגת רשומה ספציפית

 

  • לכל blob שאנחנו מעלים משויך Content-type שמייצג את סוג ה- blob (תמונה, וידאו, מסמך, מצגת ועוד). לחיצה כפולה על הרשומה תפתח לנו את התמונה.

תצוגת התמונה בדבל קליק

  • לחץ על SHIFT + F5 על מנת לעצור את הDebug ולכבות את ה- development Fabric.

להורדת המדריך לחץ כאן

תגיות: , , ,

תגובות בפייסבוק