ASP.NET CODE 批量发送与接收事件

第一步获取事件中心连接字符串

若要使用事件中心,需要创建一个事件中心命名空间。 命名空间是多个事件中心或 Kafka 主题的范围容器。 此命名空间提供唯一的 FQDN。 创建命名空间后,可以获取与事件中心通信所需的连接字符串。

事件中心的连接字符串中嵌入了以下组成部分:
FQDN = 创建的事件中心命名空间的 FQDN(包括事件中心命名空间的名称,后接 servicebus.chinacloudapi.cn)
SharedAccessKeyName = 为应用程序的 SAS 密钥选择的名称
SharedAccessKey = 生成的密钥值。

连接字符串模板如下所示:

Endpoint=sb://<FQDN>/;SharedAccessKeyName=<KeyName>;SharedAccessKey=<KeyValue>

Endpoint=sb://dummynamespace.servicebus.chinacloudapi.cn/;SharedAccessKeyName=DummyAccessKeyName;SharedAccessKey=5dOntTRytoC24opYThisAsit3is2B+OGY1US/fuL3ly= 是连接字符串的示例

从门户中获取连接字符串
  1. 登录到 Azure 门户。

  2. 在左侧导航菜单中,选择“所有服务”。

  3. 选择“分析”部分中的“事件中心” 。

  4. 在事件中心列表中,选择事件中心。

  5. 在“事件中心命名空间”页中的左侧菜单上选择“共享访问策略” 。
    在这里插入图片描述

  6. 在“事件中心命名空间”页中的左侧菜单上选择“共享访问策略” 。
    在这里插入图片描述

  7. 在“事件中心命名空间”页中的左侧菜单上选择“共享访问策略” 。
    在这里插入图片描述

第二步发送事件

需要导入NuGet 包:Azure.Messaging.EventHubs
实体下的事件中心一定要创建

在这里插入图片描述

代码:
using System;
using System.Text;
using System.Threading.Tasks;
using Azure.Messaging.EventHubs;
using Azure.Messaging.EventHubs.Processor;
using Azure.Messaging.EventHubs.Producer;
namespace EventHubsSender
{
    class Program
    {
        private const string connectionString = "这里是上面获取到的链接字符串";
        private const string eventHubName = "创建的事件中心的名称(非命名空间名称)";
        static async Task Main()
        {
            try
            {
                //创建可用于将事件发送到事件中心的生产者客户端
                await using (var producerClient = new EventHubProducerClient(connectionString, eventHubName))
                {
                    //创建一批事件
                    using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();

                    //向批处理添加事件。事件由字节和元数据的集合表示. 
                    eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes("第一个事件")));
                    eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes("第二个事件")));
                    eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes("第三个事件")));

                    //使用producer客户机将事件批发送到事件中心
                    await producerClient.SendAsync(eventBatch);
                    Console.WriteLine("已经发布了一批3个事件");
                }
            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message.ToString());
            }
        }
    }
}

运行之后再事件中心的概述中查看
在这里插入图片描述

接收事件

需要NuGet 包:Azure.Messaging.EventHubs
需要NuGet 包:Azure.Messaging.EventHubs.Processor
代码:
using System;
using System.Text;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using Azure.Messaging.EventHubs;
using Azure.Messaging.EventHubs.Consumer;
using Azure.Messaging.EventHubs.Processor;
namespace EventHubsReceiver
{
    class Program
    {
        private const string ehubNamespaceConnectionString = "这里是上面获取到的链接字符串";
        private const string eventHubName = "创建的事件中心的名称(非命名空间名称)";
        private const string blobStorageConnectionString = "AZURE存储连接字符串";
        private const string blobContainerName = "BLOB容器名称";
        static async Task Main()
        {
            // 从默认消费者组读取:$default
            string consumerGroup = EventHubConsumerClient.DefaultConsumerGroupName;

            // 创建事件处理器将使用的blob容器客户端 
            BlobContainerClient storageClient = new BlobContainerClient(blobStorageConnectionString, blobContainerName);

            // 创建事件处理器客户端以处理事件中心中的事件
            EventProcessorClient processor = new EventProcessorClient(storageClient, consumerGroup, ehubNamespaceConnectionString, eventHubName);

            // 注册处理程序以处理事件和处理错误
            processor.ProcessEventAsync += ProcessEventHandler;
            processor.ProcessErrorAsync += ProcessErrorHandler;

            // 开始处理
            await processor.StartProcessingAsync();

            // 等待10秒,等待事件得到处理
            await Task.Delay(TimeSpan.FromSeconds(10));

            // 停止处理
            await processor.StopProcessingAsync();
        }
        static async Task ProcessEventHandler(ProcessEventArgs eventArgs)
        {
            // 将事件正文写入控制台窗口
            Console.WriteLine("\tRecevied event: {0}", Encoding.UTF8.GetString(eventArgs.Data.Body.ToArray()));

            // 更新blob存储中的检查点,以便应用程序在下次运行时仅接收新事件
            await eventArgs.UpdateCheckpointAsync(eventArgs.CancellationToken);
        }

        static Task ProcessErrorHandler(ProcessErrorEventArgs eventArgs)
        {
            // 将有关错误的详细信息写入控制台窗口
            Console.WriteLine($"\tPartition '{ eventArgs.PartitionId}': 遇到未处理的异常。这是预料不到的。.");
            Console.WriteLine(eventArgs.Exception.Message);
            return Task.CompletedTask;
        }
    }
}

运行之后应会看到一条消息,指出已接收事件,就是上面发送到事件中心的三个事件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶知秋~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值