只需三步:使用C# 操作 Azure 队列
Step 1 :
安装windows Azure package
Step 2 :
配置文件增加:
- <appSettings>
- <add key="StorageConnectionString" value="your connection string" />
- </appSettings>
Step 3 :
using this Azure class
- namespace Axe.AzureStorage
- {
- using System;
- using System.IO;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Threading;
- using System.Threading.Tasks;
- using Microsoft.WindowsAzure;
- using Microsoft.WindowsAzure.Storage;
- using Microsoft.WindowsAzure.Storage.Queue;
- public class WinAzureStorageAsync
- {
- private readonly CloudQueue queue;
- private readonly int timeoutSecond;
- private CloudQueueClient queueClient;
- public CloudQueueClient QueueClient
- {
- get
- {
- if (this.queueClient != null)
- return this.queueClient;
- var storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
- this.queueClient = storageAccount.CreateCloudQueueClient();
- return this.queueClient;
- }
- }
- ////since each time fetch message is not a block operation
- ////so need to set a timeout & keep fetching , default is 3 seconds
- private const int SleepInterval = 100;
- public WinAzureStorageAsync(string queueName, int timeoutSecond = 3)
- {
- queueName = queueName.ToLower();
- this.queue = this.QueueClient.GetQueueReference(queueName);
- if (!this.QueueClient.GetQueueReference(queueName).Exists())
- {
- this.queue.CreateIfNotExists();
- }
- this.timeoutSecond = timeoutSecond;
- }
- public async Task<CloudQueueMessage> GetMessage()
- {
- CloudQueueMessage message = null;
- var passed = 0;
- while (message == null && passed < this.timeoutSecond * 10 * SleepInterval)
- {
- message = await this.queue.GetMessageAsync();
- Thread.Sleep(SleepInterval);
- passed += SleepInterval;
- }
- if (message == null)
- {
- throw new TimeoutException("Get Message From Azure Queue Operation has been timeout");
- }
- await this.queue.DeleteMessageAsync(message);
- return message;
- }
- public async Task<string> GetString()
- {
- var msg = await this.GetMessage();
- return msg.AsString;
- }
- public async Task<byte[]> GetBytes()
- {
- var msg = await this.GetMessage();
- return msg.AsBytes;
- }
- public T Get<T>() where T : new()
- {
- var bytes = this.GetBytes();
- return this.BytesToT<T>(bytes.Result);
- }
- public async Task Add(string message)
- {
- await this.queue.AddMessageAsync(new CloudQueueMessage(message));
- }
- public async Task Add(byte[] bytes)
- {
- await this.queue.AddMessageAsync(new CloudQueueMessage(bytes));
- }
- public void Add<T>(T obj) where T : new()
- {
- var bytes = this.TToBytes(obj);
- this.Add(bytes);
- }
- /// <summary>
- /// Note : this operation make takes around 40 seconds to complete, reference here:
- /// http://msdn.microsoft.com/library/azure/dd179387.aspx
- /// </summary>
- /// <returns></returns>
- public async Task DeleteIfExists()
- {
- await this.queue.DeleteIfExistsAsync();
- }
- public async Task<bool> IsExist(string queueName)
- {
- queueName = queueName.ToLower();
- return await this.QueueClient.GetQueueReference(queueName).ExistsAsync();
- }
- public void ClearMessage()
- {
- this.queue.Clear();
- }
- private T BytesToT<T>(byte[] bytes)
- {
- using (var ms = new MemoryStream())
- {
- ms.Write(bytes, 0, bytes.Length);
- var bf = new BinaryFormatter();
- ms.Position = 0;
- var x = bf.Deserialize(ms);
- return (T)x;
- }
- }
- private byte[] TToBytes<T>(T obj)
- {
- var bf = new BinaryFormatter();
- using (var ms = new MemoryStream())
- {
- bf.Serialize(ms, obj);
- return ms.ToArray();
- }
- }
- }
- }
只需三步:使用C# 操作 Azure 队列的更多相关文章
- 只需三步--轻松反编译Android Apk文件
安卓程序是通过java语言进行编写的,可以很容易进行反编译.很多apk文件被反编译后再二次打包,就成了自己的产品,很是流氓.下面我们来看看如何进行apk的反编译,以及常用的防反编译手段. 一.反编译A ...
- 只需三步 快速完善网站Sitemap
越来越多的SEOer把优化的重点放在了站内优化上,细心的朋友应该查看一些前辈的robots.txt的时候不难发现,他们的robots中都加 入了一句Sitemap: http://www.dewang ...
- windows 下安装Apache httpd 只需三步
1.下载 Apache 官网地址:http://httpd.apache.org/docs/current/platform/windows.html#down 找到这个, 看到这几个选项: Apac ...
- iOS - 外加字体(只需三步-教你轻松实现)
外加字体 1.首先info.plist中加入属性Fonts provided by application,在item 0 处填写导入的ttf文件名 eg: <key>UIAppFonts ...
- 只需3步,快来用AI预测你爱的球队下一场能赢吗?
摘要:作为球迷,我们有时候希望自己拥有预测未来的能力. 本文分享自华为云社区<用 AI 预测球赛结果只需三步,看看你爱的球队下一场能赢吗?>,作者:HWCloudAI. 还记得今年夏天的欧 ...
- vuex其实超简单,只需3步
前言 之前几个项目中,都多多少少碰到一些组件之间需要通信的地方,而因为种种原因,event bus 的成本反而比vuex还高, 所以技术选型上选用了 vuex, 但是不知道为什么,团队里的一些新人一听 ...
- 只需一步,DLA开启TableStore多元索引查询加速!
一.背景介绍 Data Lake Analytics(简称DLA)在构建第一天就是支持直接关联分析Table Store(简称OTS)里的数据,实现存储计算分离架构,满足用户基于SQL接口分析Tabl ...
- 如何把C++的源代码改写成C代码?而C改C++只需一步!
★ 如何把C++的源代码改写成C代码? C++解释器比C语言解释器占用的存储空间要大,想要在某些特定场合兼容C++代码,同时为了节省有限的存储空间,降低成本,也为了提高效率,将用C++语言写的源程序用 ...
- PDF怎么旋转页面,只需几步轻松搞定!
有时候我们下载一个PDF文件里面有页面是旋转的情况,用手机看的时候可以把手机旋转过来看,那么用电脑的时候总不可能也转过来看吧,笔记本是可以的台式的是不行的,这个时候我们就需要把PDF文件中旋转的页面转 ...
随机推荐
- Vijos p1002 过河 离散化距离+区间DP
链接:https://vijos.org/p/1002 题意:一条长度为L(L <= 1e9)的桥上有N(1<= N <= 100)颗石头.桥的起点为0终点为L.一只青蛙从0开始跳, ...
- 闲谈前端编码解码、C#编码解码。
最近做项目,出现中文乱码的问题,特地研究一下. GB2312,指的是中文 UTF8,指的是国标,包含中文.英文. 但是通过JQuery.ajax的Get.Post,如果直接传递中文或者特殊字符的特使字 ...
- MVC-Model数据注解(二)-自定义
由于系统的数据注解肯定不适合所有的场合,所以有时候我们需要自定义数据注解. 自定义数据注解有两种,一种是直接写在模型对象中,这样做的好处是验证时只需要关心一种模型对象的验证逻辑,缺点也 ...
- HTTP - PUT 上传文件/Shell (二)
上一篇文章 HTTP - PUT 上传文件/Shell 讲到自己搭了一个环境,去测试HTTP - PUT上传Shell.最近又遇到几个PUT上传的例子,也成功上传了几次,来分享一下思密达. 0x00 ...
- Android开发(一):环境搭建
引言 本系列将记录我在步入Android开发过程中的一些流水账及经验,如有疏漏,还望不吝赐教. 目录 1.JDK安装及配置 2.Eclipse.Android SDK ADT安装及配置 正文 1.JD ...
- [jobdu]扑克牌顺子
一开始看到题还以为要DFS还是BFS,后来发现完全不用.排个序,然后看看大小王能不能弥补缺口就行,但后来又发现还要排除有相同大小牌的情况. #include <iostream> #inc ...
- C++默认构造函数
原文链接:http://wenku.baidu.com/link?url=Qh59sZlrT7dAZwjkKqhUiUU2yq2GZams7wEQ9ULkYC7FgArX5adcp1EXVw_jqjf ...
- Android fragment 回调函数改进
由于fragment的onResume()等回调的调用时机与Activity不一样,导致用起来比较麻烦,所以我重新封装了一下回调函数,十分简单. 使用时只需要继承此基类,使用onFragmentXXX ...
- file_operations结构体解析 1
注:学了这么长时间了,还没有好好看看 file_operations机构体,这其中还有很多的东西,当你学着学着的时候,就会用到这里面的一些系统调用对应的函数了,我在网上搜索之后,记录如下,一边将来查看 ...
- Java实现Dijkstra算法求最短路径
任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层 ...