我可以使用发布函数中的回调来接收来自订阅者的结果吗?

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

我编写了一个 AWS lambda 函数,它使用 IoT 来发布远程设备订阅的消息。每个设备仅订阅包含其特定 ID 的消息。这对于发布消息来指示设备来说效果很好;但是,我有一条消息要求从设备请求信息。发布函数包含一个似乎被调用的回调,因为我在日志文件中获取了一个条目,但我无法确定订阅者中的哪个位置可以填充结果值(如果有的话)。它始终返回为未定义。 这是lambda函数中的相关代码:

iot.device.publish(`pi/${device}/${event.body.actionType}`, payload,null,(err,result) => {
    util.log(`In publish callback. err: ${err} result: ${result}`)
    if (device === event.body.devices[event.body.devices.length - 1]) {
        published = true
    }
    if(err) {
        util.log('Failure:',err.message)
    }
})

我没有编写设备代码,但这似乎是处理消息的地方

device.on('message', (topic, data) => {
  let payload = parsePayload(data)
  logger.info(`received iot message for topic ${topic} with payload ${payload}`)

正如我在执行 lambda 函数时在设备日志中看到的日志条目。但是,当我扩展参数列表时,回调未定义

device.on('message', (topic, data, nullObject, callback) => {
  let payload = parsePayload(data)
  logger.info(`received iot message for topic ${topic} with payload ${payload} nullObject ${typeof nullObject} callback ${typeof callback}`)

我很困惑在订阅者的哪个位置调用发布者的回调以及如何访问它。 非常感谢任何关于这是否是有效方法的见解或解释。

2024-02-23 更新:回调似乎只接受错误参数,因此它仅用于了解订阅者已消费消息并测试是否存在/存在错误。我将考虑让订阅者为原始发布者发布消息,并让发布者阻止/超时,从原始消息中查找结果。

2024-02-27 更新:我能够利用同事的代码,该代码将发布包装在一个承诺中,该承诺将一个函数推送到一个队列上,如果它收到来自订阅者的响应消息,则该函数会在发布者的消息处理程序中弹出。该函数将取消承诺中的超时,该超时会因“未收到响应”而被拒绝,而是通过订阅者返回详细信息来解决。

amazon-web-services aws-lambda iot publish subscribe
1个回答
0
投票

问题已解决。发布者在回调函数中无法收到订阅者的回复;但是,可以开发一个框架来等待订阅者用自己的发布回复原始发布者,该发布者可以通过发布者的消息事件处理程序接收该消息,或者在选定的时间内没有返回消息而超时。

© www.soinside.com 2019 - 2024. All rights reserved.