WEB开发网
开发学院服务器云计算 云模式:为 Windows Azure 设计和部署服务 阅读

云模式:为 Windows Azure 设计和部署服务

 2010-03-26 00:00:00 来源:WEB开发网   
核心提示: //userid|accountid|transactionid|amountvarstr=msg.AsString.Split('|');...第二种方法是,可以将消息序列化为 XML:using(MemoryStreamm=newMemoryStream(msg.AsByte

//userid|accountid|transactionid|amount 
var str = msg.AsString.Split('|');...

第二种方法是,可以将消息序列化为 XML:

using (MemoryStream m = 
 new MemoryStream(msg.AsBytes)) { 
 
 if (m != null) { 
  XmlSerializer xs = new XmlSerializer( 
   typeof(Core.TableStorage.UserAccountTransaction)); 
  var t = xs.Deserialize(m) as 
   Core.TableStorage.UserAccountTransaction; 
 
  if (t != null) { ....... } 
 } 
}

当 AccountStorageWorker 由于某种原因发生中断或无法处理消息时,由于消息都保存在队列中,所以不会丢失。如果 AccountStorageWorker 内进行的处理失败,消息将不会从队列中删除并且 20 秒后将重新在队列中可见。

要确保这种行为,应仅在完成工作后调用队列中的 DeleteMessage 方法。如果在超时之前 AccountStorageWorker 没有完成消息处理,则消息将再次在队列中可见,以便其他 AccountStorageWorker 实例可以尝试对其进行处理。图 10 处理存储为字符串的消息。

图 10 处理排队的消息

if (str.Length == 4){ 
 //userid|accountid|transactionid|amount 
 UserAccountSqlAzureAction ds = new UserAccountSqlAzureAction( 
  new Core.DataAccess.UserAccountDB("ConnStr")); 
 try 
 { 
  Trace.WriteLine(String.Format("About to insert data to DB:{0}", str),    
   "Information"); 
  ds.UpdateUserAccountBalance(new Guid(str[0]), new Guid(str[1]), 
   double.Parse(str[3])); 
  Trace.WriteLine(msg.AsString, "Information"); 
  accountTransactionLoggQueue.DeleteMessage(msg); 
  Trace.WriteLine(String.Format("Deleted:{0}", str), "Information"); 
 } 
 catch (Exception ex) 
 { 
  Trace.WriteLine(String.Format( 
   "fail to insert:{0}", str, ex.Message), "Error"); 
 } 
}

上一页  5 6 7 8 9 10 

Tags:模式 Windows Azure

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接