博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
阿里云消息队列MQ_HTTP接入 for .NetCore 简单例子
阅读量:7061 次
发布时间:2019-06-28

本文共 5394 字,大约阅读时间需要 17 分钟。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace MQWebCore
{
    
public 
class MQHelper
    {
        
string URL = 
"
http://publictest-rest.ons.aliyun.com
";
        
string topic, secretKey, accessKey;
        
public MQHelper(
string topic,
string secretKey,
string accessKey)
        {
            
this.topic = topic;
            
this.secretKey = secretKey;
            
this.accessKey = accessKey;
        }
        
///
 
<summary>
        
///
 URL 中的 Key,Tag以及 POST Content-Type 没有任何的限制,只要确保Key 和 Tag 相同唯一即可
        
///
 
</summary>
        
///
 
<param name="tag"></param>
        
///
 
<param name="key"></param>
        
///
 
<param name="body"></param>
        
///
 
<returns></returns>
        
public 
async Task<
bool> Pub(
string tag, 
string key, 
string body)
        {
            
using (HttpClient httpClient = 
new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Connection.Add(
"
keep-alive
");
                HttpContent content = 
new StringContent(body, Encoding.UTF8);
                httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"
text/html
"));
                
                
var time = (
long)(DateTime.Now.ToUniversalTime() - 
new DateTime(
1970
1
1)).TotalMilliseconds;
                
var signString = Sign(
string.Format(
"
{0}\nPID_{0}\n{1}\n{2}
", topic, MD5Encrypt(body), time), secretKey);
                httpClient.DefaultRequestHeaders.Add(
"
AccessKey
", accessKey);
                httpClient.DefaultRequestHeaders.Add(
"
Signature
", signString);
                httpClient.DefaultRequestHeaders.Add(
"
ProducerID
"
string.Format(
"
PID_{0}
", topic));
                
var url = URL + 
"
/message/?topic=
" + topic + 
"
&time=
" + time + 
"
&tag=
" + tag + 
"
&key=
" + key;
                
var res = 
await httpClient.PostAsync(url, content);
                
if (res.StatusCode == System.Net.HttpStatusCode.Created)
                {
                    
return 
true;
                }
                
return 
false;
            }
        }
        
public 
async 
void Subscribe(
string tag = 
"
*
")
        {
            
using (HttpClient httpClient = 
new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Connection.Add(
"
keep-alive
");
                httpClient.DefaultRequestHeaders.Add(
"
Accept-Charset
"
"
utf-8
"); 
                
                
var time = (
long)(DateTime.Now.ToUniversalTime() - 
new DateTime(
1970
1
1)).TotalMilliseconds;
                
var signString = Sign(
string.Format(
"
{0}\nCID_{0}\n{1}
", topic, time), secretKey);
                httpClient.DefaultRequestHeaders.Add(
"
AccessKey
", accessKey);
                httpClient.DefaultRequestHeaders.Add(
"
Signature
", signString);
                httpClient.DefaultRequestHeaders.Add(
"
ConsumerID
"
string.Format(
"
CID_{0}
", topic));
                
var url = URL + 
"
/message/?topic=
" + topic + 
"
&time=
" + time + 
"
&num=32
";
                
var res = httpClient.GetAsync(url).GetAwaiter().GetResult();
                Console.WriteLine(res.StatusCode);
                
if (res.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    
var msg = 
await res.Content.ReadAsStringAsync();
                    Console.WriteLine(msg);
                    
if (msg != 
null && msg.Length > 
10)
                    {
                        MQMessage[] mqMsgs = JsonConvert.DeserializeObject<MQMessage[]>(msg);
                        
foreach (
var mqMsg 
in mqMsgs)
                        {
                            Delete(mqMsg.msgHandle);
                        }
                    }
                }
            }
        }
        
async 
void Delete(
string msgHandle)
        {
            
using (HttpClient httpClient = 
new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"
text/html
"));
                
                
var time = (
long)(DateTime.Now.ToUniversalTime() - 
new DateTime(
1970
1
1)).TotalMilliseconds;
                
var signString = Sign(
string.Format(
"
{0}\nCID_{0}\n{1}\n{2}
", topic, msgHandle, time), secretKey);
                httpClient.DefaultRequestHeaders.Add(
"
AccessKey
", accessKey);
                httpClient.DefaultRequestHeaders.Add(
"
Signature
", signString);
                httpClient.DefaultRequestHeaders.Add(
"
ConsumerID
"
string.Format(
"
CID_{0}
", topic));
                
var url = URL + 
"
/message/?topic=
" + topic + 
"
&time=
" + time + 
"
&msgHandle=
" + msgHandle;
                
var res = 
await httpClient.DeleteAsync(url);
                
if (res.StatusCode == System.Net.HttpStatusCode.NoContent)
                {
                    Console.WriteLine(
"
消息删除成功,无需返回内容
");
                }
                
else
                {
                    Console.WriteLine(res.StatusCode);
                }
            }
        }
        
string MD5Encrypt(
string strText)
        {
            
using (
var md5 = MD5.Create())
            {
                
var result = md5.ComputeHash(Encoding.UTF8.GetBytes(strText));
                
return BitConverter.ToString(result).Replace(
"
-
"
"").ToLower();
            }
        }
        
string Sign(
string signatureString, 
string secretKey, 
bool isRaw = 
true)
        {
            
var enc = Encoding.UTF8;
            HMACSHA1 hmac = 
new HMACSHA1(enc.GetBytes(secretKey));
            hmac.Initialize();
            
byte[] buffer = enc.GetBytes(signatureString);
            
if (isRaw)
            {
                
byte[] ret = hmac.ComputeHash(buffer);
                
return Convert.ToBase64String(ret);
            }
            
else
            {
                
string res = BitConverter.ToString(hmac.ComputeHash(buffer)).Replace(
"
-
"
"").ToLower();
                
return Convert.ToBase64String(Encoding.UTF8.GetBytes(res));
            }
        }
    }
    
public 
class MQMessage
    {
        
public 
string body;
        
public 
string bornTime;
        
public 
string msgHandle;
        
public 
string msgId;
        
public 
long reconsumeTimes;
        
public 
string tag;
    }

 

使用:
using MQWebCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp1
{
    
public 
class Program
    {
        
public 
static 
void Main(
string[] args)
        {
            Console.OutputEncoding = System.Text.Encoding.UTF8;
            
//
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            MQHelper mqHelper = 
new MQHelper(
"
Test
"
"3412qsd's12
"
"3412341212
");
            
var res = mqHelper.Pub("testTag", "testKey", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "阿特斯地方").GetAwaiter().GetResult();
            
Debug.WriteLine(res);
            
while (
true)
            {
                mqHelper.Subscribe();
                Thread.Sleep(
1000);
            }
            Console.Read();
        }
    }
}

 

转载于:https://www.cnblogs.com/94cool/p/5747971.html

你可能感兴趣的文章
使用 RGraph(HTML5) 绘制折线图(一)
查看>>
FreeCodeCamp 中级算法记录
查看>>
k8s入门系列之扩展组件(一)DNS安装篇
查看>>
基于Elastic Stack最新版本搭建ELK
查看>>
j抽奖
查看>>
[算法] dijkstra单源无负权最小路径算法
查看>>
字符串的全排列
查看>>
mysql实战39 | 自增主键为什么不是连续的?
查看>>
软件架构师的修炼之道
查看>>
[HDU 1372] Knight Moves
查看>>
java代码实现 金字塔(倒置)
查看>>
NOIP2015DAY2T2子串
查看>>
5种PHP创建数组的方式
查看>>
24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
查看>>
【C语言】07-基本语句和运算
查看>>
ajax异步获取提示框数据(鼠标悬浮事件)
查看>>
Android 内存使用hprof文件打开方法
查看>>
android入门一
查看>>
MVC项目中怎么浏览html页面
查看>>
sqoop 常用命令整理(二)
查看>>