Long running (or forever) task on Windows Azure
Asked Answered
B

3

5

I need to write some data to database every 50 seconds or so. It's similar to a Windows service that's running on background and silently doing its job. Starting and stopping is not an option in my case as I need a small amount of previously inserted data to be stored in memory. What's the best solution for this when using Windows Azure or AWS?

Thank you.

Barbarism answered 27/6, 2012 at 22:41 Comment(0)
B
7

With Windows Azure, you can choose either a Web or Worker role (both basically Windows 2008 Server R2 or SP2) and have some type of timed event, as @Lucifure suggested. You could also run a scheduler, like Quartz.net, or take advantage of windows Azure queues or service bus queues to have messages show up at a certain time. However: You cannot have a "forever" task in a given role instance, in that periodically your VM instances will be rebooted (e.g. for host OS maintenance every month). With role shutdowns, you'll get notice, which you can handle these shutdown notices in Stopping() or OnStop(). If you have multiple instances, you can use a scheduler or queue to ensure your events still trigger every 50 seconds or so, and get handled across multiple instances (but only by one instance at any given time).

To preserve your in-memory information, one idea is to store that information in a cache. You have 2 choices:

  • Distributed (shared) cache service, which has been around for some time now. It runs independently of your role instances.
  • In-memory cache, just introduced in June 2012. Assuming you have more than one instance, the cache is spread across those instances. You can even run the cache inside of memory of your existing roles.

More information on caching is here.

There are a few StackOverflow answers regarding Quartz.net and Windows Azure, such as this one.

Berger answered 28/6, 2012 at 1:20 Comment(0)
D
2

On Windows Azure, you can use a Worker Role, which can do this. It can be simple as a while loop.

Try this article for an introduction. http://www.c-sharpcorner.com/uploadfile/40e97e/windows-azu-creating-and-deploying-worker-role/

Diacritic answered 27/6, 2012 at 22:50 Comment(0)
M
1

You could setup a System.Threading.Timer to fire every 50 seconds or so, and do your work whenever the event occurs.

Mazuma answered 28/6, 2012 at 0:4 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.