本文介绍如何使用C# SDK中的sample代码,来完成创建主题、创建订阅、启动HTTP Endpoint、发布消息、查看HTTP Endpoint接收消息和删除主题等操作。
步骤一:准备工作
- 下载最新版C# SDK,解压后将工程导入到VisualStudio。
- 找到工程里四个项目中SDK所在的项目AliyunSDK_MNS,右击项目名,选择重新生成,在bin目录下生成Aliyun.MNS.dll。
说明 其他几个项目里都需要引用Aliyun.MNS.dll,请配置好其他几个项目的引用。
- 在项目AliyunSDK_MNS_Sample里进行配置。
- 将项目AliyunSDK_MNS_Sample设置为启动项,将SyncTopicOperations.cs设置为启动对象。
- 打开SyncTopicOperations.cs文件,在文件的最上方配置以下内容:
- AccessKey ID、AccessKey Secret
- 访问阿里云API的密钥对。
- 如果使用阿里云账号访问,请登录AccessKey管理页面创建和查看。
- 如果使用RAM用户访问,请登录阿里云访问控制控制台查看。
- Endpoint
- 访问消息服务MNS的接入地址,请登录MNS控制台,单击右上角获取Endpoint查看。
- 不同地域的接入地址不同。
- AccessKey ID、AccessKey Secret
步骤二:创建主题
如果之前未创建主题,那么首先需要创建主题。默认创建的主题名称是TestCSharpTopic,也可以修改代码指定主题名称。
// 1.生成一个CreateTopicRequest实例,参数传入topicName。这里可以同时传入TopicAttributes,以便在CreateTopic时同时设置自定义的Topic属性。
var createTopicRequest = new CreateTopicRequest
{
TopicName = _topicName
};
Topic topic = null;
try
{
topic = client.CreateTopic(createTopicRequest);
Console.WriteLine("Create topic successfully, topic name: {0}", topic.TopicName);
}
catch (MNSException me)
{
// 2.可能因为网络错误,或者Topic已经存在等原因导致CreateTopic失败,这里CatchException并做对应的处理,也可以分别Catch TopicAlreadyExistException等做单独处理。
Console.WriteLine("CreateTopic Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
Console.WriteLine("Create topic failed, exception info: " + ex.Message);
return;
}
步骤三:启动HTTP Endpoint
- 找到项目MNS_CSharp_SDK_Test,将SampleHttpServer.cs设为启动项目并运行。
说明 SampleHttpServer依赖于.net framework 4.5。
- 确认接收端有公网IP地址。
- 功能
- 对消息服务MNS推送消息请求做签名验证。
- 解析推送请求的Body。
- 返回StatusCode:200。
- 由于SampleHttpServer的代码较多,请直接查看SDK中的源码。
步骤四:创建订阅
在MNS Server中创建订阅,主题里面的消息应该推送到哪里。Sample里使用的是HTTP的Endpoint。
try
{
// 1.生成SubscriptionAttributes,第二个参数是Subscription的Endpoint。请将"XXXX"改成步骤三中的IP和Port。更多支持的Endpoint类型请参见Subscription。
SubscribeResponse res = topic.Subscribe(_subscriptionName, "http://XXXX");
// 2.订阅成功。
Console.WriteLine("Subscribe succeed");
}
catch (MNSException me)
{
// 3.可能因为网络错误,或者同名的Subscription已存在等原因导致订阅出错,这里CatchException并做对应的处理。
Console.WriteLine("Subscribe Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
Console.WriteLine("Subscribe failed, exception info: " + ex.Message);
}
步骤五:发布消息
发布消息到主题中,并且期待在HttpServer上收到对应的消息。
try
{
// 1.如果是推送到邮箱,还需要生成PublishMessageRequest并设置MessageAttributes。
var response = topic.PublishMessage("message here </asdas\">");
// 2.发布成功。
Console.WriteLine("PublishMessage succeed! " + response.MessageId);
}
catch (MNSException me)
{
// 3.可能因为网络错误等原因导致PublishMessage失败,这里CatchException并做对应处理。
Console.WriteLine("PublishMessage Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
Console.WriteLine("PublishMessage failed, exception info: " + ex.Message);
}
步骤六:查看HTTP Endpoint接收消息
- 消息服务MNS会将发布的消息推送给步骤三启动的HTTP Endpoint。
- HTTP Endpoint在接收到消息推送请求后,会打印到Console。
步骤七:取消订阅
如果不需要再接收消息,可以在MNS Server取消订阅。
try
{
topic.Unsubscribe(_subscriptionName);
Console.WriteLine("Unsubscribe succeed!");
}
catch (Exception ex)
{
Console.WriteLine("Subscribe failed, exception info: " + ex.Message);
}
步骤八:删除主题
最后删除这个主题。
try
{
client.DeleteTopic(_topicName);
Console.WriteLine("Delete topic succeed");
}
catch (Exception ex)
{
Console.WriteLine("Delete topic failed, exception info: " + ex.Message);
}