如何将 OpenFaas 'mqtt-publisher' 与 FaasD 一起使用

问题描述 投票:0回答:0

对于一些基本背景,我们正在尝试使用无服务器框架“OpenFaas-Faasd”开发 ADAS 应用程序。我们目前有一个激光雷达传感器和一辆 sunFounder rpi 汽车作为我们的车辆。我们还使用 OpenFaas“mqtt-connector”通过 MQTT 代理“Mosquitto”将激光雷达数据传输到我们的无服务器功能。

我们使用激光雷达,使用带有 mqtt 连接器的触发器,在对象位于 20 厘米以内时将其发布到我们的无服务器功能。我们的无服务器函数接收这些消息,但它无法与汽车通信,因为“picar_4wd”包导入由于某种原因似乎无法与 OpenFaasd 一起使用。因此,我们决定采用另一种方法,让“外部控制器”与汽车进行通信,并通过无服务器功能向 rpi 汽车发布命令。这是我们遇到另一个问题的地方,因为我们使用 paho 将激光雷达数据本地发布到我们的 MQTT 代理“Mosquitto”,但我认为我们的无服务器功能无法与我们的代理通信,因此我们在尝试与代理连接时遇到错误很可能有不同的 IP 地址。我们进一步研究了如何从无服务器功能发布到外部代理,并发现了一个示例“Packet.com 会议 CES 2020 的无人机跟踪项目”(https://github.com/packet-labs/ iot 链接到示例)github,我们在其中找到了一些有关发布的信息,但是他们正在使用“发射器”代理并且没有运行 faasd 对于我们如何为我们的案例获得类似的东西有任何想法吗?

Github 代码示例和链接 - https://github.com/equinix-labs/metal-iot/blob/50cb577271bc5162b56955b47a8cdfcb5e9ab711/openfaas/services/mqtt-publisher/publisher.js

const emitter = require('emitter-io')

class Publisher {
    constructor (options) {
        this.channels = options.channels
        this.client = emitter.connect({
            host: options.host,
            port: options.port,
            secure: !! options.secure
        })
        this.client.on('error', error => console.log(error.stack))
        this.client.on('connect', function () { console.log(arguments) })
        this.client.on('offline', function () { console.log('offline', arguments) })
    }

    publish (options) {
        console.log(this.channels, options)
        this.client.publish({
            channel: options.channel,
            key: this.channels[options.channel],
            message: JSON.stringify(options.message),
            me: false
        })
    }
}

module.exports = Publisher

我们还有一个小问题,即使用带有“mqtt-connector”的触发器会被我们的发布者淹没,并且无法跟上激光雷达的速度,因为当检测到物体时,它会在不到一秒的时间内读取 30 次。有没有办法提高 CPU 利用率或“mqtt-connector”的整体速度(我们尝试将服务质量一直降低到 0,但没有看到对性能有任何重大影响)。

任何回复都非常有帮助。谢谢!

mqtt serverless mosquitto openfaas emitter
© www.soinside.com 2019 - 2024. All rights reserved.