消息队列、OSS常用操作封装
public class MessageQueue
{
#region Private Properties
private const string _accessKeyId = "";
private const string _secretAccessKey = "";
private const string _endpoint = ""; private static string _queueName;
private const int _receiveTimes = 1;
private const int _receiveInterval = 2;
private const int batchSize = 6; #endregion #region 设置队列名称
public string queueName
{
set
{
_queueName = value; }
get
{
return _queueName;
}
}
#endregion #region 判断消息队列是否存在
/// <summary>
/// 判断消息队列是否存在
/// </summary>
/// <returns></returns>
public static bool QueueIsExist()
{
bool flag = false;
try
{
using (IMNS client = new Aliyun.MNS.MNSClient(_accessKeyId, _secretAccessKey, _endpoint))
{
var nativeQueue = client.GetNativeQueue(_queueName);
var getQueueAttributesResponse = nativeQueue.GetAttributes();
flag = true;
}
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
return flag;
}
#endregion #region 创建消息队列
/// <summary>
/// 创建消息队列
/// </summary>
/// <returns></returns>
public static string CreateQueue()
{
/*
DelaySeconds 发送到该 Queue 的所有消息默认将以DelaySeconds参数指定的秒数延后可被消费,单位为秒。 0-604800秒(7天)范围内某个整数值,默认值为0
MaximumMessageSize 发送到该Queue的消息体的最大长度,单位为byte。 1024(1KB)-65536(64KB)范围内的某个整数值,默认值为65536(64KB)。
MessageRetentionPeriod 消息在该 Queue 中最长的存活时间,从发送到该队列开始经过此参数指定的时间后,不论消息是否被取出过都将被删除,单位为秒。 60 (1分钟)-1296000 (15 天)范围内某个整数值,默认值345600 (4 天)
VisibilityTimeout 消息从该 Queue 中取出后从Active状态变成Inactive状态后的持续时间,单位为秒。 1-43200(12小时)范围内的某个值整数值,默认为30(秒)
PollingWaitSeconds 当 Queue 中没有消息时,针对该 Queue 的 ReceiveMessage 请求最长的等待时间,单位为秒。 0-30秒范围内的某个整数值,默认为0(秒)
LoggingEnabled 是否开启日志管理功能,True表示启用,False表示停用 True/False,默认为False
*/
string queueName = string.Empty;
var createQueueRequest = new CreateQueueRequest
{
QueueName = _queueName,
Attributes =
{
DelaySeconds = 0,
MaximumMessageSize = 65536,
MessageRetentionPeriod = 345600,
VisibilityTimeout = 3600,
PollingWaitSeconds = 3
}
};
try
{
using (IMNS client = new Aliyun.MNS.MNSClient(_accessKeyId, _secretAccessKey, _endpoint))
{
var queue = client.CreateQueue(createQueueRequest);
queueName = queue.QueueName;
}
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
Thread.Sleep(2000);
return queueName;
}
#endregion #region 删除消息队列
/// <summary>
/// 删除消息队列
/// </summary>
/// <returns></returns>
public static bool DeleteQueue()
{
bool flag = false;
var deleteQueueRequest = new DeleteQueueRequest(_queueName);
deleteQueueRequest.AddHeader("Accept", "IE6"); //Add extra request headers
//deleteQueueRequest.AddParameter("param1", "value1"); //InvalidQueryString
try
{
using (IMNS client = new Aliyun.MNS.MNSClient(_accessKeyId, _secretAccessKey, _endpoint))
{
var deleteQueueResponse = client.DeleteQueue(deleteQueueRequest);
flag = true;
}
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
return flag;
}
#endregion #region 发送消息(单条或多条)
/// <summary>
/// 发送消息(单条或多条)
/// </summary>
/// <param name="models">SendMessageRequest集合</param>
/// <returns></returns>
public static bool BathSendMessage(List<SendMessageRequest> models)
{
bool flag = false;
try
{
using (IMNS client = new Aliyun.MNS.MNSClient(_accessKeyId, _secretAccessKey, _endpoint))
{
var nativeQueue = client.GetNativeQueue(_queueName);
List<SendMessageRequest> requests = new List<SendMessageRequest>();
for (int i = 0; i < models.Count; i++)
{
requests.Add(models[i]);
}
BatchSendMessageRequest batchSendRequest = new BatchSendMessageRequest()
{
Requests = requests
};
var sendMessageResponse = nativeQueue.BatchSendMessage(batchSendRequest);
flag = true;
}
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
return flag;
}
#endregion #region 消费消息(单条或多条)
/// <summary>
/// 消费消息(单条或多条)
/// </summary>
/// <param name="itemNum">数目</param>
/// <returns></returns>
public static List<Message> ReceiveMessage(int itemNum)
{
List<Message> lists = new List<Message>();
try
{
using (IMNS client = new Aliyun.MNS.MNSClient(_accessKeyId, _secretAccessKey, _endpoint))
{
var nativeQueue = client.GetNativeQueue(_queueName);
for (int i = 0; i < itemNum; i++)
{
var receiveMessageResponse = nativeQueue.ReceiveMessage();
Message message = receiveMessageResponse.Message;
lists.Add(message);
}
}
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
return lists;
}
#endregion #region 删除消息
/// <summary>
/// 删除消息
/// </summary>
/// <param name="receiptHandle">receiptHandle</param>
/// <returns></returns>
public static bool DeleteMessage(string receiptHandle)
{
bool flag = false;
var deletedReceiptHandle = receiptHandle;
try
{
using (IMNS client = new Aliyun.MNS.MNSClient(_accessKeyId, _secretAccessKey, _endpoint))
{
var nativeQueue = client.GetNativeQueue(_queueName);
var deleteMessageResponse = nativeQueue.DeleteMessage(receiptHandle);
flag = true;
}
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
return flag;
}
#endregion #region 修改消息可见时间
/// <summary>
/// 修改消息可见时间
/// </summary>
/// <param name="receiptHandle">receiptHandle</param>
/// <param name="visibilityTimeout">从现在到下次可被用来消费的时间间隔</param>
/// <returns></returns>
public static bool ChangeMessageVisibility(string receiptHandle, int visibilityTimeout)
{
bool flag = false;
var deletedReceiptHandle = receiptHandle;
try
{
using (IMNS client = new Aliyun.MNS.MNSClient(_accessKeyId, _secretAccessKey, _endpoint))
{
var nativeQueue = client.GetNativeQueue(_queueName);
var changeMessageVisibilityRequest = new ChangeMessageVisibilityRequest
{
ReceiptHandle = receiptHandle,
VisibilityTimeout = visibilityTimeout
};
var changeMessageVisibilityResponse = nativeQueue.ChangeMessageVisibility(changeMessageVisibilityRequest);
flag = true;
}
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
return flag;
}
#endregion
}
using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Security.Cryptography;
using Aliyun.OSS.Common; namespace Aliyun.OSS.Samples
{
/// <summary>
/// 获取OSS对象
/// </summary>
public static class GetObjectSample
{
static string accessKeyId = Config.AccessKeyId;
static string accessKeySecret = Config.AccessKeySecret;
static string endpoint = Config.Endpoint;
static OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret); static string key = "123456.jpg";
static string fileToUpload = Config.FileToUpload;
static string dirToDownload = Config.DirToDownload; static AutoResetEvent _event = new AutoResetEvent(false); public static void GetObjects(string bucketName)
{
GetObject(bucketName); //获取文件 GetObjectByRequest(bucketName); AsyncGetObject(bucketName); //异步方式获取文件
} public static void GetObject(string bucketName)
{
try
{
client.PutObject(bucketName, key, fileToUpload); var result = client.GetObject(bucketName, key); using (var requestStream = result.Content)
{
using (var fs = File.Open(Path.Combine(dirToDownload, key), FileMode.OpenOrCreate))
{
int length = 4 * 1024;
var buf = new byte[length];
do
{
length = requestStream.Read(buf, 0, length);
fs.Write(buf, 0, length);
} while (length != 0);
}
} Console.WriteLine("Get object succeeded");
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
} public static void GetObjectByRequest(string bucketName)
{
try
{
client.PutObject(bucketName, key, fileToUpload); var request = new GetObjectRequest(bucketName, key);
request.SetRange(0, 100); var result = client.GetObject(request); Console.WriteLine("Get object succeeded, length:{0}", result.Metadata.ContentLength);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
} public static void AsyncGetObject(string bucketName)
{
const string key = "AsyncGetObject";
try
{
client.PutObject(bucketName, key, fileToUpload); string result = "Notice user: put object finish";
client.BeginGetObject(bucketName, key, GetObjectCallback, result.Clone()); _event.WaitOne();
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
} private static void GetObjectCallback(IAsyncResult ar)
{
try
{
var result = client.EndGetObject(ar); using (var requestStream = result.Content)
{
using (var fs = File.Open(dirToDownload + "/sample2.data", FileMode.OpenOrCreate))
{
int length = 4 * 1024;
var buf = new byte[length];
do
{
length = requestStream.Read(buf, 0, length);
fs.Write(buf, 0, length);
} while (length != 0);
}
} Console.WriteLine(ar.AsyncState as string);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
_event.Set();
}
}
}
}
using System;
using System.Collections.Generic;
using Aliyun.OSS.Common; namespace Aliyun.OSS.Samples
{
/// <summary>
/// 删除OSS对象
/// </summary>
public static class DeleteObjectsSample
{
static string accessKeyId = Config.AccessKeyId;
static string accessKeySecret = Config.AccessKeySecret;
static string endpoint = Config.Endpoint;
static OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret); public static void DeleteObject(string bucketName)
{
try
{
string key = null;
var listResult = client.ListObjects(bucketName);
foreach (var summary in listResult.ObjectSummaries)
{
key = summary.Key;
break;
} client.DeleteObject(bucketName, key); Console.WriteLine("Delete object succeeded");
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
} public static void DeleteObjects(string bucketName)
{
try
{
var keys = new List<string>();
var listResult = client.ListObjects(bucketName);
foreach (var summary in listResult.ObjectSummaries)
{
keys.Add(summary.Key);
break; //不跳出删除全部
}
var request = new DeleteObjectsRequest(bucketName, keys, false);
client.DeleteObjects(request); Console.WriteLine("Delete objects succeeded");
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
}
}
}
using System;
using System.IO;
using System.Threading;
using Aliyun.OSS.Common;
using System.Text;
using Aliyun.OSS.Util; namespace Aliyun.OSS.Samples
{
/// <summary>
/// 上传文件或对象到OSS
/// </summary>
public static class PutObjectSample
{
static string accessKeyId = Config.AccessKeyId;
static string accessKeySecret = Config.AccessKeySecret;
static string endpoint = Config.Endpoint;
static OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret); static string fileToUpload = Config.FileToUpload; static AutoResetEvent _event = new AutoResetEvent(false); /// <summary>
/// sample for put object to oss
/// </summary>
public static void PutObject(string bucketName)
{
PutObjectFromFile(bucketName); //上传文件 PutObjectFromString(bucketName); //上传String PutObjectWithDir(bucketName); //创建目录上传 PutObjectWithMd5(bucketName); //MD5验证上传 PutObjectWithHeader(bucketName); //设置Header上传 AsyncPutObject(bucketName); //异步上传
} public static void PutObjectFromFile(string bucketName)
{
const string key = "PutObjectFromFile";
try
{
client.PutObject(bucketName, key, fileToUpload);
Console.WriteLine("Put object:{0} succeeded", key);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
} public static void PutObjectFromString(string bucketName)
{
const string key = "PutObjectFromString";
const string str = "Aliyun OSS SDK for C#"; try
{
byte[] binaryData = Encoding.ASCII.GetBytes(str);
var stream = new MemoryStream(binaryData); client.PutObject(bucketName, key, stream);
Console.WriteLine("Put object:{0} succeeded", key);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
} public static void PutObjectWithDir(string bucketName)
{
const string key = "folder/sub_folder/PutObjectFromFile"; try
{
client.PutObject(bucketName, key, fileToUpload);
Console.WriteLine("Put object:{0} succeeded", key);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
} public static void PutObjectWithMd5(string bucketName)
{
const string key = "PutObjectWithMd5"; string md5;
using (var fs = File.Open(fileToUpload, FileMode.Open))
{
md5 = OssUtils.ComputeContentMd5(fs, fs.Length);
} var meta = new ObjectMetadata() { ContentMd5 = md5 };
try
{
client.PutObject(bucketName, key, fileToUpload, meta); Console.WriteLine("Put object:{0} succeeded", key);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
} public static void PutObjectWithHeader(string bucketName)
{
const string key = "PutObjectWithHeader";
try
{
using (var content = File.Open(fileToUpload, FileMode.Open))
{
var metadata = new ObjectMetadata();
metadata.ContentLength = content.Length; metadata.UserMetadata.Add("github-account", "qiyuewuyi"); client.PutObject(bucketName, key, content, metadata); Console.WriteLine("Put object:{0} succeeded", key);
}
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
} public static void AsyncPutObject(string bucketName)
{
const string key = "AsyncPutObject";
try
{
// 1. put object to specified output stream
using (var fs = File.Open(fileToUpload, FileMode.Open))
{
var metadata = new ObjectMetadata();
metadata.UserMetadata.Add("mykey1", "myval1");
metadata.UserMetadata.Add("mykey2", "myval2");
metadata.CacheControl = "No-Cache";
metadata.ContentType = "text/html"; string result = "Notice user: put object finish";
client.BeginPutObject(bucketName, key, fs, metadata, PutObjectCallback, result.ToCharArray()); _event.WaitOne();
}
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
} private static void PutObjectCallback(IAsyncResult ar)
{
try
{
client.EndPutObject(ar); Console.WriteLine(ar.AsyncState as string);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
_event.Set();
}
}
}
}
消息队列、OSS常用操作封装的更多相关文章
- .Net Excel操作之NPOI(二)常用操作封装
一.Excel数据导出常用操作 1.指定表头和描述 2.指定数据库中读出的数据集合 二.ExcelExport封装 /// <summary> /// Excel常用的表格导出逻辑封装 / ...
- python openpyxl 2.5.4 版本 excel常用操作封装
最近搭框架用的openpyxl 2.5.4版本,之前封装的函数有些提示不推荐使用了,我做了一些更新: 代码: # encoding=utf-8 from openpyxl import load_wo ...
- linux消息队列操作
对消息队列的操作无非有以下三种类型: 1. 打开或创建消息队列消息队列的内核持续性要求每一个消息队列都在系统范围内相应唯一的键值,所以,要获得一个消息队列的描写叙述字,仅仅需提供该消息队列的键值就可以 ...
- Python操作rabbitmq消息队列持久化
消息队列持久化 Python操作rabbit消息队列的持久化,如下: # 创建一个名为balance的队列,对queue进行durable持久化设为True(持久化第一步)channel.queue_ ...
- MSMQ消息队列 用法
引言 接下来的三篇文章是讨论有关企业分布式开发的文章,这三篇文章筹划了很长时间,文章的技术并不算新,但是文章中使用到的技术都是经过笔者研究实践后总结的,正所谓站在巨人的肩膀上,笔者并不是巨人,但也希望 ...
- 跟我一起学WCF(1)——MSMQ消息队列
一.引言 Windows Communication Foundation(WCF)是Microsoft为构建面向服务的应用程序而提供的统一编程模型,该服务模型提供了支持松散耦合和版本管理的序列化功能 ...
- Linux环境进程间通信(三):消息队列
linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
- 消息队列 概念 配合SpringBoot使用Demo
转http://www.jianshu.com/p/048e954dab40 概念: 分布式消息队列 ‘分布式消息队列’包含两个概念 一是‘消息队列’,二是‘分布式’ 那么就先看下消息队列的概念,和为 ...
- WCF之MSMQ消息队列
一.MSMQ简介 MSMQ(微软消息队列)是Windows操作系统中消息应用程序的基础,是用于创建分布式.松散连接的消息通讯应用程序的开发工具. MSMQ与XML Web Services和.Net ...
随机推荐
- 详解 anjularjs的ui-route(多视图、视图嵌套、视图传参)
最近整理了一下anjularjs的第三方插件ui-route,在这就以一个demo的形式讲解一下.整片博客均以开头的demo代码为例.下边是个目录,大家可以酌情直接跳转浏览. 1. demo的代码 2 ...
- LDMIA、LDMIB、LDMDB、LDMDA、STMIA、LDMFD、LDMFA、LDMED、LDMEA指令详解
简介: ARM指令中多数据传输共有两种: LDM:(load much)多数据加载,将地址上的值加载到寄存器上 STM:(store much)多数据存储,将寄存器的值存到地址上 主要用途:现场保护 ...
- 数据库学习任务四:数据读取器对象SqlDataReader、数据适配器对象SqlDataAdapter、数据集对象DataSet
数据库应用程序的开发流程一般主要分为以下几个步骤: 创建数据库 使用Connection对象连接数据库 使用Command对象对数据源执行SQL命令并返回数据 使用DataReader和DataSet ...
- 软工+C(2017第1期) 题目设计、点评和评分
// 下一篇:分数和checklist 如何设计题目 教学中的一个问题是老师出题太简单了,题目设计一开始上来就不紧凑,我认为一个好的课程应该上来就给你紧凑感,而不是先上来"轻松2-3周&qu ...
- 201521123001《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:1.被继承的类称为父类,继承父类的类称为子类 2.继承时子类将获得父类的属性与方法,并具 ...
- 201521123096《Java程序设计》第二周学习总结
1.本周学习总结 (1)学会使用码云管理代码: (2)了解数组和字符串的操作: (3)对完全限定类名有一定的认识. 2.书面作业 (1)使用Eclipse关联jdk源代码,并查看String对象的源代 ...
- 201521123096《Java程序设计》第一周学习总结
1. 本章学习总结: 对JAVA的发展有一定的了解.JAVA是一种高级语言,需要在JVM上执行.初步学会使用eclipse和NOtepad++. 2. 书面作业 Q1:为什么java程序可以跨平台运行 ...
- Java课程设计——计算数学表达式的程序(201521123051 谢庆圆)
计算数学表达式的程序(201521123051 谢庆圆) 1.团队课程设计博客链接 团队课程设计博客链接 2.个人负责模块或任务说明 1.计算数字表达式中操作按钮的实现(右容器) 2.. 注册监听器以 ...
- 跨站数据请求哪家强——青出于蓝的jsonp
/* * 跨站数据请求哪家强--青出于蓝的jsonp数据格式 * @author gj * @date 2017-09-15 */ 先哲有云"青,取之于蓝,而青于蓝:冰,水为之,而寒于水&q ...
- Download the Hibernate Tools
首先去官网上下载最新版本的Hibernate Tools JBoss Tools 4.5.0.Final Requirements: Java 8 and Eclipse Oxygen 4.7 有 4 ...