Skip to content

Instantly share code, notes, and snippets.

@DominicFinn
Last active August 29, 2015 14:17
Show Gist options
  • Save DominicFinn/056253fe97c2209d52af to your computer and use it in GitHub Desktop.
Save DominicFinn/056253fe97c2209d52af to your computer and use it in GitHub Desktop.
F# Azure Queue Storage Example
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Data.Edm" version="5.6.2" targetFramework="net45" />
<package id="Microsoft.Data.OData" version="5.6.2" targetFramework="net45" />
<package id="Microsoft.Data.Services.Client" version="5.6.2" targetFramework="net45" />
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="1.8.0.0" targetFramework="net45" />
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" />
<package id="System.Spatial" version="5.6.2" targetFramework="net45" />
<package id="WindowsAzure.Storage" version="4.3.0" targetFramework="net45" />
</packages>
open Microsoft.WindowsAzure.Storage
open System.Configuration
open Microsoft.WindowsAzure.Storage.Queue
open System
open Newtonsoft.Json
type Message = { Title:string; Details:string }
type LogMessage =
| Error of Message
| Info of Message
let createQueue() =
let storageAccount = CloudStorageAccount.Parse("YOUR_STORAGE_CONNECTION_STRING_GOES_HERE")
let queueClient = storageAccount.CreateCloudQueueClient()
let queue = queueClient.GetQueueReference("myqueue")
queue.CreateIfNotExists() |> ignore
queue
let sendMessage(queue: CloudQueue, logMessage: LogMessage) =
let messageText = JsonConvert.SerializeObject logMessage
let message = new CloudQueueMessage(messageText)
queue.AddMessage(message)
let getMessage(queue: CloudQueue) =
let retrievedMessageText = queue.GetMessage()
let retrievedMessage = JsonConvert.DeserializeObject<LogMessage> retrievedMessageText.AsString
retrievedMessage
let report(message: string) =
Console.WriteLine(message) |> ignore
[<EntryPoint>]
let main arg =
let queue = createQueue()
let errorMessage = Error { Title = "Something went wrong"; Details = "Something strange happened" }
let infoMessage = Info { Title = "Hello"; Details = "Bit of something for you" }
sendMessage(queue, errorMessage) |> ignore
sendMessage(queue, infoMessage) |> ignore
// get the first message...
let retrievedMessage = getMessage(queue)
match retrievedMessage with
| Error m -> report (String.Format("Error: Title: {0}, Message: {1}", m.Title, m.Details))
| Info m -> report (String.Format("Info: Title: {0}, Message: {1}", m.Title, m.Details))
Console.ReadKey() |> ignore
queue.Delete();
0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment