I finished the Steel Thread late last week but didn’t get the blog post up over the long weekend. What I came up with was just a few brief paragraphs on how it went (great) and what I learned (a lot).
The goal was to get used to using a worker role, a web(site) role, a table and queue for storage.
On the infrastructure side of things I realized that I needed specific types to store messages and the different formats they take on during processing. One of the things I used to bootstrap was some guidance from the PnP team. This post has more to do with using entities than it does with learning to use Windows Azure, but once you dive into Azure Table Storage, you’ll enjoy the ideas it presents. There are more updated examples from the PnP team that employ some fabric stuff I’m targeting to use as well.
The guidance I used demonstrated some interesting abstractions around table storage, queues and their messages that I experimented with putting this together. For this example I just wanted to to the following:
I wanted to submit a new registration into the application’s home page; create a Registration (model) object from the page; create a NewRegistrationMessage which is actually the message I putting on the queue.
That completes the first line of the diagram. The second line of the diagram starts with the little blue guy running in a circle every few seconds, he’s the worker role. The worker role tries to dequeue a message from the registration queue. If the role find a queue message it turns it into a RegistryEntity which is a descendant of TableServiceEntity which I used to insert into the Registration Table, which is the one piece of table storage I need to use for this exercise.
This exercise help me figure out what extension methods I needed to write, and which pieces make the most sense to work together. I could have skipped the queue implementation and just wrote directly to an azure table, but my first idea to store all of the messages first, then write to the queue. For other types of messages and models (inventory inserts and updates)I probably will. But for larger things which might need some moderation (most media types) I’ll probably push them onto a queue before bringing them into a staging area.
The little red wp7 phone is one of the clients that I want to access the data as well. Last week I saw the WP7-Azure toolkit demo’d so I want to make that my next spike. Yeah, spike. I get that I can figure out all of the processing bits, but I want to make sure I get the phone bits right.
Here’s the stuff I’m going to keep from this exercise. Some of it is directly copied from the PnP sample I mentioned; and some of it was just stuff that I wrote that I needed, not complicated, just code.
I have a class library called Data that has the following classes in it. A couple of base types the MVC app uses; and the rest is used by Windows Azure.
Here are a few gists for the types I created, including the repository bits.