作者:尘央

背景

“以事件集成阿里云,从 EventBridge 开始”是 EventBridge 这款云产品的愿景和使命。作为一款无服务器事件总线服务,EventBridge 从发布以来,以标准化的 CloudEvents 1.0 协议连接了大量云产品和云事件,用户可以通过 EventBridge 轻松访问云上事件,驱动云上生态。

截止目前为止,EventBridge 已集成 85+ 阿里云产品,提供了 941+ 事件类型,集成 50+ SaaS产品,通过事件规则可轻松驱动 10+ 阿里系一方云产品的计算力。

 title=

另一方面,钉钉生态空前繁荣,拥有 4000+ 家的生态伙伴,包括 ISV 生态伙伴、硬件生态伙伴、服务商、咨询生态和交付生态伙伴等。通过事件将钉钉生态与阿里云生态联通,是践行「云钉一体」战略的重要途径,EventBridge 作为阿里云标准化的事件枢纽,其重要性不言而喻。

今天,EventBridge 联合钉钉连接器,打通了钉钉生态和阿里云生态,钉钉的生态伙伴可以通过通道的能力驱动阿里云上海量的计算力。

关键技术

EventBridge 集成阿里云和钉钉生态的方案,核心能力由钉钉连接器和 EventBridge 的 HTTP 事件源能力提供。

钉钉连接器

钉钉连接平台通过可视化拖拽配置、一键订阅等零代码方式,简单高效的实现钉钉、企业内部系统、知名厂商系统(金蝶、用友、SAP 等)、钉钉第三方企业应用之间数据互通和集成。

 title=

近期,钉钉连接器在「连接流」中发布了「HTTP Webhook」的执行动作能力,支持将钉钉生态开放给外部生态,EventBridge 正是通过该能力将钉钉生态接入到阿里云生态。

 title=

EventBridge HTTP 事件源

事件源是事件驱动的基石,如何获取更多事件源也是 EventBridge 一直在探索和尝试的方向。针对市场上其他云厂商和垂直领域的 Saas 服务,EventBridge 发布了 HTTP 事件源能力,提供简单且易于集成的三方事件推送 ,帮助客户更加高效、便捷地实现业务上云。

 title=

具体而言,HTTP 事件源是 EventBridge 支持的事件源的一种,它以 Webhook 形式暴露了发布事件的 HTTP 请求地址,用户可以在有 URL 回调的场景配置 HTTP  事件源,或者直接使用最简单的 HTTP 客户端来完成事件的发布。HTTP  事件源提供了支持 HTTP 与 HTTPS,公网与阿里云 VPC 等不同请求方式、不同网络环境的 Webhook URL,便于用户将其集成到各类应用中。接入时无需使用客户端,仅需保证应用可以访问到对应 Webhook URL 即可,这使得接入过程变得简单而高效。

在将 HTTP 请求转换为 CloudEvent 的时候,EventBridge 会将请求的头部和消息体部分置于 CloudEvent 字段中,其余字段会依据用户 EventBridge 资源属性以及系统默认规则进行填充。用户可以在事件规则中,对所需的内容进行过滤、提取,最终按照模板拼装成所需的消息内容投递给事件目标。

 title=

在安全方面,HTTP 事件源不需要用户进行复杂的签名鉴权,支持 3 种类型开箱即用的安全设置,分别是请求方法、源 IP 以及请求来源域名。

  • 请求方法:用户可以配置当前请求此事件源时合法的 HTTP 请求方法,如果方法类型不满足配置规则,请求将被过滤,不会投递到事件总线。
  • 源 IP:用户可以设置允许访问此事件源时合法的源 IP(支持 IP 段和 IP),当请求源 IP 不在设置的范围内时,请求将被过滤,不会投递到事件总线。
  • 请求来源域名:即 HTTP 请求的 referer 字段,当请求的 referer 与用户配置不相符时,请求被过滤,不会投递到事件总线。

应用场景

钉钉连接器市场有数百款连接器,包含官方连接器和第三方生态连接器。

  • 官方连接器,来源主要是钉钉官方的应用,比如视频会议、日程、通讯录、审批流、钉盘、宜搭等,企业和 SaaS 厂商可以充分利用这些官方应用的事件构建企业级的应用系统,也可以将钉钉的官方数据流与其他系统做深度集成。
  • 第三方连接器,来源主要是钉钉的生态合作伙伴,比如金蝶、行翼云、集简云、用友、易快报、销帮帮等。SaaS 厂商可以通过开放连接器来开放数据,与其它应用互联互通。

 title=

如上图所示,借助钉钉连接器,可以将钉钉官方事件源和钉钉 SaaS 事件源连接到阿里云 EventBridge,从而能驱动云上的弹性资源。SaaS 厂商能够借助 EventBridge 连接的能力快速构建云原生的 SaaS 应用,借助云的弹性能力,采用云原生最新的技术栈,快速高效地开发 SaaS 应用,同时利用 EventBridge 获取钉钉和其它 SaaS 应用的数据源,轻松进行业务创新。

当钉钉生态和 EventBridge 联通后,能产生哪些应用场景呢?

  • 分析场景:企业借助 EventBridge 事件分析能力,对钉钉官方事件进行分析,快速洞察企业运转数据。比如审批效率,员工变更趋势、会议效率等。
  • 通知场景:钉钉连接器 + EventBridge  可覆盖绝大多数消息通知场景,帮助企业用户快速感知 审批,员工变动,会议室信息等一些列企业基础支持系统。
  • 集成场景:基于阿里云基础建设,可快速提升钉钉生态和企业内部数据的互通。例如当公司需要对钉钉和企业内部 IT 系统进行数据打通时,EventBridge 解决方案可以毫不费力地将建立在阿里云体系的 IT 系统连通起来,比如函数计算,云数据库,消息队列等连接扩展阿里云生态。
  • EDA 场景:使用 EventBridge 快速构建 EDA 驱动的自动化业务流程。例如在新员工入职时,获取员工变动信息。并集中推送到邮箱系统,业务支持系统(DB),CRM 系统等。对企业新员工权限账户进行一站式授权,较少重复机械的业务审批流程。

最佳实践:新增员工 0 代码入库

本章节介绍使用钉钉连接器和 EventBridge 的最佳实践,通过一个例子展示如何 0 代码将钉钉的一个新员工入职记录录入到自定义的数据库当中,企业可以根据该数据库搭建各类员工管理系统。

方案简介

整个方案涉及到钉钉、钉钉连接器、EventBridge、阿里云数据库等产品,整个链路如下图所示:

 title=

前置条件:

  • 拥有一个钉钉账号,并创建一个团队成为管理员,并能登陆钉钉开放平台。
  • 拥有一个阿里云账号,并开通 EventBridge 和阿里云数据库。

实践步骤

整个实践过程分为以下几个步骤。

1)创建事件总线和 HTTP 事件源

首先登陆 EventBridge 控制台,创建一个事件总线和 HTTP 事件源,如下图所示,可以先跳过规则和目标的创建。

 title=

创建完成后,进入事件总线的详情列表,获取 HTTP 事件源的公网「Webhook 地址」,如下图所示:

 title=

2)创建钉钉连接流

登陆钉钉开放平台,进入连接平台,在「我的连接」下创建连接流,在创建界面,选择触发器为「官方-通讯录-通讯录用户增加」。

 title=

连接流创建完成后,进入编辑页面,添加一个「HTTP Webhook」的节点,在「请求地址」一栏填入上个步骤获取到的「HTTP 事件源」地址。

 title=

3)钉钉触发新增员工事件

打开钉钉,进入团队,邀请另一个账号加入团队,然后进入事件总线的「事件追踪」页面,可以发现该员工新增事件已经投递到了事件总线之上。

 title=

该事件被转换成了一个「CloudEvents」格式,其「$.data.body」为事件的详情,包含 dingId, userId, department 等字段。

{
  "datacontenttype": "application/json",
  "aliyunaccountid": "11*****48",
  "data": {
    "headers": {
    },
    "path": "/webhook/putEvents",
    "body": {
      "syncAction": "user_add_org",
      "orderInDepts": "{1:17626***32512}",
      "dingId": "$:***:$5RU***QhP/pK**+4A==",
      "active": true,
      "avatar": "",
      "isAdmin": false,
      "userId": "1411****46379",
      "isHide": false,
      "isLeaderInDepts": "{1:false}",
      "isBoss": false,
      "isSenior": false,
      "name": "小明",
      "department": [
        1
      ]
    },
    "httpMethod": "POST",
    "queryString": {}
  },
  "subject": "acs:eventbridge:cn-hangzhou:**:eventbus/**/eventsource/my.dingtalk",
  "aliyunoriginalaccountid": "118**48",
  "source": "my.dingtalk",
  "type": "eventbridge:Events:HTTPEvent",
  "aliyunpublishtime": "2022-05-13T07:28:29.505Z",
  "specversion": "1.0",
  "aliyuneventbusname": "chenyangbus",
  "id": "7059131c-**-**-b232-c4c3592120ae",
  "time": "2022-05-13T15:28:29.504+08:00",
  "aliyunregionid": "cn-hangzhou",
  "aliyunpublishaddr": "*.*.61.88"
}

4)数据库创建员工表

通过 RDS 控制台购买一个实例,并创建好数据库,然后根据上述新增员工事件的格式,提取部分字段对数据库进行建表。

CREATE TABLE `user_info` (
  `dingId` varchar(256) NULL,
  `active` varchar(256) NULL,
  `isAdmin` varchar(256) NULL,
  `userId` varchar(256) NULL,
  `name` varchar(256) NULL
) ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8;

5)创建事件规则

数据库准备好后,返回 EventBridge 控制台,为第一步创建的事件总线创建事件规则,对「新增员工事件」进行转换并投递至数据库当中。

首先创建规则,过滤第一步创建的 HTTP 事件源。

 title=

然后选择 RDS 目标,做好参数映射。

 title=

6)触发事件入库

第三步触发事件时,因未配置规则和目标,事件没有被消费,故需要通过钉钉重新触发一次事件,然后从 EventBridge 控制台观察推送轨迹。

 title=

从轨迹中可以看出推送成功,然后通过 RDS 控制台可以查询到该条记录。

 title=

至此,一个钉钉团队新员工入职的记录通过 0 代码的方式入库到企业数据库当中,可以非常低的成本开发企业级管理应用。

参考链接:

[1] 阿里云 EventBridge 事件驱动架构实践

[2] 数据库应用集成

[3] EDA 事件驱动架构与 EventBridge 二三事

[4] 云事件驱动引擎EventBridge

[5] “消息驱动、事件驱动、流 ”基础概念解析

了解更多 EventBridge 相关信息,扫描下方二维码加入钉钉群~

 title=

点击阅读原文,进入官网了解更多内容~


阿里云云原生
1k 声望302 粉丝