本文介绍使用 TCP 协议的 .NET SDK 方式接入消息队列 RocketMQ 版的环境准备工作,以便您后续使用 TCP 协议的 .NET SDK 收发消息。

使用前,请注意以下几点:
  • 使用消息队列 RocketMQ 版服务的应用程序需要部署在阿里云 ECS 上。
  • 代码里涉及到的 Topic 和 Group ID,需要到控制台上创建。Message Tag 可以完全由应用自定义,创建步骤请参见快速入门中的步骤二:创建资源

Windows .NET SDK 简介

阿里云提供的 .NET 版本是基于消息队列 RocketMQ 版的 CPP 版本的托管封装,这样能保证 .NET 完全不依赖于 Windows .NET 公共库。内部采用 C++ 多线程并发处理,保证 .NET 版本的高效稳定。

在使用 Visual Studio(VS)开发 .NET 的应用程序和类库时,默认的目标平台为 “Any CPU”,即运行时可根据 CPU 类型自动选择 x86 或 x64。在运行时,CLR 才会将其 JIT 发射为 x86 或 x64 的机器码。而 C 或 C++ 编译生成的 DLL 就是机器码。所以,其平台的决策是在编译时决定的。通过编译选项的设置,将 C/C++ 项目编译为 x64 的 64 位 DLL,因此提供了包含 VS2015 和 .NET Framework 4.5.2 编译的 release64 位版本 DLL。其他 VS 版本也可以使用。

注意
  • .NET SDK 仅支持 Windows 64-bit 操作系统。
  • C++ DLL 文件需要 Virtual C++ 2015 运行时环境安装包。如果没有安装 Visual Studio 2015 运行时环境,请执行 SDK 中提供的 vc_redist.x64.exe 来完成安装。

下载 Windows .NET SDK

新用户或者不考虑升级成本的老用户请下载新版 SDK。.NET SDK 最新版本的下载链接,请查看版本说明

下载完成后进行解压,会有以下目录结构,各目录的说明如下:
  • lib/
    底层的 C++ DLL 相关文件,以及 Virtual C++ 2015 运行时环境安装包。如果没有安装 Visual Studio 2015 运行时环境,需要拷贝安装 vc_redist.x64.exe,如下所示。
      64/
          NSClient4CPP.lib
          ONSClient4CPP.dll
          ONSClient4CPP.pdb
        vc_redist.x64.exe                    
  • demo/

    包含了普通消息发送、Oneway 消息发送、顺序消息发送、普通消息消费、顺序消息消费等代码示例。

  • interface/

    封装 PINVOKE 调用的代码,需要包含到用户项目代码中。

  • SDK_GUIDE.pdf

    SDK 环境准备文档和 FAQ。

  • changelog

    新版本发布解决的问题和引入的新特性列表。

Visual Studio 2015 使用 .NET SDK 配置说明

  1. 使用 Visual Studio 2015 创建自己的项目。createproject
  2. 右键单击项目选择添加 > 现存在项,将下载的 SDK 中的 interface 目录下的所有文件都添加进去。interface
  3. 右键单击项目选择属性 > 配置管理器。设置活动解决方案配置release;设置活动解决方案平台x64
  4. 编写测试程序,然后进行编译,最后将 SDK 下的 DLL 放到和可执行文件同一级目录下,或者系统目录下即可运行。ddl
    说明

    SDK 提供了设置好的 Demo,直接打开工程进行编译即可。 运行的时候将相关的 DLL 文件拷贝到和可执行文件同级目录下,如下图。

    copyddl

Visual Studio 2015 配置 ASP.NET 使用消息队列 RocketMQ 版 SDK

  1. 使用 VS2015 创建一个 ASP.NET 的 Web Forms 项目。Web Forms
  2. 右键单击项目选择属性 > 配置管理器。设置活动解决方案配置release;设置活动解决方案平台x64x64
  3. 右键单击项目选择添加 > 现存在项,将下载的 SDK 中的 interface 目录下的所有文件都添加进去。

    请参考上文中配置普通的 .NET 项目的步骤 2。

  4. Global.asax.cs 文件中添加启动和关闭 SDK 的代码。
    注意 建议将 SDK 的代码封装成一个单例类,这样可以避免因为作用域的问题被垃圾回收器回收。SDK 的 example 目录下提供了一个 Example.cs,实现了一个简单的单例实现。 您需要把 Example.cs 包含到自己的项目中才能使用。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Optimization;
    using System.Web.Routing;
    using System.Web.Security;
    using System.Web.SessionState;
    using ons;    // 这个命名空间是 SDK 所在的命名空间
    using test;    // 这是一个简单封装 SDK 的类所在命名空间,见 SDK 的 example 目录下的 Example.cs
    namespace WebApplication4
    {
      public class Global : HttpApplication
      {
           void Application_Start(object sender, EventArgs e)
           {
               // Code that runs on application startup
               RouteConfig.RegisterRoutes(RouteTable.Routes);
               BundleConfig.RegisterBundles(BundleTable.Bundles);
               try
               {
                   // 启动 SDK 的代码,下面是简单封装 SDK 后的代码
                   OnscSharp.CreateProducer();
                   OnscSharp.StartProducer();
               }
               catch (Exception ex)
               {
                           //处理异常
               }
           }
           protected void Application_End(object sender, EventArgs e)
           {
               try
               {
                  // 关闭 SDK 的代码
                 OnscSharp.ShutdownProducer();
               }
               catch (Exception ex)
               { 
                     // 处理异常
               }
           }
      }
    }                  
  5. 编写测试程序,然后进行编译。
  6. 将 SDK 下的 DLL 放到和可执行文件同一级目录下,或者系统目录下即可运行。ddl
  7. 选择工具 > 选项 > 项目和解决方案 > Web 项目,然后勾选对网站和项目使用 IIS Express 的 64 位版。iisexpressproject&sultion