物联网技术辣么火,虽然之前有说过不少,但今天,仍有一个憋在我心里已久,不得不说的话题:基于Azure 的物联网平台必不可少,你可能已经在使用,但也许并没有意识到的服务:Azure 事件中心。

 

啊?事件中心是啥?

Azure 事件中心(Event Hubs)是一种高度可缩放的数据流式处理平台和事件引入服务,能够每秒接收和处理数百万事件。事件中心可以处理和存储分布式软件和设备生成的事件、数据或遥测;可以使用任何实时分析提供程序或批处理/存储适配器,转换和存储发送到数据中心的数据。由于能够以较低的延迟和极大的规模提供发布订阅功能,事件中心可以充当物联网和大数据的「入口」。

例如,我们可以通过 Azure 事件中心在移动应用中进行行为跟踪、从 Web 场采集流量信息,在电视游戏中捕获游戏内事件,或者从工业机器、互联汽车或其他设备中收集遥测数据。在上述这些应用中,事件中心在整个架构中的地位是这样的:

Azure 进阶攻略 | 关于Java 和事件中心的那不得不说的事_spark

那使用什么语音进行开发?

目前,Azure 事件中心服务支持下列开发语言和平台,我们可以根据项目需求选择一种来使用:


语言 / 平台



客户端程序包



EventProcessorHost 包



存储库



.NET Standard



​NuGet​



​NuGet​



​GitHub​



.NET framework



​NuGet​



​NuGet​



不适用



Java



​Maven​



​Maven​



​GitHub​



Node



​NPM​



不适用



​GitHub​



C



不适用



不适用



​GitHub​


 

哦~所以 Java 开发具体该怎么搞?

从上面的表中可以看到,Azure 事件中心是支持多种语言访问的,除了提供 REST API 外,还借助对 AMQP协议的支持为对应语言提供了 SDK。接下来就是今天要讲的重点了,Azure 事件中心是怎么支持 Java 编程开发的呢?

基于 Azure 事件中心的 Java 编程,主要可以使用下列三种 SDK:

  • 原生 SDK
  • 整合型 SDK
  • 第三方 SDK(主要基于 AMQP 协议)

原生 SDK

目前官方的 SDK 是在命名空间 com.microsoft.azure 下的 azure-eventhubs(以下简称新 SDK)。它是基于QPID.Proton 实现的,这样就绕过了 JMS 因此也更直接。

在这个 SDK 推出之前曾有一个老的 SDK:位于命名空间 com.microsoft.eventhubs.client下的 eventhubs-client(以下简称老 SDK),这是基于 QPID.JMS 的老版本(qpid-amqp-1-0-client-jms)实现的。

另外微软官方还提供了 EventProcessorHost 的 Java 版本,跟新 SDK ** 在同一个命名空间下,叫 azure-eventhubs-eph。(以下简称 eph-SDK**)

整合型 SDK

事件中心也支持与社区流行的数据处理框架相集成,因此也提供了相应的整合型 SDK,主要有两个:Apache Storm 和 SparkStreaming。

Apache Storm 整合 SDK(以下简称 Storm 整合 SDK

Spark Streaming 整合 SDK(以下简称 Spark 整合 SDK

Storm 整合 SDK 是基于老 SDK 实现的,而 Spark 整合 SDK 是基于新 SDK 实现的。这种差别主要是因为SDK 实现的时间先后造成的。

第三方 SDK

事件中心支持 AMQP 协议,因此也就支持第三方 AMQP 协议兼容的 SDK。目前事件中心 Java 编程里主要在用的 SDK 有两个,也有新老之分。

老 JMS SDK(qpid-amqp-1-0-client-jms)

根据该 SDK 的作者​​所说​​,他已经不再维护更新这个 SDK,而是主推新的 JMS SDK。所以即使当前这个 SDK还是有着广泛用途的,但推荐使用新的 JMS SDK。

  • Jar 包(需要以下四个包结合使用):

​https://mvnrepository.com/artifact/org.apache.qpid/qpid-amqp-1-0-client​

​https://mvnrepository.com/artifact/org.apache.qpid/qpid-amqp-1-0-client-jms​

​https://mvnrepository.com/artifact/org.apache.qpid/qpid-amqp-1-0-common​

​https://mvnrepository.com/artifact/org.apache.geronimo.specs/geronimo-jms_1.1_spec​

新 JMS SDK(qpid-jms-client)

 

 

接下来是 没有最干只有更干的干货

 

那么多不同 SDK,那么多新老版本,针对具体项目到底该选择哪个来用?呐,按照下表来选择吧,不要太崇拜我哦:


类型



名称



说明



原生  SDK



azure-eventhubs



官方最新 SDK,推荐使用



原生  SDK



eventhubs-client



老 SDK,缺乏维护,不推荐使用



原生  SDK



azure-eventhubs-eph



官方  EventProcessorHost 的 Java 实现,推荐使用



整合型 SDK



storm-eventhubs



适用于与 Apache Storm 整合使用



整合型 SDK



spark-streaming-eventhubs



适用于与 Spark Streaming 整合使用



第三方 SDK



qpid-amqp-1-0-client-jms



老 JMS SDK,不再维护,不推荐使用



第三方 SDK



qpid-jms-client



QPID 最新 JMS SDK,推荐使用


卖萌推荐

小编我砸骨卖血式整理的干货,不知客官有没有一丝丝感动?千万不要吝啬你的点赞资格哦!如果还有其他相关问题,或者你还有针对某种 Azure 服务开发遇到的问题,不妨通过留言告诉我哦,小编会不遗余力地为您解答~

最后,我手里还有一些其他基于 Azure 事件中心进行的编程资料,可根据实际需求参阅下列​