使用 .NET Standard 将消息发送到 Azure 事件中心入门

Note

GitHub 上提供了此示例。

本教程演示如何编写将一组消息发送到事件中心的 .NET Core 控制台应用程序。 可以按原样运行 GitHub 解决方案,将 EhConnectionStringEhEntityPath 字符串替换为事件中心的值。 或者,可以按照本教程中的步骤创建自己的解决方案。

先决条件

为了将消息发送到事件中心,我们将使用 Visual Studio 编写 C# 控制台应用程序。

创建事件中心命名空间和事件中心

第一步是使用 Azure 门户创建事件中心类型的命名空间,并获取应用程序与事件中心进行通信所需的管理凭据。 要创建命名空间和事件中心,请按照本文中的步骤操作,并继续执行以下步骤。

创建控制台应用程序

启动 Visual Studio。 在“文件”菜单中,单击“新建”,并单击“项目”。 创建 .NET Core 控制台应用程序。

新建项目

添加事件中心 NuGet 包

通过执行以下步骤,将 Microsoft.Azure.EventHubs .NET 标准库 NuGet 包添加到项目中:

  1. 右键单击新创建的项目,并选择“管理 NuGet 包” 。
  2. 单击“浏览”选项卡,然后搜索“Microsoft.Azure.EventHubs”,并选择“Microsoft.Azure.EventHubs”包。 单击“安装”以完成安装,并关闭此对话框。

编写一些代码以将消息发送到事件中心

  1. 在 Program.cs 文件顶部添加以下 using 语句。

    using Microsoft.Azure.EventHubs;
    using System.Text;
    using System.Threading.Tasks;
    
  2. Program 类添加常量作为事件中心连接字符串和实体路径(单个事件中心名称)。 将括号中的占位符替换为在创建事件中心时获得的相应值。 请确保 {Event Hubs connection string} 是命名空间级别的连接字符串,而不是事件中心字符串。

    private static EventHubClient eventHubClient;
    private const string EhConnectionString = "{Event Hubs connection string}";
    private const string EhEntityPath = "{Event Hub path/name}";
    
  3. 将名为 MainAsync 的新方法添加到 Program 类,如下所示:

    private static async Task MainAsync(string[] args)
    {
        // Creates an EventHubsConnectionStringBuilder object from the connection string, and sets the EntityPath.
        // Typically, the connection string should have the entity path in it, but for the sake of this simple scenario
        // we are using the connection string from the namespace.
        var connectionStringBuilder = new EventHubsConnectionStringBuilder(EhConnectionString)
        {
            EntityPath = EhEntityPath
        };
    
        eventHubClient = EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());
    
        await SendMessagesToEventHub(100);
    
        await eventHubClient.CloseAsync();
    
        Console.WriteLine("Press ENTER to exit.");
        Console.ReadLine();
    }
    
  4. 将名为 SendMessagesToEventHub 的新方法添加到 Program 类,如下所示:

    // Creates an event hub client and sends 100 messages to the event hub.
    private static async Task SendMessagesToEventHub(int numMessagesToSend)
    {
        for (var i = 0; i < numMessagesToSend; i++)
        {
            try
            {
                var message = $"Message {i}";
                Console.WriteLine($"Sending message: {message}");
                await eventHubClient.SendAsync(new EventData(Encoding.UTF8.GetBytes(message)));
            }
            catch (Exception exception)
            {
                Console.WriteLine($"{DateTime.Now} > Exception: {exception.Message}");
            }
    
            await Task.Delay(10);
        }
    
        Console.WriteLine($"{numMessagesToSend} messages sent.");
    }
    
  5. Program 类的 Main 方法中添加以下代码。

    MainAsync(args).GetAwaiter().GetResult();
    

    Program.cs 文件的内容如下所示。

    namespace SampleSender
    {
        using System;
        using System.Text;
        using System.Threading.Tasks;
        using Microsoft.Azure.EventHubs;
    
        public class Program
        {
            private static EventHubClient eventHubClient;
            private const string EhConnectionString = "{Event Hubs connection string}";
            private const string EhEntityPath = "{Event Hub path/name}";
    
            public static void Main(string[] args)
            {
                MainAsync(args).GetAwaiter().GetResult();
            }
    
            private static async Task MainAsync(string[] args)
            {
                // Creates an EventHubsConnectionStringBuilder object from the connection string, and sets the EntityPath.
                // Typically, the connection string should have the entity path in it, but for the sake of this simple scenario
                // we are using the connection string from the namespace.
                var connectionStringBuilder = new EventHubsConnectionStringBuilder(EhConnectionString)
                {
                    EntityPath = EhEntityPath
                };
    
                eventHubClient = EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());
    
                await SendMessagesToEventHub(100);
    
                await eventHubClient.CloseAsync();
    
                Console.WriteLine("Press ENTER to exit.");
                Console.ReadLine();
            }
    
            // Creates an event hub client and sends 100 messages to the event hub.
            private static async Task SendMessagesToEventHub(int numMessagesToSend)
            {
                for (var i = 0; i < numMessagesToSend; i++)
                {
                    try
                    {
                        var message = $"Message {i}";
                        Console.WriteLine($"Sending message: {message}");
                        await eventHubClient.SendAsync(new EventData(Encoding.UTF8.GetBytes(message)));
                    }
                    catch (Exception exception)
                    {
                        Console.WriteLine($"{DateTime.Now} > Exception: {exception.Message}");
                    }
    
                    await Task.Delay(10);
                }
    
                Console.WriteLine($"{numMessagesToSend} messages sent.");
            }
        }
    }
    
  6. 运行程序,并确保没有任何错误。

祝贺! 现在已向事件中心发送消息。

后续步骤

访问以下链接可以了解有关事件中心的详细信息: