Skip to content

将数据写入到 Supabase ​

Supabase 是一个开源的后端即服务(Backend as a Service, BaaS)平台,旨在帮助开发者快速构建和部署应用程序,提供实时数据库、用户认证、文件存储等后端能力。

Supabase 以开源形式发布,您可在 Github 上了解更多项目信息,并参与 Supabase 开源社区的建设与贡献。

本文将介绍如何将 Supabase 连接到 MQTT 服务器,并通过 EMQX Cloud 的数据集成功能,将 MQTT 消息进行解析和转换后写入 Supabase 数据库。

准备工作 ​

本节介绍了在 EMQX Cloud 中创建 Supabase 数据集成之前需要做的准备工作。

前置准备 ​

在开始之前,请确保您已具备以下基础知识:

  • 了解数据集成的基本概念和使用方式
  • 了解规则的基本原理与配置方法

网络设置 ​

为了确保 EMQX Cloud 能够正常访问 Supabase 服务,您需要进入部署管理界面,在网络管理中启用 NAT 网关功能。

部署 Supabase ​

Supabase 支持自托管部署和托管云服务部署两种方式。

在本教程中,我们主要介绍 Supabase 的托管云服务部署。如您有自托管部署的需求,可参考 Supabase 官方文档 - 自托管部署获取更多信息。

  1. 访问 Supabase 控制台,完成注册并登录。

  2. 按照页面指引创建您的 Organization 和 Project。

    Supabase Project

  3. 根据实际业务需求创建数据表。本教程以车联网场景为示例,创建一张车辆实时信息表,用于存储车辆的经纬度、速度、电量、电机温度以及记录时间等信息。

    Table Columns

获取连接参数 ​

Supabase 提供三种数据库连接方式:

  • Direct connection
  • Transaction pooler
  • Session pooler

其中,Direct connection 在免费计划中仅支持 IPv6 域名,而 EMQX Cloud 当前仅支持 IPv4 域名解析。因此,您可以选择启用 IPv4 add-on,或使用 Transaction pooler / Session pooler 等其他连接方式。

本文以 Session pooler 为示例。您可以点击 Project 页面顶部的 Connect 按钮,查看对应的连接信息,并获取后续创建连接器所需的参数。

Connection

创建连接器 ​

在 EMQX Cloud 中,您可以通过 PostgreSQL 连接器访问 Supabase 数据库。

  1. 进入部署的数据集成页面,选择 PostgreSQL。如果已存在其他连接器,点击新建连接器,然后选择 PostgreSQL。
  2. 根据您获取的连接参数配置连接器,其中密码为创建 Supabase Project 时设置的数据库密码。

Supabase Connector

  1. 如果您想建立加密连接,请点击启用 TLS 切换开关。

  2. 点击测试连接按钮,如果 PostgreSQL 服务能够正常访问,则会返回成功提示。

  3. 点击新建按钮完成连接器的创建。

创建规则 ​

本节演示了如何在 EMQX Cloud 中创建一条规则,用于处理来自 MQTT 主题 test/vehicle 的车辆实时数据消息,并通过 PostgreSQL Sink 将解析后的数据写入 Supabase 数据库。

  1. 点击连接器列表操作列下的新建规则图标或在规则列表中点击新建规则进入新建规则步骤页。

  2. 在 SQL 编辑器中输入规则 SQL 如下:

    sql
    SELECT
      payload.vehicle_id        AS vehicle_id,
      payload.longitude         AS longitude,
      payload.latitude          AS latitude,
      payload.speed             AS speed,
      payload.battery_level     AS battery_level,
      payload.motor_temperature AS motor_temperature
    FROM
      "test/vehicle"

    TIP

    如果您初次使用 SQL,可以点击 SQL 示例 和启用调试来学习和测试规则 SQL 的结果。

  3. 点击下一步开始创建包含 PostgreSQL Sink 的动作。

  4. 从使用连接器下拉框中选择已创建好的 PostgreSQL(Supabase)连接器。

  5. 在 SQL 模板 中填写如下 SQL,用于将解析后的数据写入 Supabase 表中。此处为预处理 SQL,字段不应当包含引号,SQL 末尾不要带分号 ;:

    sql
    INSERT INTO vehicle_realtime_data (
      vehicle_id,
      longitude,
      latitude,
      speed,
      battery_level,
      motor_temperature
    )
    VALUES (
      ${vehicle_id},
      ${longitude},
      ${latitude},
      ${speed},
      ${battery_level},
      ${motor_temperature}
    )
  6. 根据需要配置高级设置选项(可选)。

  7. 点击确认按钮完成动作的配置。

  8. 在弹出的成功创建规则提示框中点击返回规则列表,从而完成了整个数据集成的配置链路。

  9. 在Flow 设计器中可以看到已构建完成的数据流:

    Flow

测试规则 ​

推荐使用 MQTTX 模拟车辆数据上报,同时您也可以使用其他任意客户端完成。

  1. 使用 MQTTX 连接到部署,向预设主题(以 test/vehicle 为例)发布车辆实时数据消息。

MQTTX

  1. 在 Supabase 的 Table Editor 中,可以看到刚刚传入的数据已被添加至表中。

Table Result

更多内容 ​

至此,您已完成 Supabase 与 EMQX Cloud 的集成,实现了将 MQTT 服务器发布的消息经过数据转换后写入 Supabase。

如需了解 Supabase 的更多功能,请参考 Supabase 官方文档。

您也可以访问 GitHub,获取更多不同语言的 MQTT 客户端示例。