设为首页 收藏本站
查看: 984|回复: 0

[经验分享] Azure Event Hub 技术研究系列3-Event Hub接收事件

[复制链接]

尚未签到

发表于 2017-6-30 08:26:47 | 显示全部楼层 |阅读模式
  上篇博文中,我们通过编程的方式介绍了如何将事件消息发送到Azure Event Hub:
  Azure Event Hub 技术研究系列2-发送事件到Event Hub
  本篇文章中,我们继续:从Event Hub中接收事件。
  1. 新建控制台工程 EventHubReceiver
  2. 添加Nuget引用
  Microsoft.Azure.EventHubs
  Microsoft.Azure.EventHubs.Processor
DSC0000.png

  3. 实现IEventProcessor接口
  MyEventProcessor



1     using Microsoft.Azure.EventHubs;
2     using Microsoft.Azure.EventHubs.Processor;
3     using System.Threading.Tasks;
4
5     public class MyEventProcessor : IEventProcessor
6     {
7         public Task CloseAsync(PartitionContext context, CloseReason reason)
8         {
9             Console.WriteLine($"Processor Shutting Down. Partition '{context.PartitionId}', Reason: '{reason}'.");
10             return Task.CompletedTask;
11         }
12
13         public Task OpenAsync(PartitionContext context)
14         {
15             Console.WriteLine($"MyEventProcessor initialized. Partition: '{context.PartitionId}'");
16             return Task.CompletedTask;
17         }
18
19         public Task ProcessErrorAsync(PartitionContext context, Exception error)
20         {
21             Console.WriteLine($"Error on Partition: {context.PartitionId}, Error: {error.Message}");
22             return Task.CompletedTask;
23         }
24
25         public Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
26         {
27             foreach (var eventData in messages)
28             {
29                 var data = Encoding.UTF8.GetString(eventData.Body.Array, eventData.Body.Offset, eventData.Body.Count);
30                 Console.WriteLine($"Event message received. Partition: '{context.PartitionId}', Data: '{data}'");
31             }
32
33             return context.CheckpointAsync();
34         }
35     }
  4. Program程序
  添加常量作为事件中心连接字符串、事件中心名称、存储帐户容器名称、存储帐户名称和存储帐户密钥。 添加以下代码,并将占位符替换为其对应的值。



        private const string EhConnectionString = "{Event Hubs connection string}";
private const string EhEntityPath = "{Event Hub path/name}"; //MyEventHub
private const string StorageContainerName = "{Storage account container name}"; //eventhubcontainer
private const string StorageAccountName = "{Storage account name}"; //linux1
private const string StorageAccountKey = "{Storage account key}";
        private static readonly string StorageConnectionString = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", StorageAccountName, StorageAccountKey);
  这里涉及到Azure Storage Account,必须为上篇博文中创建的事件中心MyEventHub指定一个存储账户和存储容器
DSC0001.png

  增加MainAysnc方法:注册事件处理器,处理事件消息



1         /// <summary>
2         /// 注册事件处理器
3         /// </summary>
4         /// <param name="args"></param>
5         /// <returns></returns>
6         private static async Task MainAsync(string[] args)
7         {
8             Console.WriteLine("Registering EventProcessor...");
9
10             var eventProcessorHost = new EventProcessorHost(
11                 EhEntityPath,
12                 PartitionReceiver.DefaultConsumerGroupName,
13                 EhConnectionString,
14                 StorageConnectionString,
15                 StorageContainerName);
16
17             // Registers the Event Processor Host and starts receiving messages
18             await eventProcessorHost.RegisterEventProcessorAsync<MyEventProcessor>();
19
20             Console.WriteLine("Receiving. Press ENTER to stop worker.");
21             Console.ReadLine();
22
23             // Disposes of the Event Processor Host
24             await eventProcessorHost.UnregisterEventProcessorAsync();
25         }
  Main函数



1         static void Main(string[] args)
2         {
3             MainAsync(args).GetAwaiter().GetResult();
4         }
  Run
DSC0002.png

  至此,我们实现了事件消息发送到Event Hub,同时从Event Hub接收处理事件消息。
  周国庆
  2017/5/18

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389578-1-1.html 上篇帖子: Windows Azure Virtual Machine (34) 保护Azure虚拟机 下篇帖子: Connecting my Particle Photon Internet of Things device to the Azure IoT Hub(Tra
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表